123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * PARC initial implementation
- * ******************************************************************/
-
-
- package org.aspectj.ajdt.internal.compiler.ast;
-
- import org.aspectj.weaver.IHasPosition;
- import org.aspectj.weaver.ISourceContext;
- import org.aspectj.weaver.patterns.BasicTokenSource;
- import org.aspectj.weaver.patterns.Declare;
- import org.aspectj.weaver.patterns.IToken;
- import org.aspectj.weaver.patterns.ParserException;
- import org.aspectj.weaver.patterns.PatternParser;
- import org.aspectj.weaver.patterns.PerClause;
- import org.aspectj.weaver.patterns.PerSingleton;
- import org.aspectj.weaver.patterns.Pointcut;
- import org.aspectj.weaver.patterns.TypePattern;
- import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
- import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
- import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
- import org.aspectj.org.eclipse.jdt.internal.compiler.parser.Parser;
- import org.aspectj.org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
-
-
- public class PseudoTokens extends ASTNode {
- BasicTokenSource tokenSource;
- PseudoToken[] tokens; //XXX this is redundant with the field above
- String endToken;
-
-
- public PseudoTokens(PseudoToken[] tokens, ISourceContext sourceContext) {
- super();
- this.tokens = tokens;
- this.tokenSource = new BasicTokenSource(tokens, sourceContext);
- endToken = tokens[tokens.length-1].getString();
- sourceStart = tokens[0].sourceStart;
- sourceEnd = tokens[tokens.length-2].sourceEnd;
- }
-
- public Pointcut parsePointcut(Parser parser) {
- PatternParser patternParser = new PatternParser(tokenSource);
- try {
- Pointcut ret = patternParser.parsePointcut();
- checkEof(parser);
- return ret;
- } catch (ParserException pe) {
- reportError(parser, pe);
- return Pointcut.makeMatchesNothing(Pointcut.SYMBOLIC);
- }
- }
-
- private void checkEof(Parser parser) {
- IToken last = tokenSource.next();
- if (tokenSource.next() != IToken.EOF) {
- parser.problemReporter().parseError(last.getStart(), last.getEnd(),
- TerminalTokens.TokenNameIdentifier,
- last.getString().toCharArray(),
- last.getString(),
- new String[] {endToken});
- }
- }
-
-
- private void reportError(Parser parser, ParserException pe) {
- IHasPosition tok = pe.getLocation();
- int start, end;
- if (tok == IToken.EOF) {
- start = sourceEnd+1;
- end = sourceEnd+1;
- } else {
- start = tok.getStart();
- end = tok.getEnd();
- }
- String found = "<unknown>";
- if (tok instanceof IToken) {
- found = ((IToken)tok).getString();
- }
-
- parser.problemReporter().parseError(start, end,
- TerminalTokens.TokenNameIdentifier,
- found.toCharArray(),
- found,
- new String[] {pe.getMessage()});
- }
-
-
- public TypePattern maybeParseDominatesPattern(Parser parser) {
- PatternParser patternParser = new PatternParser(tokenSource);
- try {
- if (patternParser.maybeEatIdentifier("dominates")) {
- // there is no eof check here
- return patternParser.parseTypePattern();
- } else {
- return null;
- }
- } catch (ParserException pe) {
- reportError(parser, pe);
- return null;
- }
- }
-
-
- public PerClause parsePerClause(Parser parser) {
- PatternParser patternParser = new PatternParser(tokenSource);
- try {
- PerClause ret = patternParser.maybeParsePerClause();
- checkEof(parser);
- if (ret == null) return new PerSingleton();
- else return ret;
- } catch (ParserException pe) {
- reportError(parser, pe);
- return new PerSingleton();
- }
-
- }
-
-
- // public TypePattern parseTypePattern(Parser parser) {
- // }
- //
- public Declare parseDeclare(Parser parser) {
- PatternParser patternParser = new PatternParser(tokenSource);
- try {
- Declare ret = patternParser.parseDeclare();
- checkEof(parser);
- return ret;
- } catch (ParserException pe) {
- reportError(parser, pe);
- return null;
- }
- }
-
- public Declare parseAnnotationDeclare(Parser parser) {
- PatternParser patternParser = new PatternParser(tokenSource);
- try {
- Declare ret = patternParser.parseDeclareAnnotation();
- checkEof(parser);
- return ret;
- } catch (ParserException pe) {
- reportError(parser, pe);
- return null;
- } }
-
-
- public void postParse(TypeDeclaration typeDec, MethodDeclaration enclosingDec) {
- int counter = 0; // Counter can be used by postParse as a value to compute uniqueness (if required)
- for (int i=0, len=tokens.length; i < len; i++) {
- counter+=tokens[i].postParse(typeDec, enclosingDec, counter);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jdt.internal.compiler.ast.ASTNode#print(int, java.lang.StringBuffer)
- */
- public StringBuffer print(int indent, StringBuffer output) {
- output.append(tokenSource.toString());
- return output;
- }
-
- }
|