diff options
author | Anton Leherbauer | 2007-02-19 15:27:38 +0000 |
---|---|---|
committer | Anton Leherbauer | 2007-02-19 15:27:38 +0000 |
commit | c9ea66eaaf4419b8a8f25072a48fab7cb44ce7c2 (patch) | |
tree | ff3dc9bec6d5beee8504d7633675d88ba8a63979 | |
parent | b81075824d01b982d025f1edf6722c9e2ca04cba (diff) | |
download | org.eclipse.cdt-c9ea66eaaf4419b8a8f25072a48fab7cb44ce7c2.tar.gz org.eclipse.cdt-c9ea66eaaf4419b8a8f25072a48fab7cb44ce7c2.tar.xz org.eclipse.cdt-c9ea66eaaf4419b8a8f25072a48fab7cb44ce7c2.zip |
Follow-up fix for bug 72824 - Missing proposals in method definition context
3 files changed, 23 insertions, 9 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java index 5528c43d242..4422d06f97c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java @@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTCompletionContext; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNameOwner; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IField; @@ -28,6 +29,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; @@ -330,6 +332,7 @@ public class CPPASTQualifiedName extends CPPASTNode implements } try { + final boolean isDeclaration = getParent().getParent() instanceof IASTSimpleDeclaration; IBinding[] bindings = classType.getCompositeScope().find(new String(name), isPrefix); for (int i = 0; i < bindings.length; i++) { if (bindings[i] instanceof ICPPMember) { @@ -342,8 +345,11 @@ public class CPPASTQualifiedName extends CPPASTNode implements } else if (member instanceof ICPPMethod) { ICPPMethod method = (ICPPMethod) member; if (method.isImplicit()) continue; + if (method.isDestructor() || method instanceof ICPPConstructor) { + if (!isDeclaration) continue; + } else if (!method.isStatic() && !isDeclaration) continue; } - } else if (!(bindings[i] instanceof IEnumerator)) continue; + } else if (!(bindings[i] instanceof IEnumerator) || isDeclaration) continue; filtered.add(bindings[i]); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java index 2caf32c34e6..43dbccbdef0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java @@ -317,16 +317,12 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope { } IBinding[] results = null; - + results = (IBinding[]) ArrayUtil.addAll( IBinding.class, results, super.find( name, prefixLookup )); + if((prefixLookup && CharArrayUtils.equals(compName.toCharArray(), 0, n.length, n, false)) || (!prefixLookup && CharArrayUtils.equals(compName.toCharArray(), n))) { - results = (IBinding[]) ArrayUtil.addAll( IBinding.class, null, getConstructors( bindings, true ) ); - if (!prefixLookup) { - return results; - } + results = (IBinding[]) ArrayUtil.addAll( IBinding.class, results, getConstructors( bindings, true ) ); } - - results = (IBinding[]) ArrayUtil.addAll( IBinding.class, results, super.find( name, prefixLookup )); return results != null ? results : IBinding.EMPTY_BINDING_ARRAY; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java index c7e87dd0862..c7bd81db73b 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java @@ -199,6 +199,7 @@ public class ContentAssistTests extends BaseUITestCase { writer.write( "public : \n"); //$NON-NLS-1$ writer.write( " enum _Ability { IDIOT, NORMAL, CHEAT } ; \n"); //$NON-NLS-1$ writer.write( " Strategy( _Ability a ) { } \n"); //$NON-NLS-1$ + writer.write( " _Ability getAbility(); \n"); //$NON-NLS-1$ writer.write( "}; \n"); //$NON-NLS-1$ writer.write( "int main(){ \n"); //$NON-NLS-1$ @@ -220,7 +221,18 @@ public class ContentAssistTests extends BaseUITestCase { assertEquals( "CHEAT", results[0].getDisplayString() ); //$NON-NLS-1$ assertEquals( "IDIOT", results[1].getDisplayString() ); //$NON-NLS-1$ assertEquals( "NORMAL", results[2].getDisplayString() ); //$NON-NLS-1$ - } + + // in a method definition context, constructors and methods should be proposed + + c2 = code + "return 0;}\nStrategy::\n"; //$NON-NLS-1$ + + cu = importFile( "strategy.cpp", c2 ); //$NON-NLS-1$ + + results = getResults( cu, c2.indexOf( "::" ) + 2 ); //$NON-NLS-1$ + assertEquals( 2, results.length ); + assertEquals( "getAbility(void) enum _Ability", results[0].getDisplayString() ); //$NON-NLS-1$ + assertEquals( "Strategy(enum _Ability a)", results[1].getDisplayString() ); //$NON-NLS-1$ +} public void testBug72559() throws Exception { StringWriter writer = new StringWriter(); |