public void run( Level logLevel, ExecutorService executor, FileReadUtil fileReader, PerformanceTrackers perfTracking) throws IOException, FileFormatException { HashSet<List<String>> missingNamespaces = new HashSet<>(); Logging log = this.logFile != null ? new LoggingImpl( logLevel, new PrintStream(this.logFile.toFile()), LoggingPrefixFormat.DATETIME_LEVEL_AND_CLASS) : null; val loadRes = SourceFiles.load(this.sources); if (log != null) { loadRes.log(log, logLevel, true); } // TODO debugging long start = System.nanoTime(); val parseRes = ParsedResult.parse(loadRes.getSources(), executor, fileReader, perfTracking); // TODO debugging System.out.println( "load() time: " + TimeUnitUtil.convert( TimeUnit.NANOSECONDS, (System.nanoTime() - start), TimeUnit.MILLISECONDS) + " " + TimeUnitUtil.abbreviation(TimeUnit.MILLISECONDS, true, false)); if (log != null) { parseRes.log(log, logLevel, true); } val resolvedRes = ResolvedResult.resolve(parseRes.compilationUnits, missingNamespaces); if (log != null) { resolvedRes.log(log, logLevel, true); } val filterRes = FilterResult.filter(resolvedRes.compilationUnits, this.destinations); if (log != null) { filterRes.log(log, logLevel, true); } WriteResult.write(filterRes.filterSets, missingNamespaces); }