Fix failure in ModuleBuilderTests.testBug522671b due to conflict
requirements between JPMS package lookup & team-packages
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
index 6cda4e9..77162c0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
@@ -835,11 +835,17 @@
while (i < length) {
//{ObjectTeams: For a team with team package we need to give precedence to the type:
if (i == length -1 && module.canAccess(packageBinding)) {
- ReferenceBinding type = packageBinding.getType(compoundName[i], module);
- if (type != null && type.isValidBinding() && type.isTeam()) {
- if (!type.canBeSeenBy(this.fPackage))
- return new ProblemReferenceBinding(compoundName, type, ProblemReasons.NotVisible);
- return type;
+ boolean save = packageBinding.dontRememberNotFoundType;
+ packageBinding.dontRememberNotFoundType = true;
+ try {
+ ReferenceBinding type = packageBinding.getType(compoundName[i], module);
+ if (type != null && type.isValidBinding() && type.isTeam()) {
+ if (!type.canBeSeenBy(this.fPackage))
+ return new ProblemReferenceBinding(compoundName, type, ProblemReasons.NotVisible);
+ return type;
+ }
+ } finally {
+ packageBinding.dontRememberNotFoundType = save;
}
}
// SH}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PackageBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PackageBinding.java
index 20dfd87..971a6d8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PackageBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PackageBinding.java
@@ -54,6 +54,10 @@
/** Is this package exported from its module? NB: to query this property use {@link #isExported()} to ensure initialization. */
Boolean isExported;
+//{ObjectTeams: during a non-JLS lookup we may get a not-found-type but that should not be remembered!
+ boolean dontRememberNotFoundType;
+// SH}
+
protected PackageBinding(char[][] compoundName, LookupEnvironment environment) {
// for creating problem package
this.compoundName = compoundName;
@@ -87,6 +91,7 @@
}
//{ObjectTeams: ROFI changed visibility, was private
void addNotFoundType(char[] simpleName) {
+ if (this.dontRememberNotFoundType) return;
// SH}
if (this.environment.suppressImportErrors)
return;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SplitPackageBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SplitPackageBinding.java
index ee04403..f359645 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SplitPackageBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SplitPackageBinding.java
@@ -235,6 +235,11 @@
ReferenceBinding candidate = null;
boolean accessible = false;
for (PackageBinding incarnation : this.incarnations) {
+//{ObjectTeams:
+ boolean save = incarnation.dontRememberNotFoundType;
+ incarnation.dontRememberNotFoundType = this.dontRememberNotFoundType;
+ try {
+// orig:
ReferenceBinding type = incarnation.getType(name, mod);
if (type != null) {
if (candidate == null || !accessible) {
@@ -244,6 +249,11 @@
return new ProblemReferenceBinding(type.compoundName, candidate, ProblemReasons.Ambiguous); // TODO(SHMOD) add module information
}
}
+// :giro
+ } finally {
+ incarnation.dontRememberNotFoundType = save;
+ }
+// SH}
}
if (candidate != null && !accessible)
return new ProblemReferenceBinding(candidate.compoundName, candidate, ProblemReasons.NotAccessible); // TODO(SHMOD) more info