/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java; import java.io.Reader; import java.util.Map; import net.sourceforge.pmd.lang.AbstractParser; import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.TokenManager; import net.sourceforge.pmd.lang.ast.AbstractTokenManager; import net.sourceforge.pmd.lang.ast.JavaCharStream; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.JavaParser; import net.sourceforge.pmd.lang.java.ast.ParseException; /** * This is a generic Java specific implementation of the Parser interface. It * creates a JavaParser instance, and sets the exclude marker. It also exposes * the exclude map from the JavaParser instance. * * @see AbstractParser * @see JavaParser */ public abstract class AbstractJavaParser extends AbstractParser { private JavaParser parser; public AbstractJavaParser(ParserOptions parserOptions) { super(parserOptions); } @Override public TokenManager createTokenManager(Reader source) { return new JavaTokenManager(source); } /** * Subclass should override this method to modify the JavaParser as needed. */ protected JavaParser createJavaParser(Reader source) throws ParseException { parser = new JavaParser(new JavaCharStream(source)); String suppressMarker = getParserOptions().getSuppressMarker(); if (suppressMarker != null) { parser.setSuppressMarker(suppressMarker); } return parser; } public boolean canParse() { return true; } public Node parse(String fileName, Reader source) throws ParseException { AbstractTokenManager.setFileName(fileName); return createJavaParser(source).CompilationUnit(); } public Map<Integer, String> getSuppressMap() { return parser.getSuppressMap(); } }