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);
}
}