in atomos/src/main/java/org/apache/felix/atomos/impl/base/AtomosBase.java [1232:1267]
public Optional<AtomosContent> findAtomosContent(String symbolicName)
{
Map<String, AtomosContent> nameToBundle = this.nameToBundle;
if (nameToBundle == null)
{
nameToBundle = new HashMap<>();
final Map<String, AtomosContent> populate = nameToBundle;
getAtomosContents().forEach(
(a) -> populate.putIfAbsent(a.getSymbolicName(), a));
Set<AtomosLayer> visited = new HashSet<>();
Deque<AtomosLayer> stack = new ArrayDeque<>();
visited.add(this);
stack.push(this);
while (!stack.isEmpty())
{
AtomosLayer layer = stack.pop();
layer.getAtomosContents().forEach(
(a) -> populate.putIfAbsent(a.getSymbolicName(), a));
List<AtomosLayer> parents = layer.getParents();
for (int i = parents.size() - 1; i >= 0; i--)
{
AtomosLayer parent = parents.get(i);
if (!visited.contains(parent))
{
visited.add(parent);
stack.push(parent);
}
}
}
this.nameToBundle = populate;
}
return Optional.ofNullable(nameToBundle.get(symbolicName));
}