From 0a671b945ec5f5aa97cfea4cd1e5287f82a6cbe6 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 4 May 2004 02:31:53 +0000 Subject: [PATCH] Make F3 work for parameters. --- .../parser/ast/IASTParameterDeclaration.java | 7 ++++++- .../internal/core/parser/SelectionParser.java | 20 +++++++++++++++---- .../ast/complete/ASTParameterDeclaration.java | 8 ++++++++ .../ast/quick/ASTParameterDeclaration.java | 8 ++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTParameterDeclaration.java index d91690303d4..f3197aa637f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTParameterDeclaration.java @@ -16,5 +16,10 @@ package org.eclipse.cdt.core.parser.ast; */ public interface IASTParameterDeclaration extends IASTAbstractDeclaration, IASTOffsetableNamedElement { - public IASTInitializerClause getDefaultValue(); + public IASTInitializerClause getDefaultValue(); + + /** + * @return + */ + public IASTFunction getOwnerFunctionDeclaration() throws ASTNotImplementedException; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java index d96fb9a9e81..208a259fda4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java @@ -27,8 +27,10 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTExpression; +import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; +import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.extension.IParserExtension; import org.eclipse.cdt.internal.core.parser.token.OffsetDuple; @@ -158,11 +160,19 @@ public class SelectionParser extends ContextualParser { IASTNode node = lookupNode(finalDuple); if( node == null ) return null; if( !(node instanceof IASTOffsetableNamedElement )) return null; - int indexValue = -1; - Object index = nodeTable.get( node ); - if( index instanceof Integer ) - indexValue = ((Integer)index).intValue(); + Integer lookupResult = ((Integer)nodeTable.get(node)); + int indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1; + if( indexValue == -1 && node instanceof IASTParameterDeclaration ) + { + try { + IASTFunction f = ((IASTParameterDeclaration)node).getOwnerFunctionDeclaration(); + lookupResult = ((Integer)nodeTable.get(f)); + indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1; + } catch (ASTNotImplementedException e) { + } + + } return new SelectionParseResult( (IASTOffsetableNamedElement) node, getFilenameForIndex(indexValue) ); } @@ -253,6 +263,7 @@ public class SelectionParser extends ContextualParser { else { contextNode = declaration; + handleOffsetableNamedElement((IASTOffsetableNamedElement) declaration); throw new EndOfFileException(); } } @@ -316,6 +327,7 @@ public class SelectionParser extends ContextualParser { else { contextNode = enumerator; + handleOffsetableNamedElement(enumerator); throw new EndOfFileException(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java index 37d9eedf220..eb3eb8d661e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java @@ -14,8 +14,10 @@ import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; +import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.ASTPointerOperator; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; @@ -219,4 +221,10 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD public int getNameLineNumber() { return offsets.getNameLineNumber(); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getOwnerFunctionDeclaration() + */ + public IASTFunction getOwnerFunctionDeclaration() throws ASTNotImplementedException { + return (IASTFunction) getSymbol().getContainingSymbol().getASTExtension().getPrimaryDeclaration(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java index 9b7a59ef47f..12e37af00d7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java @@ -12,7 +12,9 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import java.util.List; +import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.ASTPointerOperator; +import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; @@ -138,4 +140,10 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I public int getNameLineNumber() { return offsets.getNameLineNumber(); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getOwnerFunctionDeclaration() + */ + public IASTFunction getOwnerFunctionDeclaration() throws ASTNotImplementedException { + throw new ASTNotImplementedException(); + } }