diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java index 22e83df55b7..d3a9cbaf202 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java @@ -59,7 +59,7 @@ public interface IASTCompletionNode { public static final CompletionKind PREPROCESSOR_DIRECTIVE = new CompletionKind( 13 ); // any place where a type or variable name is expected to be introduced - public static final CompletionKind USER_SPECIFIED_NAME = new CompletionKind( 14 ); + public static final CompletionKind NESTED_NAME_REFERENCE = new CompletionKind( 14 ); // any place where function parameters are expected public static final CompletionKind FUNCTION_REFERENCE = new CompletionKind( 15 ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java index 5cf3acf24f4..75b5c4d56bb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java @@ -806,4 +806,10 @@ public class DeclarationWrapper implements IDeclaratorOwner { return extensionParameters; } + /** + * @return + */ + public boolean consumedRawType() { + return( getSimpleType() != IASTSimpleTypeSpecifier.Type.UNSPECIFIED ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 9e07cd6c4fa..5bc687fddff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -1669,11 +1669,11 @@ public abstract class Parser extends ExpressionParser implements IParser if (lookAheadForDeclarator(flags)) { setTypeName(sdw, typeNameBegin, typeNameEnd); - return; } - setCompletionValues(sdw.getScope(), kind, key ); - ITokenDuple d = name(sdw.getScope(), kind, key ); + IASTCompletionNode.CompletionKind ourKind = determineDeclSpecCompletionKind(sdw, kind); + setCompletionValues(sdw.getScope(), ourKind, key ); + ITokenDuple d = name(sdw.getScope(), ourKind, key ); sdw.setTypeName(d); sdw.setSimpleType( IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME ); flags.setEncounteredTypename(true); @@ -1728,6 +1728,19 @@ public abstract class Parser extends ExpressionParser implements IParser return; } /** + * @param sdw + * @param kind + * @return + */ + protected CompletionKind determineDeclSpecCompletionKind(DeclarationWrapper sdw, CompletionKind kind) { + if( kind == CompletionKind.ARGUMENT_TYPE ) return kind; + if( sdw.getScope() instanceof IASTCompilationUnit || sdw.getScope() instanceof IASTNamespaceDefinition ) + return sdw.consumedRawType() ? CompletionKind.NESTED_NAME_REFERENCE: kind; + return kind; + } + + + /** * @param sdw * @param typeNameBegin * @param typeNameEnd 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 402d5ea0977..72ce8430a5c 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 @@ -885,8 +885,8 @@ public class CompletionEngine implements RelevanceConstants { kindStr = "NEW_TYPE_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.PREPROCESSOR_DIRECTIVE) kindStr = "PREPROCESSOR_DIRECTIVE"; //$NON-NLS-1$ - else if(kind == IASTCompletionNode.CompletionKind.USER_SPECIFIED_NAME) - kindStr = "USER_SPECIFIED_NAME"; //$NON-NLS-1$ + else if(kind == IASTCompletionNode.CompletionKind.NESTED_NAME_REFERENCE) + kindStr = "NESTED_NAME_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.STRUCT_REFERENCE) kindStr = "STRUCT_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.UNION_REFERENCE)