diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java index 9be6ede2eb4..15dd1dd7f6f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java @@ -13,6 +13,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IName; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.EScopeKind; @@ -168,8 +169,20 @@ public class CPPUnknownScope implements ICPPScope, ICPPInternalUnknownScope { } public IBinding[] getBindings(IASTName name, boolean resolve, boolean prefixLookup, IIndexFileSet acceptLocalBindings, boolean checkPointOfDecl) { - if (prefixLookup) + if (prefixLookup) { + if (binding instanceof ICPPDeferredClassInstance) { + try { + ICPPDeferredClassInstance instance = (ICPPDeferredClassInstance) binding; + IScope scope = instance.getClassTemplate().getCompositeScope(); + if (scope != null) { + return scope.getBindings(name, resolve, prefixLookup, acceptLocalBindings); + } + } catch (DOMException exc) { + CCorePlugin.log(exc); + } + } return IBinding.EMPTY_BINDING_ARRAY; + } return new IBinding[] {getBinding(name, resolve, acceptLocalBindings)}; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index a34d19654b6..6fb5236df48 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -1199,4 +1199,20 @@ public class CompletionTests extends AbstractContentAssistTest { assertCompletionResults(fCursorOffset, expected, COMPARE_DISP_STRINGS); } + //template + //class Queue { + // TClass* myQueue; + //public: + // Queue() { + // myQueue = new TClass; + // } + // bool isEmtpy() { + // return myQueue->a/*cursor*/ + // } + //}; + public void testContentAssistInDeferredClassInstance_Bug194592() throws Exception { + final String[] expected= {"add()"}; + assertCompletionResults(fCursorOffset, expected, COMPARE_REP_STRINGS); + } + } \ No newline at end of file