66
77import com .google .common .base .Joiner ;
88import com .google .common .base .Splitter ;
9- import com .google .common .collect .ImmutableSet ;
109import com .google .common .collect .Lists ;
1110import com .sun .source .tree .AnnotationTree ;
1211import com .sun .source .tree .ArrayTypeTree ;
@@ -149,8 +148,6 @@ public class ClasspathParser {
149148 "SafeVarargs" ,
150149 "SuppressWarnings" );
151150
152- private final ParsedPackageData data = new ParsedPackageData ();
153-
154151 // get the system java compiler instance
155152 private static final JavaCompiler compiler = ToolProvider .getSystemJavaCompiler ();
156153 private static final List <String > OPTIONS =
@@ -160,31 +157,7 @@ public ClasspathParser() {
160157 // Doesn't need to do anything currently
161158 }
162159
163- public ParsedPackageData getParsedPackageData () {
164- return data ;
165- }
166-
167- public ImmutableSet <String > getUsedTypes () {
168- return ImmutableSet .copyOf (data .usedTypes );
169- }
170-
171- public ImmutableSet <String > getUsedPackagesWithoutSpecificTypes () {
172- return ImmutableSet .copyOf (data .usedPackagesWithoutSpecificTypes );
173- }
174-
175- public ImmutableSet <String > getExportedTypes () {
176- return ImmutableSet .copyOf (data .exportedTypes );
177- }
178-
179- public ImmutableSet <String > getPackages () {
180- return ImmutableSet .copyOf (data .packages );
181- }
182-
183- public ImmutableSet <String > getMainClasses () {
184- return ImmutableSet .copyOf (data .mainClasses );
185- }
186-
187- public void parseClasses (Path directory , List <String > files ) throws IOException {
160+ public ParsedPackageData parseClasses (Path directory , List <String > files ) throws IOException {
188161 StandardJavaFileManager fileManager = compiler .getStandardFileManager (null , null , null );
189162 List <? extends JavaFileObject > objectFiles =
190163 files .stream ()
@@ -202,18 +175,19 @@ public void parseClasses(Path directory, List<String> files) throws IOException
202175 logger .debug ("JavaTools: No files given to parse, skipping directory: {}" , directory );
203176 throw new IOException ("No files to process" );
204177 }
205- parseFileGatherDependencies (objectFiles );
178+ return parseFileGatherDependencies (objectFiles );
206179 }
207180
208- public void parseClasses (List <? extends JavaFileObject > files ) throws IOException {
209- this . parseFileGatherDependencies (files );
181+ public ParsedPackageData parseClasses (List <? extends JavaFileObject > files ) throws IOException {
182+ return parseFileGatherDependencies (files );
210183 }
211184
212- private void parseFileGatherDependencies (Iterable <? extends JavaFileObject > compUnits )
213- throws IOException {
185+ private ParsedPackageData parseFileGatherDependencies (
186+ Iterable <? extends JavaFileObject > compUnits ) throws IOException {
187+ ParsedPackageData data = new ParsedPackageData ();
214188 JavacTask task = (JavacTask ) compiler .getTask (null , null , null , OPTIONS , null , compUnits );
215189 try {
216- ClassScanner scanner = new ClassScanner ();
190+ ClassScanner scanner = new ClassScanner (data );
217191 for (CompilationUnitTree compileUnitTree : task .parse ()) {
218192 compileUnitTree .accept (scanner , null );
219193 }
@@ -223,13 +197,19 @@ private void parseFileGatherDependencies(Iterable<? extends JavaFileObject> comp
223197 } catch (Exception exception ) {
224198 logger .error ("JavaTools failed to parse {}, skipping file" , compUnits , exception );
225199 }
200+ return data ;
226201 }
227202
228203 class ClassScanner extends TreeScanner <Void , Void > {
204+ private final ParsedPackageData data ;
229205 private CompilationUnitTree compileUnit ;
230206 private String fileName ;
231207 @ Nullable private String currentPackage ;
232208
209+ ClassScanner (ParsedPackageData data ) {
210+ this .data = data ;
211+ }
212+
233213 // Stack of possibly-nested contexts we may currently be in.
234214 // First element is the outer-most context (e.g. top-level class), last element is the
235215 // inner-most context (e.g. inner class).
@@ -563,44 +543,44 @@ private String currentFullyQualifiedClassName() {
563543 parts .add (nestedClassName );
564544 return Joiner .on ('.' ).join (parts );
565545 }
566- }
567546
568- private void noteAnnotatedClass (
569- String annotatedFullyQualifiedClassName , String annotationFullyQualifiedClassName ) {
570- if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
571- data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
547+ private void noteAnnotatedClass (
548+ String annotatedFullyQualifiedClassName , String annotationFullyQualifiedClassName ) {
549+ if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
550+ data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
551+ }
552+ data .perClassData
553+ .get (annotatedFullyQualifiedClassName )
554+ .annotations
555+ .add (annotationFullyQualifiedClassName );
572556 }
573- data .perClassData
574- .get (annotatedFullyQualifiedClassName )
575- .annotations
576- .add (annotationFullyQualifiedClassName );
577- }
578557
579- private void noteAnnotatedMethod (
580- String annotatedFullyQualifiedClassName ,
581- String methodName ,
582- String annotationFullyQualifiedClassName ) {
583- if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
584- data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
585- }
586- PerClassData classData = data .perClassData .get (annotatedFullyQualifiedClassName );
587- if (!classData .perMethodAnnotations .containsKey (methodName )) {
588- classData .perMethodAnnotations .put (methodName , new TreeSet <>());
558+ private void noteAnnotatedMethod (
559+ String annotatedFullyQualifiedClassName ,
560+ String methodName ,
561+ String annotationFullyQualifiedClassName ) {
562+ if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
563+ data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
564+ }
565+ PerClassData classData = data .perClassData .get (annotatedFullyQualifiedClassName );
566+ if (!classData .perMethodAnnotations .containsKey (methodName )) {
567+ classData .perMethodAnnotations .put (methodName , new TreeSet <>());
568+ }
569+ classData .perMethodAnnotations .get (methodName ).add (annotationFullyQualifiedClassName );
589570 }
590- classData .perMethodAnnotations .get (methodName ).add (annotationFullyQualifiedClassName );
591- }
592571
593- private void noteAnnotatedField (
594- String annotatedFullyQualifiedClassName ,
595- String fieldName ,
596- String annotationFullyQualifiedClassName ) {
597- if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
598- data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
599- }
600- PerClassData classData = data .perClassData .get (annotatedFullyQualifiedClassName );
601- if (!classData .perFieldAnnotations .containsKey (fieldName )) {
602- classData .perFieldAnnotations .put (fieldName , new TreeSet <>());
572+ private void noteAnnotatedField (
573+ String annotatedFullyQualifiedClassName ,
574+ String fieldName ,
575+ String annotationFullyQualifiedClassName ) {
576+ if (!data .perClassData .containsKey (annotatedFullyQualifiedClassName )) {
577+ data .perClassData .put (annotatedFullyQualifiedClassName , new PerClassData ());
578+ }
579+ PerClassData classData = data .perClassData .get (annotatedFullyQualifiedClassName );
580+ if (!classData .perFieldAnnotations .containsKey (fieldName )) {
581+ classData .perFieldAnnotations .put (fieldName , new TreeSet <>());
582+ }
583+ classData .perFieldAnnotations .get (fieldName ).add (annotationFullyQualifiedClassName );
603584 }
604- classData .perFieldAnnotations .get (fieldName ).add (annotationFullyQualifiedClassName );
605585 }
606586}
0 commit comments