Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAndrew Niefer2004-09-24 20:42:16 +0000
committerAndrew Niefer2004-09-24 20:42:16 +0000
commit1943c247b240afd39904953375100b895c3cf0ee (patch)
tree8371e9bbdcbed5fce832d3e4fcc12a2974c80fd6 /core
parent59a54c9689d38f10685ea2c9c19cf19b62ed2afc (diff)
downloadorg.eclipse.cdt-1943c247b240afd39904953375100b895c3cf0ee.tar.gz
org.eclipse.cdt-1943c247b240afd39904953375100b895c3cf0ee.tar.xz
org.eclipse.cdt-1943c247b240afd39904953375100b895c3cf0ee.zip
fix bug 72713: [Open Declaration] F3 on a method definition goes nowhere
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java13
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java13
2 files changed, 24 insertions, 2 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java
index da0bdb3c777..46fd7efafe7 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java
@@ -439,5 +439,18 @@ public class SelectionParseTest extends SelectionParseBaseTest {
assertTrue( node instanceof IASTFunction );
assertEquals( ((IASTFunction)node).getName(), "f_SD" ); //$NON-NLS-1$
}
+
+ public void testBug72713() throws Exception{
+ Writer writer = new StringWriter();
+ writer.write( "class Deck{ void initialize(); }; \n"); //$NON-NLS-1$
+ writer.write( "void Deck::initialize(){} \n"); //$NON-NLS-1$
+
+ String code = writer.toString();
+ int startIndex = code.indexOf( ":initialize" ); //$NON-NLS-1$
+ IASTNode node = parse( code, startIndex + 1, startIndex + 11 );
+ assertTrue( node instanceof IASTMethod );
+ assertFalse( ((IASTMethod)node).previouslyDeclared() );
+ assertEquals( ((IASTMethod) node).getNameOffset(), code.indexOf( " initialize();" ) + 1 ); //$NON-NLS-1$
+ }
}
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 72ce1ec6425..9135aa3d501 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
@@ -79,6 +79,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.parser.ast.ASTCompletionNode;
import org.eclipse.cdt.internal.core.parser.ast.complete.CompleteParseASTFactory;
import org.eclipse.cdt.internal.core.parser.problem.IProblemFactory;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner;
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
import org.eclipse.cdt.internal.core.parser.token.OffsetDuple;
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
@@ -6594,8 +6595,16 @@ public class Parser implements IParserData, IParser
if( contextNode instanceof IASTQualifiedNameElement )
{
String [] elementQualifiedName = ((IASTQualifiedNameElement)contextNode).getFullyQualifiedName();
- if( Arrays.equals( elementQualifiedName, finalDuple.toQualifiedName() ) )
- return contextNode;
+ if( Arrays.equals( elementQualifiedName, finalDuple.toQualifiedName() ) ){
+ IASTNode declNode = null;
+ if( contextNode instanceof ISymbolOwner ){
+ ISymbolOwner owner = (ISymbolOwner) contextNode;
+ if( owner.getSymbol() != null && owner.getSymbol().getASTExtension() != null ){
+ declNode = owner.getSymbol().getASTExtension().getPrimaryDeclaration();
+ }
+ }
+ return (declNode != null) ? declNode : contextNode;
+ }
}
try {
if( ourKind == IASTCompletionNode.CompletionKind.NEW_TYPE_REFERENCE )

Back to the top