11package es .upv .mist .slicing .cli ;
22
3- import com .github .javaparser .StaticJavaParser ;
3+ import com .github .javaparser .JavaParser ;
4+ import com .github .javaparser .ParseResult ;
5+ import com .github .javaparser .ParserConfiguration ;
6+ import com .github .javaparser .Problem ;
47import com .github .javaparser .ast .CompilationUnit ;
58import com .github .javaparser .ast .NodeList ;
69import com .github .javaparser .ast .comments .BlockComment ;
710import com .github .javaparser .ast .nodeTypes .NodeWithName ;
11+ import com .github .javaparser .symbolsolver .JavaSymbolSolver ;
12+ import com .github .javaparser .symbolsolver .resolution .typesolvers .CombinedTypeSolver ;
813import com .github .javaparser .symbolsolver .resolution .typesolvers .JavaParserTypeSolver ;
14+ import com .github .javaparser .symbolsolver .resolution .typesolvers .ReflectionTypeSolver ;
915import es .upv .mist .slicing .graphs .augmented .ASDG ;
1016import es .upv .mist .slicing .graphs .augmented .PSDG ;
1117import es .upv .mist .slicing .graphs .exceptionsensitive .ESSDG ;
1521import es .upv .mist .slicing .slicing .Slice ;
1622import es .upv .mist .slicing .slicing .SlicingCriterion ;
1723import es .upv .mist .slicing .utils .NodeHashSet ;
18- import es .upv .mist .slicing .utils .StaticTypeSolver ;
1924import org .apache .commons .cli .*;
2025
2126import java .io .File ;
2227import java .io .FileNotFoundException ;
2328import java .io .PrintWriter ;
24- import java .util .Collections ;
25- import java .util .HashSet ;
26- import java .util .Set ;
29+ import java .util .*;
2730import java .util .regex .Matcher ;
2831import java .util .regex .Pattern ;
2932import java .util .stream .Stream ;
@@ -172,24 +175,28 @@ public String getScVar() {
172175
173176 public void slice () throws ParseException {
174177 // Configure JavaParser
175- StaticTypeSolver .addTypeSolverJRE ();
178+ ParserConfiguration parserConfig = new ParserConfiguration ();
179+ parserConfig .setAttributeComments (false );
180+ CombinedTypeSolver cts = new CombinedTypeSolver ();
181+ cts .add (new ReflectionTypeSolver (true ));
176182 for (File directory : dirIncludeSet )
177- StaticTypeSolver .addTypeSolver (new JavaParserTypeSolver (directory ));
178- StaticJavaParser .getConfiguration ().setAttributeComments (false );
183+ if (directory .isDirectory ())
184+ cts .add (new JavaParserTypeSolver (directory ));
185+ parserConfig .setSymbolResolver (new JavaSymbolSolver (cts ));
186+ JavaParser parser = new JavaParser (parserConfig );
179187
180188 // Build the SDG
181189 Set <CompilationUnit > units = new NodeHashSet <>();
182- try {
183- for (File file : dirIncludeSet ) {
184- if (file .isDirectory ())
185- for (File f : (Iterable <File >) findAllJavaFiles (file )::iterator )
186- units .add (StaticJavaParser .parse (f ));
187- else
188- units .add (StaticJavaParser .parse (file ));
189- }
190- units .add (StaticJavaParser .parse (scFile ));
191- } catch (FileNotFoundException e ) {
192- throw new ParseException (e .getMessage ());
190+ List <Problem > problems = new LinkedList <>();
191+ boolean scFileFound = false ;
192+ for (File file : (Iterable <File >) findAllJavaFiles (dirIncludeSet )::iterator )
193+ scFileFound |= parse (parser , file , units , problems );
194+ if (!scFileFound )
195+ parse (parser , scFile , units , problems );
196+ if (!problems .isEmpty ()) {
197+ for (Problem p : problems )
198+ System .out .println (" * " + p .getVerboseMessage ());
199+ throw new ParseException ("Some problems were found while parsing files or folders" );
193200 }
194201
195202 SDG sdg ;
@@ -225,6 +232,29 @@ public void slice() throws ParseException {
225232 }
226233 }
227234
235+ private boolean parse (JavaParser parser , File file , Set <CompilationUnit > units , List <Problem > problems ) {
236+ try {
237+ ParseResult <CompilationUnit > result = parser .parse (file );
238+ if (result .isSuccessful ())
239+ result .ifSuccessful (units ::add );
240+ else
241+ problems .addAll (result .getProblems ());
242+ } catch (FileNotFoundException e ) {
243+ problems .add (new Problem (e .getLocalizedMessage (), null , e ));
244+ }
245+ return Objects .equals (file .getAbsoluteFile (), scFile .getAbsoluteFile ());
246+ }
247+
248+ protected Stream <File > findAllJavaFiles (Collection <File > files ) {
249+ Stream .Builder <File > builder = Stream .builder ();
250+ for (File file : files )
251+ if (file .isDirectory ())
252+ findAllJavaFiles (file , builder );
253+ else
254+ builder .accept (file );
255+ return builder .build ();
256+ }
257+
228258 protected Stream <File > findAllJavaFiles (File directory ) {
229259 Stream .Builder <File > builder = Stream .builder ();
230260 findAllJavaFiles (directory , builder );
@@ -239,7 +269,7 @@ protected void findAllJavaFiles(File directory, Stream.Builder<File> builder) {
239269 if (f .isDirectory ())
240270 findAllJavaFiles (f , builder );
241271 else if (f .getName ().endsWith (".java" ))
242- builder .add (f );
272+ builder .accept (f );
243273 }
244274 }
245275
0 commit comments