mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
org.eclipse.cdt.core
Added preliminary (crude) SelectionParser IParser implementation for SELECTION_PARSE clients. org.eclipse.cdt.core.tests Added preliminary SelectionParseTests to test SELECTION_PARSE clients. Added SelectionParseTests to ParserTestSuite.
This commit is contained in:
parent
395c81dceb
commit
1f042fb9a2
11 changed files with 189 additions and 58 deletions
|
@ -1,5 +1,5 @@
|
||||||
2004-02-04 John Camelon
|
2004-02-04 John Camelon
|
||||||
Added preliminary (crude) SelectionParser IParser implementation for SELECTION_PARSE clients.
|
Added preliminary (crude) bSelectionParser IParser implementation for SELECTION_PARSE clients.
|
||||||
|
|
||||||
2004-02-01 John Camelon
|
2004-02-01 John Camelon
|
||||||
Added CompletionKind.UNREACHABLE_CODE to IASTCompletionNode.
|
Added CompletionKind.UNREACHABLE_CODE to IASTCompletionNode.
|
||||||
|
|
|
@ -12,6 +12,10 @@ package org.eclipse.cdt.core.parser;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
|
@ -25,6 +29,8 @@ public interface ITokenDuple {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public abstract IToken getLastToken();
|
public abstract IToken getLastToken();
|
||||||
|
|
||||||
|
|
||||||
public abstract Iterator iterator();
|
public abstract Iterator iterator();
|
||||||
public abstract String toString();
|
public abstract String toString();
|
||||||
public abstract boolean isIdentifier();
|
public abstract boolean isIdentifier();
|
||||||
|
@ -34,4 +40,6 @@ public interface ITokenDuple {
|
||||||
public IToken getToken(int index);
|
public IToken getToken(int index);
|
||||||
|
|
||||||
public int findLastTokenType( int type );
|
public int findLastTokenType( int type );
|
||||||
|
|
||||||
|
public IASTNode lookup( IASTFactory factory, IASTScope scope );
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ public class ParseError extends Error {
|
||||||
|
|
||||||
// offset specified is within a section of code #if'd out by the preprocessor
|
// offset specified is within a section of code #if'd out by the preprocessor
|
||||||
// semantic context cannot be provided in this case
|
// semantic context cannot be provided in this case
|
||||||
public static final ParseErrorKind OFFSET_PREPROCESSED_OUT = new ParseErrorKind( 1 );
|
public static final ParseErrorKind OFFSETDUPLE_UNREACHABLE = new ParseErrorKind( 1 );
|
||||||
|
|
||||||
// offset range specified is not a valid identifier or qualified name
|
// offset range specified is not a valid identifier or qualified name
|
||||||
// semantic context cannot be provided in this case
|
// semantic context cannot be provided in this case
|
||||||
|
|
|
@ -16,10 +16,11 @@ import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||||
import org.eclipse.cdt.core.parser.extension.ExtensionDialect;
|
import org.eclipse.cdt.core.parser.extension.ExtensionDialect;
|
||||||
import org.eclipse.cdt.core.parser.extension.IParserExtensionFactory;
|
import org.eclipse.cdt.core.parser.extension.IParserExtensionFactory;
|
||||||
import org.eclipse.cdt.internal.core.parser.CompleteParser;
|
import org.eclipse.cdt.internal.core.parser.CompleteParser;
|
||||||
import org.eclipse.cdt.internal.core.parser.ContextualParser;
|
import org.eclipse.cdt.internal.core.parser.CompletionParser;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserExtensionFactory;
|
import org.eclipse.cdt.internal.core.parser.ParserExtensionFactory;
|
||||||
import org.eclipse.cdt.internal.core.parser.QuickParseCallback;
|
import org.eclipse.cdt.internal.core.parser.QuickParseCallback;
|
||||||
import org.eclipse.cdt.internal.core.parser.QuickParser;
|
import org.eclipse.cdt.internal.core.parser.QuickParser;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.SelectionParser;
|
||||||
import org.eclipse.cdt.internal.core.parser.StructuralParseCallback;
|
import org.eclipse.cdt.internal.core.parser.StructuralParseCallback;
|
||||||
import org.eclipse.cdt.internal.core.parser.StructuralParser;
|
import org.eclipse.cdt.internal.core.parser.StructuralParser;
|
||||||
import org.eclipse.cdt.internal.core.parser.ast.complete.CompleteParseASTFactory;
|
import org.eclipse.cdt.internal.core.parser.ast.complete.CompleteParseASTFactory;
|
||||||
|
@ -57,9 +58,9 @@ public class ParserFactory {
|
||||||
else if( ourMode == ParserMode.STRUCTURAL_PARSE )
|
else if( ourMode == ParserMode.STRUCTURAL_PARSE )
|
||||||
return new StructuralParser( scanner, ourCallback, language, logService );
|
return new StructuralParser( scanner, ourCallback, language, logService );
|
||||||
else if( ourMode == ParserMode.COMPLETION_PARSE )
|
else if( ourMode == ParserMode.COMPLETION_PARSE )
|
||||||
return new ContextualParser( scanner, ourCallback, language, logService );
|
return new CompletionParser( scanner, ourCallback, language, logService );
|
||||||
else if( ourMode == ParserMode.SELECTION_PARSE )
|
else if (ourMode == ParserMode.SELECTION_PARSE )
|
||||||
return null; // TODO Implementation required
|
return new SelectionParser( scanner, ourCallback, language, logService );
|
||||||
else
|
else
|
||||||
return new QuickParser( scanner, ourCallback, language, logService );
|
return new QuickParser( scanner, ourCallback, language, logService );
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,4 +241,6 @@ public interface IASTFactory
|
||||||
* @param firstExpression
|
* @param firstExpression
|
||||||
*/
|
*/
|
||||||
public IASTNode getCompletionContext(Kind kind, IASTExpression expression);
|
public IASTNode getCompletionContext(Kind kind, IASTExpression expression);
|
||||||
|
|
||||||
|
public IASTNode lookupSymbolInContext( IASTScope scope, ITokenDuple duple ) throws ASTNotImplementedException;
|
||||||
}
|
}
|
|
@ -22,6 +22,7 @@ import org.eclipse.cdt.core.parser.IScanner;
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
import org.eclipse.cdt.core.parser.IToken;
|
import org.eclipse.cdt.core.parser.IToken;
|
||||||
import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
|
import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
|
||||||
|
import org.eclipse.cdt.core.parser.ParseError;
|
||||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
|
@ -40,13 +41,14 @@ import org.eclipse.cdt.internal.core.parser.token.KeywordSets.Key;
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*/
|
*/
|
||||||
public class ContextualParser extends Parser implements IParser {
|
public class CompletionParser extends CompleteParser implements IParser {
|
||||||
|
|
||||||
protected CompletionKind kind;
|
protected CompletionKind kind;
|
||||||
protected IASTScope scope;
|
|
||||||
protected IASTNode context;
|
protected IASTNode context;
|
||||||
protected IToken finalToken;
|
protected IToken finalToken;
|
||||||
private Set keywordSet;
|
private Set keywordSet;
|
||||||
|
protected IASTScope scope;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param scanner
|
* @param scanner
|
||||||
|
@ -54,7 +56,7 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
* @param language
|
* @param language
|
||||||
* @param log
|
* @param log
|
||||||
*/
|
*/
|
||||||
public ContextualParser(IScanner scanner, ISourceElementRequestor callback, ParserLanguage language, IParserLogService log) {
|
public CompletionParser(IScanner scanner, ISourceElementRequestor callback, ParserLanguage language, IParserLogService log) {
|
||||||
super(scanner, callback, language, log);
|
super(scanner, callback, language, log);
|
||||||
astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETION_PARSE, language);
|
astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETION_PARSE, language);
|
||||||
scanner.setASTFactory(astFactory);
|
scanner.setASTFactory(astFactory);
|
||||||
|
@ -91,31 +93,24 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Set getKeywordSet() {
|
protected Set getKeywordSet() {
|
||||||
return keywordSet;
|
return keywordSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private String getCompletionPrefix() {
|
protected String getCompletionPrefix() {
|
||||||
return ( finalToken == null ? "" : finalToken.getImage() );
|
return ( finalToken == null ? "" : finalToken.getImage() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private IASTNode getCompletionContext() {
|
protected IASTNode getCompletionContext() {
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private IASTScope getCompletionScope() {
|
|
||||||
return scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -123,24 +118,6 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
return kind;
|
return kind;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.IParser#parse(int, int)
|
|
||||||
*/
|
|
||||||
public IASTNode parse(int startingOffset, int endingOffset) {
|
|
||||||
scanner.setOffsetBoundary(endingOffset);
|
|
||||||
translationUnit();
|
|
||||||
return getCompletionContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.internal.core.parser.Parser#setCurrentScope(org.eclipse.cdt.core.parser.ast.IASTScope)
|
|
||||||
*/
|
|
||||||
protected void setCompletionScope(IASTScope scope) {
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setCompletionContext( IASTNode node )
|
protected void setCompletionContext( IASTNode node )
|
||||||
{
|
{
|
||||||
this.context = node;
|
this.context = node;
|
||||||
|
@ -152,19 +129,6 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void handleFunctionBody(IASTScope scope, boolean isInlineFunction) throws BacktrackException, EndOfFileException
|
|
||||||
{
|
|
||||||
if ( isInlineFunction )
|
|
||||||
skipOverCompoundStatement();
|
|
||||||
else
|
|
||||||
functionBody(scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void catchBlockCompoundStatement(IASTScope scope) throws BacktrackException, EndOfFileException
|
|
||||||
{
|
|
||||||
compoundStatement(scope, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.Parser#handleOffsetLimitException()
|
* @see org.eclipse.cdt.internal.core.parser.Parser#handleOffsetLimitException()
|
||||||
*/
|
*/
|
||||||
|
@ -191,7 +155,7 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
* @param object
|
* @param object
|
||||||
* @param string
|
* @param string
|
||||||
*/
|
*/
|
||||||
private void setCompletionValues(CompletionKind kind, Set keywordSet, String prefix ) {
|
protected void setCompletionValues(CompletionKind kind, Set keywordSet, String prefix ) {
|
||||||
setCompletionScope(compilationUnit);
|
setCompletionScope(compilationUnit);
|
||||||
this.keywordSet = keywordSet;
|
this.keywordSet = keywordSet;
|
||||||
setCompletionKind(kind);
|
setCompletionKind(kind);
|
||||||
|
@ -317,5 +281,23 @@ public class ContextualParser extends Parser implements IParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected IASTScope getCompletionScope() {
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IASTNode parse(int startingOffset, int endingOffset) {
|
||||||
|
throw new ParseError( ParseError.ParseErrorKind.METHOD_NOT_IMPLEMENTED );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setCompletionScope(IASTScope scope) {
|
||||||
|
this.scope = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean parse() {
|
||||||
|
throw new ParseError( ParseError.ParseErrorKind.METHOD_NOT_IMPLEMENTED );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -5293,7 +5293,9 @@ public abstract class Parser implements IParser
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return scanner.nextToken();
|
IToken value = scanner.nextToken();
|
||||||
|
handleNewToken( value );
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
catch( OffsetLimitReachedException olre )
|
catch( OffsetLimitReachedException olre )
|
||||||
{
|
{
|
||||||
|
@ -5310,7 +5312,13 @@ public abstract class Parser implements IParser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleOffsetLimitException(OffsetLimitReachedException exception) throws EndOfFileException {
|
/**
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
protected void handleNewToken(IToken value) throws EndOfFileException {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void handleOffsetLimitException(OffsetLimitReachedException exception) throws EndOfFileException {
|
||||||
// unexpected, throw EOF instead (equivalent)
|
// unexpected, throw EOF instead (equivalent)
|
||||||
throw new EndOfFileException();
|
throw new EndOfFileException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v0.5
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v05.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
***********************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.parser;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||||
|
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||||
|
import org.eclipse.cdt.core.parser.IScanner;
|
||||||
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
|
import org.eclipse.cdt.core.parser.IToken;
|
||||||
|
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||||
|
import org.eclipse.cdt.core.parser.ParseError;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.token.OffsetDuple;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jcamelon
|
||||||
|
*/
|
||||||
|
public class SelectionParser extends CompletionParser {
|
||||||
|
|
||||||
|
private OffsetDuple offsetRange;
|
||||||
|
private IToken firstTokenOfDuple = null, lastTokenOfDuple = null;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.Parser#handleNewToken(org.eclipse.cdt.core.parser.IToken)
|
||||||
|
*/
|
||||||
|
protected void handleNewToken(IToken value) throws EndOfFileException {
|
||||||
|
if( value != null )
|
||||||
|
{
|
||||||
|
if( value.getOffset() == offsetRange.getFloorOffset() )
|
||||||
|
firstTokenOfDuple = value;
|
||||||
|
if( value.getEndOffset() == offsetRange.getCeilingOffset() )
|
||||||
|
{
|
||||||
|
lastTokenOfDuple = value;
|
||||||
|
throw new EndOfFileException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param scanner
|
||||||
|
* @param callback
|
||||||
|
* @param mode
|
||||||
|
* @param language
|
||||||
|
* @param log
|
||||||
|
*/
|
||||||
|
public SelectionParser(IScanner scanner, ISourceElementRequestor callback, ParserLanguage language, IParserLogService log) {
|
||||||
|
super(scanner, callback, language, log);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.IParser#parse(int, int)
|
||||||
|
*/
|
||||||
|
public IASTNode parse(int startingOffset, int endingOffset) {
|
||||||
|
scanner.setOffsetBoundary(endingOffset);
|
||||||
|
offsetRange = new OffsetDuple( startingOffset, endingOffset );
|
||||||
|
translationUnit();
|
||||||
|
return reconcileTokenDuple();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected IASTNode reconcileTokenDuple() throws ParseError {
|
||||||
|
if( firstTokenOfDuple == null || lastTokenOfDuple == null )
|
||||||
|
throw new ParseError( ParseError.ParseErrorKind.OFFSET_RANGE_NOT_NAME );
|
||||||
|
|
||||||
|
if( getCompletionKind() == IASTCompletionNode.CompletionKind.UNREACHABLE_CODE )
|
||||||
|
throw new ParseError( ParseError.ParseErrorKind.OFFSETDUPLE_UNREACHABLE );
|
||||||
|
|
||||||
|
ITokenDuple duple = new TokenDuple( firstTokenOfDuple, lastTokenOfDuple );
|
||||||
|
return duple.lookup( astFactory, getCompletionScope() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.IParser#parse(int)
|
||||||
|
*/
|
||||||
|
public IASTCompletionNode parse(int offset) {
|
||||||
|
throw new ParseError( ParseError.ParseErrorKind.METHOD_NOT_IMPLEMENTED );
|
||||||
|
}
|
||||||
|
}
|
|
@ -2821,4 +2821,18 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#lookupSymbolInContext(org.eclipse.cdt.core.parser.ast.IASTScope, org.eclipse.cdt.core.parser.ITokenDuple)
|
||||||
|
*/
|
||||||
|
public IASTNode lookupSymbolInContext(IASTScope scope, ITokenDuple duple) throws ASTNotImplementedException {
|
||||||
|
ISymbol s = null;
|
||||||
|
try {
|
||||||
|
s = lookupQualifiedName( scopeToSymbol( scope ), duple, new ArrayList(), false );
|
||||||
|
} catch (ASTSemanticException e) {
|
||||||
|
}
|
||||||
|
if ( s == null )
|
||||||
|
return null;
|
||||||
|
return s.getASTExtension().getPrimaryDeclaration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -347,4 +347,11 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#lookupSymbolInContext(org.eclipse.cdt.core.parser.ast.IASTScope, org.eclipse.cdt.core.parser.ITokenDuple)
|
||||||
|
*/
|
||||||
|
public IASTNode lookupSymbolInContext(IASTScope scope, ITokenDuple duple) throws ASTNotImplementedException {
|
||||||
|
throw new ASTNotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,10 @@ import java.util.NoSuchElementException;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.IToken;
|
import org.eclipse.cdt.core.parser.IToken;
|
||||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
|
@ -110,7 +114,7 @@ public class TokenDuple implements ITokenDuple {
|
||||||
|
|
||||||
public boolean isIdentifier()
|
public boolean isIdentifier()
|
||||||
{
|
{
|
||||||
return ( firstToken == lastToken );
|
return ( (firstToken == lastToken ) && (firstToken.getType() == IToken.tIDENTIFIER ));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -173,4 +177,17 @@ public class TokenDuple implements ITokenDuple {
|
||||||
return lastFound;
|
return lastFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ITokenDuple#lookup(org.eclipse.cdt.core.parser.ast.IASTFactory)
|
||||||
|
*/
|
||||||
|
public IASTNode lookup(IASTFactory factory, IASTScope scope) {
|
||||||
|
// check syntax of the node
|
||||||
|
|
||||||
|
try {
|
||||||
|
return factory.lookupSymbolInContext(scope, this );
|
||||||
|
} catch (ASTNotImplementedException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue