3131import com .sun .source .util .TaskListener ;
3232import com .sun .tools .javac .api .*;
3333import com .sun .tools .javac .code .Types ;
34- import com .sun .tools .javac .comp .Annotate ;
35- import com .sun .tools .javac .comp .Check ;
36- import com .sun .tools .javac .comp .CompileStates ;
37- import com .sun .tools .javac .comp .Enter ;
38- import com .sun .tools .javac .comp .Modules ;
34+ import com .sun .tools .javac .comp .*;
3935import com .sun .tools .javac .main .Arguments ;
4036import com .sun .tools .javac .main .JavaCompiler ;
4137import com .sun .tools .javac .model .JavacElements ;
38+ import com .sun .tools .javac .tree .JCTree ;
4239import com .sun .tools .javac .util .Context ;
4340import com .sun .tools .javac .util .DefinedBy ;
4441import com .sun .tools .javac .util .DefinedBy .Api ;
@@ -128,6 +125,10 @@ Borrow getTask(
128125 return new Borrow (task , currentContext );
129126 }
130127
128+ public void removeClass (JCTree .JCCompilationUnit root , String className ) {
129+ currentContext .removeClass (root , className );
130+ }
131+
131132 class Borrow implements AutoCloseable {
132133 final JavacTask task ;
133134 boolean closed ;
@@ -209,6 +210,10 @@ <T> void drop(Class<T> c) {
209210 ht .remove (key (c ));
210211 }
211212
213+ void removeClass (JCTree .JCCompilationUnit root , String className ) {
214+ ((ReusableJavaCompiler ) get (JavaCompiler .compilerKey )).removeClass (root , className );
215+ }
216+
212217 /**
213218 * Reusable JavaCompiler; exposes a method to clean up the component from leftovers associated with previous
214219 * compilations.
@@ -226,6 +231,13 @@ public void close() {
226231 // do nothing
227232 }
228233
234+ void removeClass (JCTree .JCCompilationUnit root , String className ) {
235+ for (var classSymbol : syms .getClassesForName (names .fromString (className ))) {
236+ syms .removeClass (root .modle , classSymbol .flatname );
237+ chk .removeCompiled (classSymbol );
238+ }
239+ }
240+
229241 void clear () {
230242 newRound ();
231243 }
0 commit comments