From fb0d91369970e9f490157d3d527467c2de98ead7 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Mon, 3 May 2004 19:47:42 +0000 Subject: [PATCH] Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=60791 --- .../cdt/core/parser/ast/IASTEnumerator.java | 2 +- .../cdt/core/parser/ast/IASTFactory.java | 2 +- .../cdt/internal/core/parser/Parser.java | 17 ++++++++++---- .../internal/core/parser/SelectionParser.java | 15 ++++++++++++- .../ast/complete/CompleteParseASTFactory.java | 4 ++-- .../expression/ExpressionParseASTFactory.java | 5 +++-- .../core/parser/ast/quick/ASTEnumerator.java | 3 ++- .../ast/quick/QuickParseASTFactory.java | 3 ++- .../ui/search/actions/FindAction.java | 22 ++++++++----------- 9 files changed, 47 insertions(+), 26 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java index 2aa6f8744a4..34662ef1cff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java @@ -16,7 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate; * @author jcamelon * */ -public interface IASTEnumerator extends IASTOffsetableNamedElement, ISourceElementCallbackDelegate { +public interface IASTEnumerator extends IASTOffsetableNamedElement, IASTNode, ISourceElementCallbackDelegate { public IASTEnumerationSpecifier getOwnerEnumerationSpecifier(); public IASTExpression getInitialValue(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java index 839af708357..6fd4b2effd7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java @@ -107,7 +107,7 @@ public interface IASTFactory String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException; - public void addEnumerator( + public IASTEnumerator addEnumerator( IASTEnumerationSpecifier enumeration, String string, int startingOffset, 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 736c70d89c7..20511010c0c 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 @@ -36,6 +36,7 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTDesignator; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; @@ -2449,13 +2450,14 @@ public abstract class Parser extends ExpressionParser implements IParser { try { - astFactory.addEnumerator( + IASTEnumerator enumerator = astFactory.addEnumerator( enumeration, enumeratorIdentifier.getImage(), enumeratorIdentifier.getOffset(), enumeratorIdentifier.getLineNumber(), enumeratorIdentifier.getOffset(), enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getLineNumber(), lastToken.getEndOffset(), lastToken.getLineNumber(), initialValue); + endEnumerator(enumerator); } catch (ASTSemanticException e1) { @@ -2474,12 +2476,13 @@ public abstract class Parser extends ExpressionParser implements IParser } try { - astFactory.addEnumerator( + IASTEnumerator enumerator = astFactory.addEnumerator( enumeration, enumeratorIdentifier.getImage(), enumeratorIdentifier.getOffset(), enumeratorIdentifier.getLineNumber(), enumeratorIdentifier.getOffset(), enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getLineNumber(), lastToken.getEndOffset(), lastToken.getLineNumber(), initialValue); + endEnumerator(enumerator); } catch (ASTSemanticException e1) { @@ -3134,7 +3137,13 @@ public abstract class Parser extends ExpressionParser implements IParser { cleanupLastToken(); if( declaration instanceof IASTOffsetableNamedElement ) - handleNode( (IASTOffsetableNamedElement) declaration ); + handleOffsetableNamedElement( (IASTOffsetableNamedElement) declaration ); + } + + protected void endEnumerator( IASTEnumerator enumerator ) throws EndOfFileException + { + cleanupLastToken(); + handleOffsetableNamedElement(enumerator); } /** @@ -3155,6 +3164,6 @@ public abstract class Parser extends ExpressionParser implements IParser /** * @param expression */ - protected void handleNode(IASTOffsetableNamedElement node ) { + protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node ) { } } 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 535a3b1b613..d96fb9a9e81 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 @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; 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.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; @@ -274,7 +275,7 @@ public class SelectionParser extends ContextualParser { /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.Parser#handleNode(org.eclipse.cdt.core.parser.ast.IASTNode) */ - protected void handleNode(IASTOffsetableNamedElement node) { + protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) { if( node != null ) nodeTable.put( node, new Integer( getCurrentFileIndex()) ); } @@ -306,4 +307,16 @@ public class SelectionParser extends ContextualParser { } } + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.parser.Parser#endEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerator) + */ + protected void endEnumerator(IASTEnumerator enumerator) throws EndOfFileException { + if( ! tokenDupleCompleted() ) + super.endEnumerator(enumerator); + else + { + contextNode = enumerator; + throw new EndOfFileException(); + } + } } 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 23d63123d02..6e6e2a00969 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 @@ -1006,7 +1006,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int, org.eclipse.cdt.core.parser.ast.IASTExpression) */ - public void addEnumerator( + public IASTEnumerator addEnumerator( IASTEnumerationSpecifier enumeration, String name, int startingOffset, @@ -1029,7 +1029,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ASTEnumerator enumerator = new ASTEnumerator( enumeratorSymbol, enumeration, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); attachSymbolExtension( enumeratorSymbol, enumerator, true ); - + return enumerator; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java index 3e8bcebea1a..77b1ee72e96 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.parser.ast.IASTConstructorMemberInitializer; import org.eclipse.cdt.core.parser.ast.IASTDesignator; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTFactory; @@ -339,7 +340,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac * java.lang.String, int, int, int, int, int, int, int, * org.eclipse.cdt.core.parser.ast.IASTExpression) */ - public void addEnumerator( + public IASTEnumerator addEnumerator( IASTEnumerationSpecifier enumeration, String string, int startingOffset, @@ -351,7 +352,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int endLine, IASTExpression initialValue) throws ASTSemanticException { - // TODO Auto-generated method stub + return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java index 4578eef84a0..bcaa686c8df 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java @@ -16,12 +16,13 @@ import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets; +import org.eclipse.cdt.internal.core.parser.ast.complete.ASTNode; /** * @author jcamelon * */ -public class ASTEnumerator +public class ASTEnumerator extends ASTNode implements IASTEnumerator, IASTOffsetableNamedElement { private final IASTExpression initialValue; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index 7544242ca3b..d47a19a643c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -148,10 +148,11 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int) */ - public void addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) + public IASTEnumerator addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) { IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); + return enumerator; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java index 7928ed266cf..3206fa223fe 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java @@ -15,10 +15,10 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.util.LinkedList; import java.util.List; + import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ICLogConstants; import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfoProvider; @@ -40,6 +40,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; +import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.search.ICSearchConstants; import org.eclipse.cdt.core.search.ICSearchScope; @@ -47,20 +48,16 @@ import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo; import org.eclipse.cdt.core.search.ICSearchConstants.SearchFor; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.search.CSearchMessages; -import org.eclipse.cdt.internal.ui.search.CSearchOperation; import org.eclipse.cdt.internal.ui.search.CSearchQuery; import org.eclipse.cdt.internal.ui.search.CSearchResultCollector; -import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.search.ui.SearchUI; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchSite; @@ -92,7 +89,7 @@ public abstract class FindAction extends Action { } //C or CPP? - ParserLanguage language = CoreModel.getDefault().hasCCNature(currentProject) ? ParserLanguage.CPP : ParserLanguage.C; + ParserLanguage language = CoreModel.hasCCNature(currentProject) ? ParserLanguage.CPP : ParserLanguage.C; IParser parser = null; FileReader reader = null; @@ -153,8 +150,6 @@ public abstract class FindAction extends Action { } public void run(IStructuredSelection sel){ - ICElement tempElement = null; - IEditorPart temp = fSite.getPage().getActiveEditor(); CEditor cTemp = null; if (temp instanceof CEditor){ @@ -205,13 +200,13 @@ public abstract class FindAction extends Action { return; } - CSearchQuery job = createSearchQuery(selectedText.getText(),getSearchForFromNode((IASTNode)node)); + CSearchQuery job = createSearchQuery(selectedText.getText(),getSearchForFromNode(node)); NewSearchUI.activateSearchResultView(); NewSearchUI.runQuery(job); } - private SearchFor getSearchForFromNode(IASTNode node){ + private SearchFor getSearchForFromNode(IASTOffsetableNamedElement node){ SearchFor searchFor = null; if (node instanceof IASTClassSpecifier){ @@ -242,12 +237,13 @@ public abstract class FindAction extends Action { else if (node instanceof IASTEnumerationSpecifier){ searchFor = ICSearchConstants.ENUM; } - else if (node instanceof IASTEnumerator){ - searchFor = ICSearchConstants.FIELD; - } else if (node instanceof IASTNamespaceDefinition){ searchFor = ICSearchConstants.NAMESPACE; } + else if( node instanceof IASTTypedefDeclaration) + searchFor = ICSearchConstants.TYPEDEF; + else if( node instanceof IASTEnumerator ) + searchFor = ICSearchConstants.ENUMTOR; return searchFor; }