mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
fix bug 89990
when looking for name matches in a scope, don't consider qualified names because they are really from another scope.
This commit is contained in:
parent
0202a904bd
commit
6e68f25d05
1 changed files with 20 additions and 14 deletions
|
@ -1175,13 +1175,13 @@ public class CPPSemantics {
|
||||||
dtor = dtor.getNestedDeclarator();
|
dtor = dtor.getNestedDeclarator();
|
||||||
IASTName declName = dtor.getName();
|
IASTName declName = dtor.getName();
|
||||||
scope.addName( declName );
|
scope.addName( declName );
|
||||||
if( !data.typesOnly && nameMatches( data, declName.toCharArray() ) ) {
|
if( !data.typesOnly && nameMatches( data, declName ) ) {
|
||||||
return declName;
|
return declName;
|
||||||
}
|
}
|
||||||
} else if( node instanceof ICPPASTTemplateParameter ){
|
} else if( node instanceof ICPPASTTemplateParameter ){
|
||||||
IASTName name = CPPTemplates.getTemplateParameterName( (ICPPASTTemplateParameter) node );
|
IASTName name = CPPTemplates.getTemplateParameterName( (ICPPASTTemplateParameter) node );
|
||||||
scope.addName( name );
|
scope.addName( name );
|
||||||
if( nameMatches( data, name.toCharArray() ) ) {
|
if( nameMatches( data, name ) ) {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1198,7 +1198,7 @@ public class CPPSemantics {
|
||||||
IASTName declaratorName = declarator.getName();
|
IASTName declaratorName = declarator.getName();
|
||||||
scope.addName( declaratorName );
|
scope.addName( declaratorName );
|
||||||
if( !data.typesOnly || simpleDeclaration.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef ) {
|
if( !data.typesOnly || simpleDeclaration.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef ) {
|
||||||
if( nameMatches( data, declaratorName.toCharArray() ) ) {
|
if( nameMatches( data, declaratorName ) ) {
|
||||||
return declaratorName;
|
return declaratorName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1209,20 +1209,20 @@ public class CPPSemantics {
|
||||||
if( declarators.length == 0 && declSpec instanceof IASTElaboratedTypeSpecifier ){
|
if( declarators.length == 0 && declSpec instanceof IASTElaboratedTypeSpecifier ){
|
||||||
IASTName elabName = ((IASTElaboratedTypeSpecifier)declSpec).getName();
|
IASTName elabName = ((IASTElaboratedTypeSpecifier)declSpec).getName();
|
||||||
scope.addName( elabName );
|
scope.addName( elabName );
|
||||||
if( nameMatches( data, elabName.toCharArray() ) ) {
|
if( nameMatches( data, elabName ) ) {
|
||||||
return elabName;
|
return elabName;
|
||||||
}
|
}
|
||||||
} else if( declSpec instanceof ICPPASTCompositeTypeSpecifier ){
|
} else if( declSpec instanceof ICPPASTCompositeTypeSpecifier ){
|
||||||
IASTName compName = ((IASTCompositeTypeSpecifier)declSpec).getName();
|
IASTName compName = ((IASTCompositeTypeSpecifier)declSpec).getName();
|
||||||
scope.addName( compName );
|
scope.addName( compName );
|
||||||
if( nameMatches( data, compName.toCharArray() ) ) {
|
if( nameMatches( data, compName ) ) {
|
||||||
return compName;
|
return compName;
|
||||||
}
|
}
|
||||||
} else if( declSpec instanceof IASTEnumerationSpecifier ){
|
} else if( declSpec instanceof IASTEnumerationSpecifier ){
|
||||||
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) declSpec;
|
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) declSpec;
|
||||||
IASTName eName = enumeration.getName();
|
IASTName eName = enumeration.getName();
|
||||||
scope.addName( eName );
|
scope.addName( eName );
|
||||||
if( nameMatches( data, eName.toCharArray() ) ) {
|
if( nameMatches( data, eName ) ) {
|
||||||
return eName;
|
return eName;
|
||||||
}
|
}
|
||||||
//check enumerators too
|
//check enumerators too
|
||||||
|
@ -1232,7 +1232,7 @@ public class CPPSemantics {
|
||||||
if( enumerator == null ) break;
|
if( enumerator == null ) break;
|
||||||
eName = enumerator.getName();
|
eName = enumerator.getName();
|
||||||
scope.addName( eName );
|
scope.addName( eName );
|
||||||
if( !data.typesOnly && nameMatches( data, eName.toCharArray() ) ) {
|
if( !data.typesOnly && nameMatches( data, eName ) ) {
|
||||||
return eName;
|
return eName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1245,18 +1245,18 @@ public class CPPSemantics {
|
||||||
name = ns[ ns.length - 1 ];
|
name = ns[ ns.length - 1 ];
|
||||||
}
|
}
|
||||||
scope.addName( name );
|
scope.addName( name );
|
||||||
if( nameMatches( data, name.toCharArray() ) ) {
|
if( nameMatches( data, name ) ) {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
} else if( declaration instanceof ICPPASTNamespaceDefinition ){
|
} else if( declaration instanceof ICPPASTNamespaceDefinition ){
|
||||||
IASTName namespaceName = ((ICPPASTNamespaceDefinition) declaration).getName();
|
IASTName namespaceName = ((ICPPASTNamespaceDefinition) declaration).getName();
|
||||||
scope.addName( namespaceName );
|
scope.addName( namespaceName );
|
||||||
if( nameMatches( data, namespaceName.toCharArray() ) )
|
if( nameMatches( data, namespaceName ) )
|
||||||
return namespaceName;
|
return namespaceName;
|
||||||
} else if( declaration instanceof ICPPASTNamespaceAlias ){
|
} else if( declaration instanceof ICPPASTNamespaceAlias ){
|
||||||
IASTName alias = ((ICPPASTNamespaceAlias) declaration).getAlias();
|
IASTName alias = ((ICPPASTNamespaceAlias) declaration).getAlias();
|
||||||
scope.addName( alias );
|
scope.addName( alias );
|
||||||
if( nameMatches( data, alias.toCharArray() ) )
|
if( nameMatches( data, alias ) )
|
||||||
return alias;
|
return alias;
|
||||||
} else
|
} else
|
||||||
|
|
||||||
|
@ -1268,7 +1268,7 @@ public class CPPSemantics {
|
||||||
IASTName declName = declarator.getName();
|
IASTName declName = declarator.getName();
|
||||||
scope.addName( declName );
|
scope.addName( declName );
|
||||||
|
|
||||||
if( !data.typesOnly && nameMatches( data, declName.toCharArray() ) ) {
|
if( !data.typesOnly && nameMatches( data, declName ) ) {
|
||||||
return declName;
|
return declName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1276,9 +1276,15 @@ public class CPPSemantics {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final boolean nameMatches( LookupData data, char[] potential ){
|
private static final boolean nameMatches( LookupData data, IASTName potential ){
|
||||||
return ( (data.prefixLookup && CharArrayUtils.equals( potential, 0, data.name.length, data.name )) ||
|
if( potential instanceof ICPPASTQualifiedName ){
|
||||||
(!data.prefixLookup && CharArrayUtils.equals( potential, data.name )) );
|
//A qualified name implies the name actually belongs to a different scope, and should
|
||||||
|
//not be considered here.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
char[] c = potential.toCharArray();
|
||||||
|
return ( (data.prefixLookup && CharArrayUtils.equals( c, 0, data.name.length, data.name )) ||
|
||||||
|
(!data.prefixLookup && CharArrayUtils.equals( c, data.name )) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addDefinition( IBinding binding, IASTName name ){
|
private static void addDefinition( IBinding binding, IASTName name ){
|
||||||
|
|
Loading…
Add table
Reference in a new issue