Bug 527169: [9][impl] SearchableEnvironment may answer unnamed module
more than once
Change-Id: I82957aed99ade7d3e46ccd0898b2c78727249faa
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
index 2b30b8e..5116003 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
@@ -831,12 +831,21 @@
case AnyNamed:
char[][] names = CharOperation.NO_CHAR_CHAR;
IPackageFragmentRoot[] packageRoots = this.nameLookup.packageFragmentRoots;
+ boolean containsUnnamed = false;
for (IPackageFragmentRoot packageRoot : packageRoots) {
IPackageFragmentRoot[] singleton = { packageRoot };
if (strategy.matches(singleton, locs -> locs[0] instanceof JrtPackageFragmentRoot || getModuleDescription(locs) != null)) {
if (this.nameLookup.isPackage(pkgName, singleton)) {
IModuleDescription moduleDescription = getModuleDescription(singleton);
- char[] aName = moduleDescription != null ? moduleDescription.getElementName().toCharArray() : ModuleBinding.UNNAMED;
+ char[] aName;
+ if (moduleDescription != null) {
+ aName = moduleDescription.getElementName().toCharArray();
+ } else {
+ if (containsUnnamed)
+ continue;
+ containsUnnamed = true;
+ aName = ModuleBinding.UNNAMED;
+ }
names = CharOperation.arrayConcat(names, aName);
}
}