diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java index d8b4f992c7c..1ef5fe751d0 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java @@ -166,6 +166,14 @@ CompleteTypeBindingsSteps next() { return this; // no-change to signal "at end" } + boolean isRequired(boolean buildFieldsAndMethods, boolean resolveAnnotations) { + return switch (this) { + case BUILD_FIELDS_AND_METHODS -> buildFieldsAndMethods; + case INTEGRATE_ANNOTATIONS_IN_HIERARCHY -> resolveAnnotations; + default -> true; + }; + } + /** values without NONE */ static final CompleteTypeBindingsSteps[] realValues = Arrays.copyOfRange(values(), 1, values().length-1); @@ -601,11 +609,14 @@ public void completeTypeBindings(CompilationUnitDeclaration parsedUnit) { * suitable replacement will be substituted (such as Object for a missing superclass) */ public void completeTypeBindings(CompilationUnitDeclaration parsedUnit, boolean buildFieldsAndMethods) { + completeTypeBindings(parsedUnit, buildFieldsAndMethods, true); +} +public void completeTypeBindings(CompilationUnitDeclaration parsedUnit, boolean buildFieldsAndMethods, boolean resolveAnnotations) { if (parsedUnit.scope == null) return; // parsing errors were too severe LookupEnvironment rootEnv = this.root; CompilationUnitDeclaration previousUnitBeingCompleted = rootEnv.unitBeingCompleted; for (CompleteTypeBindingsSteps step : CompleteTypeBindingsSteps.realValues) { - if (step != CompleteTypeBindingsSteps.BUILD_FIELDS_AND_METHODS || buildFieldsAndMethods) + if (step.isRequired(buildFieldsAndMethods, resolveAnnotations)) step.perform((rootEnv.unitBeingCompleted = parsedUnit).scope); } diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Engine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Engine.java index 295c2fa3ce5..405e7ce70fc 100644 --- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Engine.java +++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Engine.java @@ -141,7 +141,7 @@ public void accept(ISourceType[] sourceTypes, PackageBinding packageBinding, Acc if (unit != null) { environment.buildTypeBindings(unit, accessRestriction); - environment.completeTypeBindings(unit, true); + environment.completeTypeBindings(unit, true, false /* no annotations */); } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyResolver.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyResolver.java index a4d1fb8a206..ad8504b40f6 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyResolver.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyResolver.java @@ -201,7 +201,7 @@ public void accept(ISourceType[] sourceTypes, PackageBinding packageBinding, Acc org.eclipse.jdt.core.ICompilationUnit cu = ((SourceTypeElementInfo)sourceType).getHandle().getCompilationUnit(); rememberAllTypes(unit, cu, false); - environment.completeTypeBindings(unit, true/*build constructor only*/); + environment.completeTypeBindings(unit, true/*build constructor only*/, false /*no annotations*/); } catch (AbortCompilation e) { // missing 'java.lang' package: ignore }