From 9494a0f14e83162a2cbd3ec842efed5b1c680ff6 Mon Sep 17 00:00:00 2001 From: Hoda Amer Date: Mon, 12 Apr 2004 21:10:29 +0000 Subject: [PATCH] Fix for bug#57692 --- core/org.eclipse.cdt.ui.tests/ChangeLog | 3 + .../eclipse/cdt/ui/tests/AutomatedSuite.java | 43 +++++- ...pletionTest_ScopedReference_NoPrefix.java} | 13 +- ...ompletionTest_ScopedReference_Prefix.java} | 8 +- core/org.eclipse.cdt.ui/ChangeLog | 3 + .../text/contentassist/CompletionEngine.java | 133 +++++++----------- .../text/contentassist/ResultCollector.java | 4 +- 7 files changed, 110 insertions(+), 97 deletions(-) rename core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/{failedtests/CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.java => CompletionTest_ScopedReference_NoPrefix.java} (84%) rename core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/{CompletionTest_ScopedReference_Prefix_Bug50152.java => CompletionTest_ScopedReference_Prefix.java} (92%) diff --git a/core/org.eclipse.cdt.ui.tests/ChangeLog b/core/org.eclipse.cdt.ui.tests/ChangeLog index 8c0b9c6dbf6..930940de9e7 100644 --- a/core/org.eclipse.cdt.ui.tests/ChangeLog +++ b/core/org.eclipse.cdt.ui.tests/ChangeLog @@ -1,3 +1,6 @@ +2004-04-12 Hoda Amer + Updated CompletionFailedTest_ScopedReference_NoPrefix_Bug50152, renamed it to CompletionTest_ScopedReference_NoPrefix and moved it out of the failed tests folder. + 2004-04-07 John Camelon Updated CompletionFailedTest_ConstructorReference_Bug50808, renamed it to CompletionTest_ConstructorReference and moved it out of the failed tests folder. Updated CompletionFailedTest_TypeDef_Bug52948, renamed it to CompletionTest_TypeDef_Prefix and moved it out of the failed tests folder. diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index bb4716d8538..df716b475e2 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -8,9 +8,42 @@ package org.eclipse.cdt.ui.tests; import junit.framework.Test; import junit.framework.TestSuite; -import org.eclipse.cdt.ui.tests.text.PartitionTokenScannerTest; -import org.eclipse.cdt.ui.tests.text.contentassist.*; -import org.eclipse.cdt.ui.tests.text.contentassist.failedtests.*; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ArgumentType_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ArgumentType_NoPrefix2; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ArgumentType_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ClassReference_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ClassReference_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ConstructorReference; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ExceptionReference_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ExceptionReference_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_FieldType_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_FieldType_NoPrefix2; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_FieldType_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_FunctionReference_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_FunctionReference_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MacroRef_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MacroRef_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MemberReference_Arrow_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MemberReference_Arrow_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MemberReference_Arrow_Prefix2; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MemberReference_Dot_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_MemberReference_Dot_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_NamespaceRef_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_NamespaceRef_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_NewTypeReference_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_NewTypeReference_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ScopedReference_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_ScopedReference_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_SingleName_Method_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_SingleName_Method_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_SingleName_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_SingleName_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_SingleName_Prefix2; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_TypeDef_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_TypeRef_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_TypeRef_Prefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_VariableType_NoPrefix; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionTest_VariableType_Prefix; import org.eclipse.cdt.ui.tests.textmanipulation.TextBufferTest; @@ -69,8 +102,8 @@ public class AutomatedSuite extends TestSuite { addTest(CompletionTest_FunctionReference_Prefix.suite()); // Failed Tests - addTest(CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.suite()); - addTest(CompletionTest_ScopedReference_Prefix_Bug50152.suite()); + addTest(CompletionTest_ScopedReference_NoPrefix.suite()); + addTest(CompletionTest_ScopedReference_Prefix.suite()); addTest(CompletionTest_MacroRef_NoPrefix.suite()); addTest(CompletionTest_MacroRef_Prefix.suite()); addTest(CompletionTest_FunctionReference_NoPrefix.suite()); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_NoPrefix.java similarity index 84% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_NoPrefix.java index 89b14aadc4c..e79b963bf22 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_NoPrefix.java @@ -8,12 +8,11 @@ * Contributors: * IBM Rational Software - Initial API and implementation ***********************************************************************/ -package org.eclipse.cdt.ui.tests.text.contentassist.failedtests; +package org.eclipse.cdt.ui.tests.text.contentassist; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind; -import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest; /** * @author hamer @@ -22,7 +21,7 @@ import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest; * Bug#50152: Wrong context sent after a "::" * */ -public class CompletionFailedTest_ScopedReference_NoPrefix_Bug50152 extends CompletionProposalsBaseTest{ +public class CompletionTest_ScopedReference_NoPrefix extends CompletionProposalsBaseTest{ private final String fileName = "CompletionTestStart30.cpp"; private final String fileFullPath ="resources/contentassist/" + fileName; @@ -33,16 +32,16 @@ public class CompletionFailedTest_ScopedReference_NoPrefix_Bug50152 extends Com private final CompletionKind expectedKind = CompletionKind.SINGLE_NAME_REFERENCE; private final String expectedPrefix = ""; private final String[] expectedResults = { - // "aNamespaceFunction() void" /* Hoda uncomment this to see the failure */ + "aNamespaceFunction() void" }; - public CompletionFailedTest_ScopedReference_NoPrefix_Bug50152(String name) { + public CompletionTest_ScopedReference_NoPrefix(String name) { super(name); } public static Test suite() { - TestSuite suite= new TestSuite(CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.class.getName()); - suite.addTest(new CompletionFailedTest_ScopedReference_NoPrefix_Bug50152("testCompletionProposals")); + TestSuite suite= new TestSuite(CompletionTest_ScopedReference_NoPrefix.class.getName()); + suite.addTest(new CompletionTest_ScopedReference_NoPrefix("testCompletionProposals")); return suite; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix_Bug50152.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix.java similarity index 92% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix_Bug50152.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix.java index c9b250aef99..3702ae6309d 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix_Bug50152.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ScopedReference_Prefix.java @@ -21,7 +21,7 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind; * Bug#50152: Wrong context sent after a "::" * */ -public class CompletionTest_ScopedReference_Prefix_Bug50152 extends CompletionProposalsBaseTest{ +public class CompletionTest_ScopedReference_Prefix extends CompletionProposalsBaseTest{ private final String fileName = "CompletionTestStart31.cpp"; private final String fileFullPath ="resources/contentassist/" + fileName; @@ -35,13 +35,13 @@ public class CompletionTest_ScopedReference_Prefix_Bug50152 extends CompletionP "aNamespaceFunction() void" }; - public CompletionTest_ScopedReference_Prefix_Bug50152(String name) { + public CompletionTest_ScopedReference_Prefix(String name) { super(name); } public static Test suite() { - TestSuite suite= new TestSuite(CompletionTest_ScopedReference_Prefix_Bug50152.class.getName()); - suite.addTest(new CompletionTest_ScopedReference_Prefix_Bug50152("testCompletionProposals")); + TestSuite suite= new TestSuite(CompletionTest_ScopedReference_Prefix.class.getName()); + suite.addTest(new CompletionTest_ScopedReference_Prefix("testCompletionProposals")); return suite; } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index c6ecec5119f..af70a530594 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2004-04-12 Hoda Amer + Fix for bug#57692 : [Content Assist] CompletionEngine::completionOnSingleNameReference() behaviour incorrect + 2004-04-12 Alain Magloire This patch changes the default filter so an empty string does not show any matches. The reason for this is to speed up performance when a lot diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java index 64c35621e05..1d4c1588edc 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java @@ -83,21 +83,7 @@ public class CompletionEngine implements RelevanceConstants { private ContentAssistElementRequestor elementRequestor = null; private static final String exceptionKeyword = "..."; //$NON-NLS-1$ -/* - // scope relevance element counters - private int numFields = 0; - private int numVariables = 0; - private int numLocalVariables = 0; - private int numMethods = 0; - private int numFunctions = 0; - private int numClasses = 0; - private int numStructs = 0; - private int numUnions = 0; - private int numEnumerations = 0; - private int numEnumerators = 0; - private int numNamespaces = 0; - private int numTypedefs = 0; -*/ + public CompletionEngine(ICompletionRequestor completionRequestor){ requestor = completionRequestor; elementRequestor = new ContentAssistElementRequestor(); @@ -217,22 +203,20 @@ public class CompletionEngine implements RelevanceConstants { } } - private void addNodeToCompletions(IASTNode node, String prefix, int totalNumberOfResults){ + private void addNodeToCompletions(IASTNode node, String prefix, int totalNumberOfResults, boolean addStaticMembersOnly){ if(node instanceof IASTField){ -// numFields++; IASTField field = (IASTField)node; + if(addStaticMembersOnly && (!field.isStatic())) + return; int relevance = computeRelevance(ICElement.C_FIELD, prefix, field.getName()); - //relevance += totalNumberOfResults - numFields; requestor.acceptField(field.getName(), ASTUtil.getType(field.getAbstractDeclaration()), field.getVisiblity(), completionStart, completionLength, relevance); } else if (node instanceof IASTParameterDeclaration){ -// numLocalVariables++; IASTParameterDeclaration param = (IASTParameterDeclaration) node; int relevance = computeRelevance(ICElement.C_VARIABLE_LOCAL, prefix, param.getName()); - //relevance += totalNumberOfResults - numLocalVariables; requestor.acceptLocalVariable(param.getName(), ASTUtil.getType(param), @@ -243,17 +227,18 @@ public class CompletionEngine implements RelevanceConstants { // get the container to check if it is a local variable IASTNode container = variable.getOwnerScope(); if(container instanceof IASTCodeScope){ -// numLocalVariables++; + // local variable int relevance = computeRelevance(ICElement.C_VARIABLE_LOCAL, prefix, variable.getName()); - //relevance += totalNumberOfResults - numLocalVariables; requestor.acceptLocalVariable(variable.getName(), ASTUtil.getType(variable.getAbstractDeclaration()), completionStart, completionLength, relevance); }else { -// numVariables++; + // global variable + if(addStaticMembersOnly && (!variable.isStatic())) + return; + int relevance = computeRelevance(ICElement.C_VARIABLE, prefix, variable.getName()); - //relevance += totalNumberOfResults - numVariables; requestor.acceptVariable(variable.getName(), ASTUtil.getType(variable.getAbstractDeclaration()), @@ -261,10 +246,11 @@ public class CompletionEngine implements RelevanceConstants { } } else if(node instanceof IASTMethod) { -// numMethods++; IASTMethod method = (IASTMethod)node; + if(addStaticMembersOnly && (!method.isStatic())) + return; + int relevance = computeRelevance(ICElement.C_METHOD, prefix, method.getName()); - //relevance += totalNumberOfResults - numMethods; String parameterString = ASTUtil.getParametersString(ASTUtil.getFunctionParameterTypes(method)); requestor.acceptMethod(method.getName(), @@ -273,10 +259,11 @@ public class CompletionEngine implements RelevanceConstants { method.getVisiblity(), completionStart, completionLength, relevance); } else if(node instanceof IASTFunction){ -// numFunctions++; IASTFunction function = (IASTFunction)node; + if(addStaticMembersOnly && (!function.isStatic())) + return; + int relevance = computeRelevance(ICElement.C_FUNCTION, prefix, function.getName()); - //relevance += totalNumberOfResults - numFunctions; String parameterString = ASTUtil.getParametersString(ASTUtil.getFunctionParameterTypes(function)); requestor.acceptFunction(function.getName(), @@ -288,59 +275,45 @@ public class CompletionEngine implements RelevanceConstants { IASTClassSpecifier classSpecifier = (IASTClassSpecifier)node; ASTClassKind classkind = classSpecifier.getClassKind(); if(classkind == ASTClassKind.CLASS){ -// numClasses++; int relevance = computeRelevance(ICElement.C_CLASS, prefix, classSpecifier.getName()); - //relevance += totalNumberOfResults - numClasses; requestor.acceptClass(classSpecifier.getName(), completionStart, completionLength, relevance); } if(classkind == ASTClassKind.STRUCT){ -// numStructs++; int relevance = computeRelevance(ICElement.C_STRUCT, prefix, classSpecifier.getName()); - //relevance += totalNumberOfResults - numStructs; requestor.acceptStruct(classSpecifier.getName(), completionStart, completionLength, relevance); } if(classkind == ASTClassKind.UNION){ -// numUnions++; int relevance = computeRelevance(ICElement.C_UNION, prefix, classSpecifier.getName()); - //relevance += totalNumberOfResults - numUnions; requestor.acceptUnion(classSpecifier.getName(), completionStart, completionLength, relevance); } } else if(node instanceof IASTNamespaceDefinition){ -// numNamespaces++; IASTNamespaceDefinition namespace = (IASTNamespaceDefinition)node; int relevance = computeRelevance(ICElement.C_NAMESPACE, prefix, namespace.getName()); - //relevance += totalNumberOfResults - numNamespaces; requestor.acceptNamespace(namespace.getName(), completionStart, completionLength, relevance); } else if(node instanceof IASTEnumerationSpecifier){ -// numEnumerations++; IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier)node; int relevance = computeRelevance(ICElement.C_ENUMERATION, prefix, enumeration.getName()); - //relevance += totalNumberOfResults - numEnumerations; requestor.acceptEnumeration(enumeration.getName(), completionStart, completionLength, relevance); } else if(node instanceof IASTEnumerator){ -// numEnumerators++; IASTEnumerator enumerator = (IASTEnumerator)node; int relevance = computeRelevance(ICElement.C_ENUMERATOR, prefix, enumerator.getName()); - //relevance += totalNumberOfResults - numEnumerators; requestor.acceptEnumerator(enumerator.getName(), completionStart, completionLength, relevance); } else if(node instanceof IASTTypedefDeclaration){ -// numTypedefs++; IASTTypedefDeclaration typedef = (IASTTypedefDeclaration)node; int relevance = computeRelevance(ICElement.C_TYPEDEF, prefix, typedef.getName()); - //relevance += totalNumberOfResults - numTypedefs; requestor.acceptTypedef(typedef.getName(), completionStart, completionLength, relevance); } @@ -375,24 +348,12 @@ public class CompletionEngine implements RelevanceConstants { } log("No of Macros = " + numOfMacros); //$NON-NLS-1$ } - -/* - private void resetElementNumbers(){ - numFields = 0; - numVariables = 0; - numLocalVariables = 0; - numMethods = 0; - numFunctions = 0; - numClasses = 0; - numStructs = 0; - numUnions = 0; - numEnumerations = 0; - numEnumerators = 0; - numNamespaces = 0; - numTypedefs = 0; - } -*/ + private void addToCompletions (ILookupResult result){ + addToCompletions(result, false); + } + + private void addToCompletions (ILookupResult result, boolean addStaticMembersOnly){ if(result == null){ log("Lookup Results = null ................. !!! No Lookup Results found !!! "); //$NON-NLS-1$ return; @@ -402,10 +363,9 @@ public class CompletionEngine implements RelevanceConstants { log("No of Lookup Results = " + numberOfElements); //$NON-NLS-1$ -// resetElementNumbers(); while (nodes.hasNext()){ IASTNode node = (IASTNode) nodes.next(); - addNodeToCompletions(node, result.getPrefix(), numberOfElements); + addNodeToCompletions(node, result.getPrefix(), numberOfElements, addStaticMembersOnly); } return ; } @@ -468,22 +428,33 @@ public class CompletionEngine implements RelevanceConstants { addToCompletions (result); } -// private void completionOnScopedReference(IASTCompletionNode completionNode){ -// // 1. Get the search scope node -// // the search node is the name before the qualification -// IASTScope searchNode = completionNode.getCompletionScope(); -// // here we have to look for anything that could be referenced within this scope -// // 1. lookup local variables, global variables, functions, methods, structures, enums, and namespaces -// IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[5]; -// kinds[0] = IASTNode.LookupKind.VARIABLES; -// kinds[1] = IASTNode.LookupKind.STRUCTURES; -// kinds[2] = IASTNode.LookupKind.ENUMERATIONS; -// kinds[3] = IASTNode.LookupKind.NAMESPACES; -// kinds[4] = IASTNode.LookupKind.TYPEDEFS; -// ILookupResult result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, completionNode.getCompletionContext()); -// addToCompletions(result); -// // lookup static members (field / methods) in type -// } + private void completionOnScopedReference(IASTCompletionNode completionNode){ + // 1. Get the search scope node + // the search node is the name before the qualification + IASTScope searchNode = completionNode.getCompletionScope(); + // here we have to look for anything that could be referenced within this scope + // 1. lookup local variables, global variables, functions, methods, structures, enums, and namespaces + IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[8]; + kinds[0] = IASTNode.LookupKind.VARIABLES; + kinds[1] = IASTNode.LookupKind.STRUCTURES; + kinds[2] = IASTNode.LookupKind.ENUMERATIONS; + kinds[3] = IASTNode.LookupKind.NAMESPACES; + kinds[4] = IASTNode.LookupKind.TYPEDEFS; + kinds[5] = IASTNode.LookupKind.FIELDS; + kinds[6] = IASTNode.LookupKind.METHODS; + kinds[7] = IASTNode.LookupKind.FUNCTIONS; + + ILookupResult result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, completionNode.getCompletionContext()); + // lookup static members (field / methods) in types + if( (completionNode.getCompletionContext() != null) + && (completionNode.getCompletionContext() instanceof IASTClassSpecifier) + && (((IASTClassSpecifier) completionNode.getCompletionContext()).getClassKind() != ASTClassKind.ENUM)){ + addToCompletions(result, true); + } else { + addToCompletions(result); + } + } + private void completionOnTypeReference(IASTCompletionNode completionNode){ // completing on a type // 1. Get the search scope node @@ -698,8 +669,12 @@ public class CompletionEngine implements RelevanceConstants { completionOnTypeReference(completionNode); } else if(kind == CompletionKind.SINGLE_NAME_REFERENCE){ - // CompletionOnSingleNameReference - completionOnSingleNameReference(completionNode); + if (completionNode.getCompletionContext() == null){ + // CompletionOnSingleNameReference + completionOnSingleNameReference(completionNode); + }else { + completionOnScopedReference(completionNode); + } } else if(kind == CompletionKind.TYPE_REFERENCE){ // CompletionOnTypeReference diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ResultCollector.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ResultCollector.java index fe07ae362e8..67606d80199 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ResultCollector.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ResultCollector.java @@ -189,7 +189,7 @@ public class ResultCollector extends CompletionRequestorAdaptor { CCompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), arguments, image, completionStart, completionLength, relevance); - boolean userMustCompleteParameters= (parameterString != null && parameterString.length() > 0); + boolean userMustCompleteParameters= (arguments != null && arguments.length() > 0); char[] triggers= userMustCompleteParameters ? METHOD_WITH_ARGUMENTS_TRIGGERS : METHOD_TRIGGERS; proposal.setTriggerCharacters(triggers); @@ -332,7 +332,7 @@ public class ResultCollector extends CompletionRequestorAdaptor { CCompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), arguments, image, completionStart, completionLength, relevance); - boolean userMustCompleteParameters= (parameterString != null && parameterString.length() > 0); + boolean userMustCompleteParameters= (arguments != null && arguments.length() > 0); char[] triggers= userMustCompleteParameters ? METHOD_WITH_ARGUMENTS_TRIGGERS : METHOD_TRIGGERS; proposal.setTriggerCharacters(triggers);