From 001e2c82f082348ad213feecaffb003c3b784900 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Mon, 13 Jul 2015 00:23:48 -0400 Subject: [PATCH] Bug 421823 - Allow consumers other than content assist to perform heuristic base class lookup Change-Id: I8add635bb62a0241b7de9430a32f85499535085d Signed-off-by: Nathan Ridge --- .../core/dom/parser/cpp/semantics/BaseClassLookup.java | 2 +- .../internal/core/dom/parser/cpp/semantics/CPPSemantics.java | 2 ++ .../cdt/internal/core/dom/parser/cpp/semantics/LookupData.java | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) 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;