src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/dependencies/PublicApiCollector.java

Print this page
rev 2819 : imported patch my-classpath-deps-00

*** 30,61 **** import com.sun.source.tree.Tree; import com.sun.source.util.TaskEvent; import com.sun.source.util.TaskListener; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; public class PublicApiCollector implements TaskListener { ! final Set<ClassSymbol> classSymbols = new HashSet<>(); ! @Override ! @DefinedBy(Api.COMPILER_TREE) ! public void started(TaskEvent e) { } @Override @DefinedBy(Api.COMPILER_TREE) public void finished(TaskEvent e) { ! if (e.getKind() == TaskEvent.Kind.ANALYZE) { ! for (Tree t : e.getCompilationUnit().getTypeDecls()) { if (t instanceof JCClassDecl) // Can also be a JCSkip classSymbols.add(((JCClassDecl) t).sym); } } - } ! public Set<ClassSymbol> getClassSymbols() { ! return classSymbols; } } --- 30,80 ---- import com.sun.source.tree.Tree; import com.sun.source.util.TaskEvent; import com.sun.source.util.TaskListener; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.tree.JCTree.JCClassDecl; + import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; + import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; + import com.sun.tools.sjavac.comp.Dependencies; public class PublicApiCollector implements TaskListener { ! private Context context; ! private final Set<ClassSymbol> classSymbols = new HashSet<>(); ! public PublicApiCollector(Context context) { ! this.context = context; } @Override @DefinedBy(Api.COMPILER_TREE) public void finished(TaskEvent e) { ! switch (e.getKind()) { ! case ANALYZE: ! collectClassSymbols((JCCompilationUnit) e.getCompilationUnit()); ! break; ! case COMPILATION: ! extractPubApis(); ! break; ! } ! } ! ! private void collectClassSymbols(JCCompilationUnit cu) { ! for (Tree t : cu.getTypeDecls()) { if (t instanceof JCClassDecl) // Can also be a JCSkip classSymbols.add(((JCClassDecl) t).sym); } } ! private void extractPubApis() { ! // For incremental builds we need to remember the public api of what ! // we depend upon. ! // Within a single compilation loop, we need to keep track of public ! // api of what we're compiling to decide if any dependants needs to ! // be tainted. ! Dependencies deps = Dependencies.instance(context); ! for (ClassSymbol cs : classSymbols) ! deps.visitPubapi(cs); } }