public ErrorProneJavaCompiler(ScannerSupplier scannerSupplier) { super(JavacTool.create(), scannerSupplier); } }
@Trusted static class MaskedFileManager extends JavacFileManager { public MaskedFileManager(Context context) { super(context, /* register= */ true, UTF_8); } public MaskedFileManager() { this(new Context()); } @Override protected ClassLoader getClassLoader(URL[] urls) { return new URLClassLoader( urls, new MaskedClassLoader(JavacFileManager.class.getClassLoader())); } } }
private JCCompilationUnit doCompile( final JavaFileObject input, Iterable<JavaFileObject> files, Context context) throws IOException { JavacTool tool = JavacTool.create(); DiagnosticCollector<JavaFileObject> diagnosticsCollector = new DiagnosticCollector<>(); ErrorProneOptions errorProneOptions; JavacTaskImpl task = (JavacTaskImpl) tool.getTask( CharStreams.nullWriter(), fileManager, Iterable<? extends CompilationUnitTree> trees = task.parse(); task.analyze(); JCCompilationUnit tree = Iterables.getOnlyElement(
static int getStartPosition(DocTree docTree, VisitorState state) { DocSourcePositions positions = JavacTrees.instance(state.context).getSourcePositions(); CompilationUnitTree compilationUnitTree = state.getPath().getCompilationUnit(); return (int) positions.getStartPosition(compilationUnitTree, getDocCommentTree(state), docTree); }
@Nullable private static DocCommentTree getDocCommentTree(VisitorState state) { return JavacTrees.instance(state.context).getDocCommentTree(state.getPath()); }
@Override public void init(JavacTask javacTask, String... args) { Iterator<String> itr = Arrays.asList(args).iterator(); String path = null; while (itr.hasNext()) { if (itr.next().equals("--out")) { path = itr.next(); break; } } checkArgument(path != null, "No --out specified"); javacTask.addTaskListener( new RefasterRuleCompilerAnalyzer( ((BasicJavacTask) javacTask).getContext(), FileSystems.getDefault().getPath(path))); } }
@Override public Void visitReference(ReferenceTree referenceTree, Void sink) { // do this first, it attributes the referenceTree as a side-effect trees.getElement(getCurrentPath()); com.sun.source.util.TreeScanner<Void, Void> nonRecursiveScanner = new com.sun.source.util.TreeScanner<Void, Void>() { @Override public Void visitIdentifier(IdentifierTree tree, Void sink) { Symbol sym = ASTHelpers.getSymbol(tree); if (sym != null) { System.out.println("sym = " + sym); } return null; } }; DCReference reference = (DCReference) referenceTree; nonRecursiveScanner.scan(reference.qualifierExpression, sink); nonRecursiveScanner.scan(reference.paramTypes, sink); return null; } }
private void scanJavadoc() { DocCommentTree commentTree = trees.getDocCommentTree(getCurrentPath()); if (commentTree != null) { DocTreePath docTrees = new DocTreePath(getCurrentPath(), commentTree); new DocTreeSymbolScanner(trees, fixes).scan(docTrees, null); } } }
public BaseErrorProneJavaCompiler(ScannerSupplier scannerSupplier) { this(JavacTool.create(), scannerSupplier); }
static int getEndPosition(DocTree docTree, VisitorState state) { DocSourcePositions positions = JavacTrees.instance(state.context).getSourcePositions(); CompilationUnitTree compilationUnitTree = state.getPath().getCompilationUnit(); return (int) positions.getEndPosition(compilationUnitTree, getDocCommentTree(state), docTree); }
@Override public void init(JavacTask javacTask, String... args) { Context context = ((BasicJavacTask) javacTask).getContext(); BaseErrorProneJavaCompiler.checkCompilePolicy(Options.instance(context).get("compilePolicy")); BaseErrorProneJavaCompiler.setupMessageBundle(context); RefactoringCollection[] refactoringCollection = {null}; javacTask.addTaskListener( BaseErrorProneJavaCompiler.createAnalyzer( BuiltInCheckerSuppliers.defaultChecks(), ErrorProneOptions.processArgs(args), context, refactoringCollection)); if (refactoringCollection[0] != null) { javacTask.addTaskListener(new RefactoringTask(context, refactoringCollection[0])); } } }
@Override public Void visitReference(ReferenceTree referenceTree, SymbolSink sink) { // do this first, it attributes the referenceTree as a side-effect trees.getElement(getCurrentPath()); TreeScanner<Void, SymbolSink> nonRecursiveScanner = new TreeScanner<Void, SymbolSink>() { @Override public Void visitIdentifier(IdentifierTree tree, SymbolSink sink) { Symbol sym = ASTHelpers.getSymbol(tree); if (sym != null) { sink.accept(sym); } return null; } }; DCReference reference = (DCReference) referenceTree; nonRecursiveScanner.scan(reference.qualifierExpression, sink); nonRecursiveScanner.scan(reference.paramTypes, sink); return null; } }
@Trusted public class ErrorProneAnalyzer implements TaskListener {
private void scanJavadoc(SymbolSink sink) { if (getCurrentPath() == null) { return; } DocCommentTree commentTree = trees.getDocCommentTree(getCurrentPath()); if (commentTree == null) { return; } docTreeSymbolScanner.scan(new DocTreePath(getCurrentPath(), commentTree), sink); }
public ErrorProneJavaCompiler() { this(JavacTool.create()); }
static SuggestedFix replace(DocTree docTree, String replacement, VisitorState state) { DocSourcePositions positions = JavacTrees.instance(state.context).getSourcePositions(); CompilationUnitTree compilationUnitTree = state.getPath().getCompilationUnit(); int startPos = getStartPosition(docTree, state); int endPos = (int) positions.getEndPosition(compilationUnitTree, getDocCommentTree(state), docTree); return SuggestedFix.replace(startPos, endPos, replacement); }
private CompilationTestHelper(ScannerSupplier scannerSupplier, String checkName, Class<?> clazz) { this.fileManager = new ErrorProneInMemoryFileManager(clazz); try { fileManager.setLocation(StandardLocation.SOURCE_PATH, Collections.emptyList()); } catch (IOException e) { throw new UncheckedIOException(e); } this.diagnosticHelper = new DiagnosticTestHelper(checkName); this.outputStream = new ByteArrayOutputStream(); this.compiler = new BaseErrorProneJavaCompiler(JavacTool.create(), scannerSupplier); }
@Override public Void visitParam(ParamTree paramTree, Void unused) { if (paramTree.isTypeParameter() && paramTree.getName().getName().contentEquals(name)) { DocSourcePositions positions = JavacTrees.instance(state.context).getSourcePositions(); CompilationUnitTree compilationUnitTree = state.getPath().getCompilationUnit(); int startPos = (int) positions.getStartPosition( compilationUnitTree, docCommentTree, paramTree.getName()); int endPos = (int) positions.getEndPosition( compilationUnitTree, docCommentTree, paramTree.getName()); fixBuilder.replace(startPos, endPos, typeVarReplacement); } return super.visitParam(paramTree, null); } },