diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java index e7870df9770..fa81745af61 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java @@ -238,7 +238,7 @@ class BaseClassLookup { } ICPPClassType grandBaseClass = (ICPPClassType) grandBaseBinding; - if (data.contentAssist && grandBaseClass instanceof ICPPDeferredClassInstance) { + if (data.fHeuristicBaseLookup && grandBaseClass instanceof ICPPDeferredClassInstance) { // Support content assist for members of deferred instances. grandBaseClass= ((ICPPDeferredClassInstance) grandBaseClass).getClassTemplate(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index e777ba1c0aa..3c9a481d66d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -1151,6 +1151,7 @@ public class CPPSemantics { ld2.setIgnorePointOfDeclaration(data.isIgnorePointOfDeclaration()); ld2.contentAssist= data.contentAssist; ld2.fNoNarrowing= data.fNoNarrowing; + ld2.fHeuristicBaseLookup= data.fHeuristicBaseLookup; ld2.qualified= parent instanceof ICPPASTQualifiedName; ld2.typesOnly= true; lookup(ld2, getLookupScope(typeDtorName)); @@ -3787,6 +3788,7 @@ public class CPPSemantics { String[] additionalNamespaces) { LookupData data = createLookupData(name); data.contentAssist = true; + data.fHeuristicBaseLookup = true; data.setPrefixLookup(prefixLookup); data.foundItems = new CharArrayObjectMap<>(2); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java index 51426f5eb33..b1649124a3a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java @@ -103,6 +103,9 @@ public class LookupData extends ScopeLookupData { public boolean argsContainImpliedObject; /** In list-initialization **/ public boolean fNoNarrowing; + /** When doing lookup in base classes, replace deferred class instances with their class template. + * This is used by editor actions like content assist. */ + public boolean fHeuristicBaseLookup; private IASTDeclarator fDeclarator; private boolean fFunctionCall;