@Override public CompilationTask getTask( Writer out, JavaFileManager fileManager, DiagnosticListener<? super JavaFileObject> diagnosticListener, Iterable<String> options, Iterable<String> classes, Iterable<? extends JavaFileObject> compilationUnits) { ErrorProneOptions errorProneOptions = ErrorProneOptions.processArgs(options); List<String> remainingOptions = Arrays.asList(errorProneOptions.getRemainingArgs()); ImmutableList<String> javacOpts = ImmutableList.copyOf(remainingOptions); javacOpts = defaultToLatestSupportedLanguageLevel(javacOpts); javacOpts = setCompilePolicyToByFile(javacOpts); final JavacTaskImpl task = (JavacTaskImpl) javacTool.getTask( out, fileManager, diagnosticListener, javacOpts, classes, compilationUnits); setupMessageBundle(task.getContext()); RefactoringCollection[] refactoringCollection = {null}; task.addTaskListener( createAnalyzer( scannerSupplier, errorProneOptions, task.getContext(), refactoringCollection)); if (refactoringCollection[0] != null) { task.addTaskListener(new RefactoringTask(task.getContext(), refactoringCollection[0])); } task.addTaskListener(new CFCacheClearingListener()); return task; }
/** * Translate all the abstract syntax trees to elements. * * @throws IOException TODO * @return a list of elements corresponding to the top level * classes in the abstract syntax trees */ public Iterable<? extends TypeElement> enter() throws IOException { return enter(null); }
for (CompilationUnitTree cut : jt.parse(tuple.jfo)) { //TODO: should be exactly one if (units != null) { Pair<CompilationUnitTree, CompileTuple> unit = Pair.<CompilationUnitTree, CompileTuple>of(cut, tuple); Log.instance(jt.getContext()).nerrors = 0; } catch (CancelAbort ca) { if (context.isCancelled() && JavaIndex.LOG.isLoggable(Level.FINEST)) { .map((jtask) -> jtask.getProcessors()) .map((it) -> it.iterator().hasNext()) .orElse(Boolean.FALSE); final Iterable<? extends TypeElement> types = jt.enterTrees(Collections.singletonList(unit.first())); if (jfo2units.remove(active.jfo) != null) { final Types ts = Types.instance(jt.getContext()); final Indexable activeIndexable = active.indexable; class ScanNested extends TreeScanner { jt.analyze(types); if (aptEnabled) { JavaCustomIndexer.addAptGenerated(context, javaContext, active, aptGenerated); if (javaContext.getCheckSums().checkAndSet(active.indexable.getURL(), types, jt.getElements()) || context.isSupplementaryFilesIndexing()) { javaContext.analyze(Collections.singleton(unit.first()), jt, unit.second(), addedTypes, main); } else { Log.instance(jt.getContext()).nerrors = 0; finished.add(active.indexable);
public static JavacTrees instance(JavaCompiler.CompilationTask task) { if (!(task instanceof JavacTaskImpl)) throw new IllegalArgumentException(); return instance(((JavacTaskImpl)task).getContext()); }
tuple.aptGenerated ? null : APTUtils.get(context.getRoot())); for (CompilationUnitTree cut : jt.parse(tuple.jfo)) { //TODO: should be exactly one if (units != null) { trees.add(cut); Log.instance(jt.getContext()).nerrors = 0; } catch (CancelAbort ca) { if (context.isCancelled() && JavaIndex.LOG.isLoggable(Level.FINEST)) { Iterable<? extends Processor> processors = jt.getProcessors(); boolean aptEnabled = processors != null && processors.iterator().hasNext(); try { final Iterable<? extends TypeElement> types = jt.enter(trees); if (context.isCancelled()) { return null; Enter enter = Enter.instance(jt.getContext()); for (TypeElement type : types) { Env<AttrContext> typeEnv = enter.getEnv((TypeSymbol) type); jt.analyze(types); if (context.isCancelled()) { return null; if (javaContext.getCheckSums().checkAndSet(active.indexable.getURL(), activeTypes, jt.getElements()) || context.isSupplementaryFilesIndexing()) { javaContext.analyze(Collections.singleton(unit.getKey()), jt, active, addedTypes, main); } else {
Iterable<? extends CompilationUnitTree> trees = currentInfo.getJavacTask().parse(new JavaFileObject[] {currentInfo.jfo}); if (trees == null) { LOGGER.log( Level.INFO, "Did not parse anything for: {0}", currentInfo.jfo.toUri()); //NOI18N currentInfo.getJavacTask().enter(); currentPhase = Phase.ELEMENTS_RESOLVED; long end = System.currentTimeMillis(); PostFlowAnalysis.analyze(jti.analyze(), jti.getContext()); currentPhase = Phase.RESOLVED; long end = System.currentTimeMillis ();
throws IOException prepareCompiler(); parse(); // TODO would be nice to specify files needed to be parsed for (JavaFileObject file: fileObjects) { JCCompilationUnit unit = notYetEntered.remove(file);
public static String reformat(String text, CodeStyle style, int rightMargin) { StringBuilder sb = new StringBuilder(text); try { ClassPath empty = ClassPathSupport.createClassPath(new URL[0]); ClasspathInfo cpInfo = ClasspathInfo.create(JavaPlatformManager.getDefault().getDefaultPlatform().getBootstrapLibraries(), empty, empty); JavacTaskImpl javacTask = JavacParser.createJavacTask(cpInfo, null, null, null, null, null, null, null); com.sun.tools.javac.util.Context ctx = javacTask.getContext(); JavaCompiler.instance(ctx).genEndPos = true; CompilationUnitTree tree = javacTask.parse(FileObjects.memoryFileObject("","", text)).iterator().next(); //NOI18N SourcePositions sp = JavacTrees.instance(ctx).getSourcePositions(); TokenSequence<JavaTokenId> tokens = TokenHierarchy.create(text, JavaTokenId.language()).tokenSequence(JavaTokenId.language()); for (Diff diff : Pretty.reformat(text, tokens, new TreePath(tree), sp, style, rightMargin)) { int start = diff.getStartOffset(); int end = diff.getEndOffset(); sb.delete(start, end); String t = diff.getText(); if (t != null && t.length() > 0) { sb.insert(start, t); } } } catch (IOException ioe) { } return sb.toString(); }
private static boolean parseJava(List<CompilationUnitTree> trees, String src) { JavaCompiler compiler = JavacTool.create(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); boolean success = true; ArrayList<JavaStringObject> javaStringObjects = new ArrayList<JavaStringObject>(); javaStringObjects.add(new JavaStringObject(src)); StringWriter errors = new StringWriter(); JavaCompiler.CompilationTask task = compiler.getTask(errors, fileManager, null, null, null, javaStringObjects); JavacTaskImpl javacTask = (JavacTaskImpl) task; try { Iterable<? extends CompilationUnitTree> iterable = javacTask.parse(); for (CompilationUnitTree x : iterable) { trees.add(x); } fileManager.close(); } catch (IOException e) { success = false; } if (!errors.toString().isEmpty()) { success = false; } return success; } }
enter(null); // ensure all classes have been entered handleFlowResults(compiler.flow(compiler.attribute(compiler.todo)), results); } else { Filter f = new Filter() {
fm.getJavaFileObjectsFromFiles(javacFiles)); Iterable<? extends CompilationUnitTree> units = task.parse(); ((JavacTaskImpl) task).enter(); Context ctx = ((JavacTaskImpl) task).getContext(); JavaCompiler c = JavaCompiler.instance(ctx); c.printCount("error", c.errorCount());
null); final JavacTaskImpl jt = JavacParser.createJavacTask(cpInfo, new DevNullDiagnosticListener(), null, null, null, null, null, null); TreeLoader.preRegister(jt.getContext(), cpInfo, true); jt.parse(new JavaFileObject[0]); } catch (IOException ex) { Exceptions.printStackTrace(ex); TypeElement jc = (TypeElement) ((JavacElements)jt.getElements()).getTypeElementByBinaryName(fqn); if (jc != null) { List<ExecutableElement> methods = ElementFilter.methodsIn(jt.getElements().getAllMembers(jc)); for (ExecutableElement method : methods) { List<? extends VariableElement> params = method.getParameters();
com.sun.tools.javac.util.Context ctx = javacTask.getContext(); JavaCompiler.instance(ctx).genEndPos = true; text = context.document().getText(currentEmbeddingStartOffset, currentEmbeddingLength); if (JavacParser.MIME_TYPE.equals(context.mimePath())) { cut = javacTask.parse(FileObjects.memoryFileObject("", "", text)).iterator().next(); //NOI18N parsedTree = cut; sp = JavacTrees.instance(ctx).getSourcePositions(); final SourcePositions[] psp = new SourcePositions[1]; cut = null; parsedTree = javacTask.parseStatement("{" + text + "}", psp); sp = new SourcePositions() { @Override
@NonNull final ClassSymbol clazz, @NonNull final HashMap<ClassSymbol, JCClassDecl> syms2trees) throws IOException { Log log = Log.instance(jti.getContext()); JavaCompiler compiler = JavaCompiler.instance(jti.getContext()); JavaFileObject prevLogTo = log.useSource(null); DiscardDiagnosticHandler discardDiagnosticHandler = new Log.DiscardDiagnosticHandler(log); try { compiler.skipAnnotationProcessing = true; jti.addTaskListener(listener); jti.generate(Collections.singletonList(clazz)); } catch (InvalidSourcePath isp) { LOGGER.log(Level.INFO, "InvalidSourcePath reported when writing sym file for class: {0}", clazz.flatname); // NOI18N } finally { jti.removeTaskListener(listener); compiler.skipAnnotationProcessing = oldSkipAP; log.popDiagnosticHandler(discardDiagnosticHandler);
/** * Generate code. * @throws IOException TODO */ @Override public Iterable<? extends JavaFileObject> generate() throws IOException { return generate(null); }
/** * Complete all analysis. * @throws IOException TODO */ @Override public Iterable<? extends Element> analyze() throws IOException { return analyze(null); }