Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2007-02-19 15:27:38 +0000
committerAnton Leherbauer2007-02-19 15:27:38 +0000
commitc9ea66eaaf4419b8a8f25072a48fab7cb44ce7c2 (patch)
treeff3dc9bec6d5beee8504d7633675d88ba8a63979
parentb81075824d01b982d025f1edf6722c9e2ca04cba (diff)
downloadorg.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
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java10
-rw-r--r--core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java14
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();

Back to the top