diff --git a/src/main/java/com/bartek/esa/core/analyser/Analyser.java b/src/main/java/com/bartek/esa/analyser/core/Analyser.java similarity index 54% rename from src/main/java/com/bartek/esa/core/analyser/Analyser.java rename to src/main/java/com/bartek/esa/analyser/core/Analyser.java index 6a0fa99..14de815 100644 --- a/src/main/java/com/bartek/esa/core/analyser/Analyser.java +++ b/src/main/java/com/bartek/esa/analyser/core/Analyser.java @@ -1,26 +1,19 @@ -package com.bartek.esa.core.analyser; +package com.bartek.esa.analyser.core; import com.bartek.esa.core.archetype.Plugin; import com.bartek.esa.core.executor.PluginExecutor; import com.bartek.esa.core.model.object.Issue; -import com.bartek.esa.error.EsaException; -import com.bartek.esa.file.provider.FileProvider; -import javax.inject.Inject; import java.io.File; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; -public class Analyser { - private final FileProvider fileProvider; +public abstract class Analyser { private final PluginExecutor pluginExecutor; private final Set plugins; - @Inject - public Analyser(FileProvider fileProvider, PluginExecutor pluginExecutor, Set plugins) { - this.fileProvider = fileProvider; + public Analyser(PluginExecutor pluginExecutor, Set plugins) { this.pluginExecutor = pluginExecutor; this.plugins = plugins; @@ -34,28 +27,9 @@ public class Analyser { return pluginExecutor.executeForFiles(manifest, files, selectedPlugins); } - private File getManifest(String source) { - Set manifests = fileProvider.getGlobMatchedFiles(source, "**/AndroidManifest.xml"); - if (manifests.isEmpty()) { - throw new EsaException("No AndroidManifest.xml file found. Interrupting..."); - } + protected abstract File getManifest(String source); - if (manifests.size() > 1) { - throw new EsaException("Found multiple AndroidManifest.xml files. Interrupting..."); - } - - return (File) (manifests.toArray())[0]; - } - - private Set getFiles(String source) { - Set javaFiles = fileProvider.getGlobMatchedFiles(source, "**/*.java"); - Set androidManifest = fileProvider.getGlobMatchedFiles(source, "**/AndroidManifest.xml"); - Set layoutFiles = fileProvider.getGlobMatchedFiles(source, "**/res/layout*/**.xml"); - - return Stream.of(javaFiles, androidManifest, layoutFiles) - .flatMap(Set::stream) - .collect(Collectors.toSet()); - } + protected abstract Set getFiles(String source); private Set getPlugins(Set pluginCodes, Set excludeCodes) { Set outputPlugins = plugins; diff --git a/src/main/java/com/bartek/esa/analyser/di/AnalyserModule.java b/src/main/java/com/bartek/esa/analyser/di/AnalyserModule.java new file mode 100644 index 0000000..1dac532 --- /dev/null +++ b/src/main/java/com/bartek/esa/analyser/di/AnalyserModule.java @@ -0,0 +1,19 @@ +package com.bartek.esa.analyser.di; + +import com.bartek.esa.analyser.source.SourceAnalyser; +import com.bartek.esa.core.archetype.Plugin; +import com.bartek.esa.core.executor.PluginExecutor; +import com.bartek.esa.file.provider.FileProvider; +import dagger.Module; +import dagger.Provides; + +import java.util.Set; + +@Module +public class AnalyserModule { + + @Provides + public SourceAnalyser sourceAnalyser(PluginExecutor pluginExecutor, Set plugins, FileProvider fileProvider) { + return new SourceAnalyser(pluginExecutor, plugins, fileProvider); + } +} diff --git a/src/main/java/com/bartek/esa/analyser/source/SourceAnalyser.java b/src/main/java/com/bartek/esa/analyser/source/SourceAnalyser.java new file mode 100644 index 0000000..b1093d7 --- /dev/null +++ b/src/main/java/com/bartek/esa/analyser/source/SourceAnalyser.java @@ -0,0 +1,52 @@ +package com.bartek.esa.analyser.source; + +import com.bartek.esa.analyser.core.Analyser; +import com.bartek.esa.core.archetype.Plugin; +import com.bartek.esa.core.executor.PluginExecutor; +import com.bartek.esa.error.EsaException; +import com.bartek.esa.file.provider.FileProvider; + +import javax.inject.Inject; +import java.io.File; +import java.util.Collections; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class SourceAnalyser extends Analyser { + private final FileProvider fileProvider; + + @Inject + public SourceAnalyser(PluginExecutor pluginExecutor, Set plugins, FileProvider fileProvider) { + super(pluginExecutor, plugins); + this.fileProvider = fileProvider; + } + + @Override + protected File getManifest(String source) { + Set manifests = fileProvider.getGlobMatchedFilesRecursively(source, "**/AndroidManifest.xml"); + if (manifests.isEmpty()) { + throw new EsaException("No AndroidManifest.xml file found. Interrupting..."); + } + + if (manifests.size() > 1) { + throw new EsaException("Found multiple AndroidManifest.xml files. Interrupting..."); + } + + return (File) (manifests.toArray())[0]; + } + + @Override + protected Set getFiles(String source) { + Set javaFiles = fileProvider.getGlobMatchedFilesRecursively(source, "**/*.java"); + System.out.println(javaFiles); + Set layoutFiles = fileProvider.getGlobMatchedFilesRecursively(source, "**/res/layout*/**.xml"); + System.out.println(layoutFiles); + Set androidManifest = Collections.singleton(getManifest(source)); + System.out.println(androidManifest); + + return Stream.of(javaFiles, androidManifest, layoutFiles) + .flatMap(Set::stream) + .collect(Collectors.toSet()); + } +} diff --git a/src/main/java/com/bartek/esa/core/di/CoreModule.java b/src/main/java/com/bartek/esa/core/di/CoreModule.java index 2b54b7b..59d666d 100644 --- a/src/main/java/com/bartek/esa/core/di/CoreModule.java +++ b/src/main/java/com/bartek/esa/core/di/CoreModule.java @@ -1,17 +1,12 @@ package com.bartek.esa.core.di; -import com.bartek.esa.core.analyser.Analyser; -import com.bartek.esa.core.archetype.Plugin; import com.bartek.esa.core.desc.provider.DescriptionProvider; import com.bartek.esa.core.executor.PluginExecutor; import com.bartek.esa.core.java.JavaSyntaxRegexProvider; import com.bartek.esa.core.xml.XmlHelper; -import com.bartek.esa.file.provider.FileProvider; import dagger.Module; import dagger.Provides; -import java.util.Set; - @Module public class CoreModule { @@ -34,9 +29,4 @@ public class CoreModule { public XmlHelper xmlHelper() { return new XmlHelper(); } - - @Provides - public Analyser analyser(FileProvider fileProvider, PluginExecutor pluginExecutor, Set plugins) { - return new Analyser(fileProvider, pluginExecutor, plugins); - } } diff --git a/src/main/java/com/bartek/esa/di/DependencyInjector.java b/src/main/java/com/bartek/esa/di/DependencyInjector.java index 9793337..2c78ba4 100644 --- a/src/main/java/com/bartek/esa/di/DependencyInjector.java +++ b/src/main/java/com/bartek/esa/di/DependencyInjector.java @@ -1,6 +1,7 @@ package com.bartek.esa.di; import com.bartek.esa.EsaMain; +import com.bartek.esa.analyser.di.AnalyserModule; import com.bartek.esa.cli.di.CliModule; import com.bartek.esa.core.di.CoreModule; import com.bartek.esa.core.di.PluginModule; @@ -15,7 +16,8 @@ import dagger.Component; FileModule.class, DecompilerModule.class, CoreModule.class, - PluginModule.class + PluginModule.class, + AnalyserModule.class }) public interface DependencyInjector { EsaMain esa(); diff --git a/src/main/java/com/bartek/esa/file/provider/FileProvider.java b/src/main/java/com/bartek/esa/file/provider/FileProvider.java index b058d37..411dc05 100644 --- a/src/main/java/com/bartek/esa/file/provider/FileProvider.java +++ b/src/main/java/com/bartek/esa/file/provider/FileProvider.java @@ -27,7 +27,7 @@ public class FileProvider { .toFile(); } - public Set getGlobMatchedFiles(String path, String globPattern) { + public Set getGlobMatchedFilesRecursively(String path, String globPattern) { return Try.of(() -> Files.walk(Paths.get(path)) .filter(p -> globMatcher.pathMatchesGlobPattern(p, globPattern)) .map(Path::toFile)