diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 9a42b7ba135..67a62215d51 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2004-04-14 John Camelon + Added CompleteParseASTTest::testBug44249(). + 2004-04-14 John Camelon Added CompletionTest::testBug58178(). diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 2efc3caad43..915f1806b46 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -1487,4 +1487,17 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertTrue( forewardDecl.isFriendDeclaration() ); assertTrue( f.isFriend() ); } + + public void testBug44249() throws Exception + { + + Iterator i = parse( "class SD_01 { public:\n void SD_01::f_SD_01();};" ).getDeclarations(); + IASTClassSpecifier SD_01 = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); + assertFalse( i.hasNext() ); + i = getDeclarations( SD_01 ); + IASTMethod f_SD_01 = (IASTMethod) i.next(); + assertFalse( i.hasNext() ); + assertEquals( f_SD_01.getName(), "f_SD_01"); + assertAllReferences( 1, createTaskList( new Task( SD_01 ))); + } } diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index e4ca58a5472..0040e9403e7 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,7 @@ +2004-04-14 John Camelon + Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=44249 + Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=52004 + 2004-04-14 John Camelon Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=58500 Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=58178 diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index ed2bf0704d4..dcffb80a152 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -2199,14 +2199,25 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isDestructor = false; IContainerSymbol ownerScope = scopeToSymbol( ownerTemplate != null ? (IASTScope) ownerTemplate : scope ); - IParameterizedSymbol symbol = pst.newParameterizedSymbol( nameDuple.toString(), TypeInfo.t_function ); + + IParameterizedSymbol symbol = null; + + if( references == null ) + { + references = new ArrayList(); + if( nameDuple.length() != 1 ) + { + ITokenDuple leadingSegments = nameDuple.getLeadingSegments(); + ISymbol test = lookupQualifiedName( ownerScope, leadingSegments, references, false ); + if( test == ownerScope ) + nameDuple = nameDuple.getLastSegment(); + } + } + symbol = pst.newParameterizedSymbol( nameDuple.toString(), TypeInfo.t_function ); setFunctionTypeInfoBits(isInline, isFriend, isStatic, symbol); setMethodTypeInfoBits( symbol, isConst, isVolatile, isVirtual, isExplicit ); symbol.setHasVariableArgs( hasVariableArguments ); - - if(references == null) - references = new ArrayList(); - + if( returnType.getTypeSpecifier() != null ) setParameter( symbol, returnType, false, references ); setParameters( symbol, references, parameters.iterator() );