Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2005-06-27 18:52:29 +0000
committerAndrew Niefer2005-06-27 18:52:29 +0000
commitd30c9cee802514d5896020e92ac71599c1fee2f7 (patch)
treee211772eddc2fd1bc3b1bce3b38e3e3b67ddf0e0
parent189ad381e05ad6fae8dc68f061f7561fe9bd148c (diff)
downloadorg.eclipse.cdt-d30c9cee802514d5896020e92ac71599c1fee2f7.tar.gz
org.eclipse.cdt-d30c9cee802514d5896020e92ac71599c1fee2f7.tar.xz
org.eclipse.cdt-d30c9cee802514d5896020e92ac71599c1fee2f7.zip
fix bug 100403 qualified names in class member declarations
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java63
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java10
3 files changed, 47 insertions, 29 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index ca708da7e2d..36c54e4001b 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -4779,15 +4779,15 @@ public class AST2CPPTests extends AST2BaseTest {
public void testBug84478_2() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("void f(){ \n");
- buffer.append(" if( int x = 1 ) x++; \n");
- buffer.append(" else x--; \n");
- buffer.append(" while( int y = 2 ) \n");
- buffer.append(" y++; \n");
- buffer.append(" for( int a = 1; int b = 2; b++){ \n");
- buffer.append(" a++; b++; \n");
- buffer.append(" } \n");
- buffer.append("} \n");
+ buffer.append("void f(){ \n"); //$NON-NLS-1$
+ buffer.append(" if( int x = 1 ) x++; \n"); //$NON-NLS-1$
+ buffer.append(" else x--; \n"); //$NON-NLS-1$
+ buffer.append(" while( int y = 2 ) \n"); //$NON-NLS-1$
+ buffer.append(" y++; \n"); //$NON-NLS-1$
+ buffer.append(" for( int a = 1; int b = 2; b++){ \n"); //$NON-NLS-1$
+ buffer.append(" a++; b++; \n"); //$NON-NLS-1$
+ buffer.append(" } \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true );
CPPNameCollector col = new CPPNameCollector();
@@ -4810,10 +4810,10 @@ public class AST2CPPTests extends AST2BaseTest {
public void testBug100415() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("void free( void * ); \n");
- buffer.append("void f( char **p ){ \n");
- buffer.append(" free( p ); \n");
- buffer.append("} \n");
+ buffer.append("void free( void * ); \n"); //$NON-NLS-1$
+ buffer.append("void f( char **p ){ \n"); //$NON-NLS-1$
+ buffer.append(" free( p ); \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true );
CPPNameCollector col = new CPPNameCollector();
@@ -4825,17 +4825,17 @@ public class AST2CPPTests extends AST2BaseTest {
public void testBug86688() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("class X; \n");
- buffer.append("void f() { \n");
- buffer.append(" class A { \n");
- buffer.append(" friend class X; \n");
- buffer.append(" }; \n");
- buffer.append("} \n");
- buffer.append("namespace B { \n");
- buffer.append(" class A { \n");
- buffer.append(" friend class X; \n");
- buffer.append(" }; \n");
- buffer.append("} \n");
+ buffer.append("class X; \n"); //$NON-NLS-1$
+ buffer.append("void f() { \n"); //$NON-NLS-1$
+ buffer.append(" class A { \n"); //$NON-NLS-1$
+ buffer.append(" friend class X; \n"); //$NON-NLS-1$
+ buffer.append(" }; \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+ buffer.append("namespace B { \n"); //$NON-NLS-1$
+ buffer.append(" class A { \n"); //$NON-NLS-1$
+ buffer.append(" friend class X; \n"); //$NON-NLS-1$
+ buffer.append(" }; \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true );
CPPNameCollector col = new CPPNameCollector();
@@ -4846,4 +4846,19 @@ public class AST2CPPTests extends AST2BaseTest {
assertTrue( col.getName(3).resolveBinding() instanceof ICPPClassType );
assertSame( X, col.getName(6).resolveBinding() );
}
+
+ public void testBug100403() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("class m { \n"); //$NON-NLS-1$
+ buffer.append(" int m::f(); \n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+ buffer.append("int m::f(){} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPMethod f = (ICPPMethod) col.getName(3).resolveBinding();
+ assertSame( f, col.getName(6).resolveBinding() );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
index 8b5f8187bea..e7227ba4456 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
@@ -113,7 +113,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
-import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
@@ -175,7 +174,7 @@ public class CPPSemantics {
public boolean includeBlockItem( IASTNode item ){
if( astName.getPropertyInParent() == STRING_LOOKUP_PROPERTY ) return true;
if( ( astName != null && astName.getParent() instanceof IASTIdExpression ) ||
- item instanceof IASTNamespaceDefinition ||
+ item instanceof ICPPASTNamespaceDefinition ||
(item instanceof IASTSimpleDeclaration && ((IASTSimpleDeclaration)item).getDeclSpecifier() instanceof IASTCompositeTypeSpecifier ) ||
item instanceof ICPPASTTemplateDeclaration )
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
index f316b87d5c4..86f37235a40 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
@@ -162,9 +162,13 @@ public class CPPVisitor {
parent instanceof ICPPASTTemplateId )
{
binding = CPPSemantics.resolveBinding( name );
- if( binding instanceof IProblemBinding && parent instanceof ICPPASTQualifiedName &&
- ((IProblemBinding)binding).getID() != IProblemBinding.SEMANTIC_MEMBER_DECLARATION_NOT_FOUND )
+ if( binding instanceof IProblemBinding && parent instanceof ICPPASTQualifiedName )
{
+ if( ((IProblemBinding)binding).getID() == IProblemBinding.SEMANTIC_MEMBER_DECLARATION_NOT_FOUND ){
+ IASTNode node = getContainingBlockItem( name.getParent() );
+ if( node.getPropertyInParent() != IASTCompositeTypeSpecifier.MEMBER_DECLARATION )
+ return binding;
+ }
IASTName [] ns = ((ICPPASTQualifiedName)parent).getNames();
if( ns[ ns.length - 1 ] == name )
parent = parent.getParent();
@@ -881,7 +885,7 @@ public class CPPVisitor {
return p;
} else if ( parent instanceof IASTStatement || parent instanceof IASTTranslationUnit ) {
return parent;
- } else if( parent instanceof IASTFunctionDeclarator ){
+ } else if( parent instanceof IASTFunctionDeclarator && node.getPropertyInParent() == IASTStandardFunctionDeclarator.FUNCTION_PARAMETER ){
return node;
} else if( parent instanceof IASTEnumerationSpecifier.IASTEnumerator ){
return parent;

Back to the top