6: Extract Analyser to another package

This commit is contained in:
Bartłomiej Pluta
2019-04-02 18:20:08 +02:00
parent 42b42e796d
commit 2e3029a5d9
6 changed files with 80 additions and 43 deletions

View File

@@ -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.archetype.Plugin;
import com.bartek.esa.core.executor.PluginExecutor; import com.bartek.esa.core.executor.PluginExecutor;
import com.bartek.esa.core.model.object.Issue; 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.io.File;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Analyser { public abstract class Analyser {
private final FileProvider fileProvider;
private final PluginExecutor pluginExecutor; private final PluginExecutor pluginExecutor;
private final Set<Plugin> plugins; private final Set<Plugin> plugins;
@Inject public Analyser(PluginExecutor pluginExecutor, Set<Plugin> plugins) {
public Analyser(FileProvider fileProvider, PluginExecutor pluginExecutor, Set<Plugin> plugins) {
this.fileProvider = fileProvider;
this.pluginExecutor = pluginExecutor; this.pluginExecutor = pluginExecutor;
this.plugins = plugins; this.plugins = plugins;
@@ -34,28 +27,9 @@ public class Analyser {
return pluginExecutor.executeForFiles(manifest, files, selectedPlugins); return pluginExecutor.executeForFiles(manifest, files, selectedPlugins);
} }
private File getManifest(String source) { protected abstract File getManifest(String source);
Set<File> manifests = fileProvider.getGlobMatchedFiles(source, "**/AndroidManifest.xml");
if (manifests.isEmpty()) {
throw new EsaException("No AndroidManifest.xml file found. Interrupting...");
}
if (manifests.size() > 1) { protected abstract Set<File> getFiles(String source);
throw new EsaException("Found multiple AndroidManifest.xml files. Interrupting...");
}
return (File) (manifests.toArray())[0];
}
private Set<File> getFiles(String source) {
Set<File> javaFiles = fileProvider.getGlobMatchedFiles(source, "**/*.java");
Set<File> androidManifest = fileProvider.getGlobMatchedFiles(source, "**/AndroidManifest.xml");
Set<File> layoutFiles = fileProvider.getGlobMatchedFiles(source, "**/res/layout*/**.xml");
return Stream.of(javaFiles, androidManifest, layoutFiles)
.flatMap(Set::stream)
.collect(Collectors.toSet());
}
private Set<Plugin> getPlugins(Set<String> pluginCodes, Set<String> excludeCodes) { private Set<Plugin> getPlugins(Set<String> pluginCodes, Set<String> excludeCodes) {
Set<Plugin> outputPlugins = plugins; Set<Plugin> outputPlugins = plugins;

View File

@@ -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<Plugin> plugins, FileProvider fileProvider) {
return new SourceAnalyser(pluginExecutor, plugins, fileProvider);
}
}

View File

@@ -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<Plugin> plugins, FileProvider fileProvider) {
super(pluginExecutor, plugins);
this.fileProvider = fileProvider;
}
@Override
protected File getManifest(String source) {
Set<File> 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<File> getFiles(String source) {
Set<File> javaFiles = fileProvider.getGlobMatchedFilesRecursively(source, "**/*.java");
System.out.println(javaFiles);
Set<File> layoutFiles = fileProvider.getGlobMatchedFilesRecursively(source, "**/res/layout*/**.xml");
System.out.println(layoutFiles);
Set<File> androidManifest = Collections.singleton(getManifest(source));
System.out.println(androidManifest);
return Stream.of(javaFiles, androidManifest, layoutFiles)
.flatMap(Set::stream)
.collect(Collectors.toSet());
}
}

View File

@@ -1,17 +1,12 @@
package com.bartek.esa.core.di; 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.desc.provider.DescriptionProvider;
import com.bartek.esa.core.executor.PluginExecutor; import com.bartek.esa.core.executor.PluginExecutor;
import com.bartek.esa.core.java.JavaSyntaxRegexProvider; import com.bartek.esa.core.java.JavaSyntaxRegexProvider;
import com.bartek.esa.core.xml.XmlHelper; import com.bartek.esa.core.xml.XmlHelper;
import com.bartek.esa.file.provider.FileProvider;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import java.util.Set;
@Module @Module
public class CoreModule { public class CoreModule {
@@ -34,9 +29,4 @@ public class CoreModule {
public XmlHelper xmlHelper() { public XmlHelper xmlHelper() {
return new XmlHelper(); return new XmlHelper();
} }
@Provides
public Analyser analyser(FileProvider fileProvider, PluginExecutor pluginExecutor, Set<Plugin> plugins) {
return new Analyser(fileProvider, pluginExecutor, plugins);
}
} }

View File

@@ -1,6 +1,7 @@
package com.bartek.esa.di; package com.bartek.esa.di;
import com.bartek.esa.EsaMain; import com.bartek.esa.EsaMain;
import com.bartek.esa.analyser.di.AnalyserModule;
import com.bartek.esa.cli.di.CliModule; import com.bartek.esa.cli.di.CliModule;
import com.bartek.esa.core.di.CoreModule; import com.bartek.esa.core.di.CoreModule;
import com.bartek.esa.core.di.PluginModule; import com.bartek.esa.core.di.PluginModule;
@@ -15,7 +16,8 @@ import dagger.Component;
FileModule.class, FileModule.class,
DecompilerModule.class, DecompilerModule.class,
CoreModule.class, CoreModule.class,
PluginModule.class PluginModule.class,
AnalyserModule.class
}) })
public interface DependencyInjector { public interface DependencyInjector {
EsaMain esa(); EsaMain esa();

View File

@@ -27,7 +27,7 @@ public class FileProvider {
.toFile(); .toFile();
} }
public Set<File> getGlobMatchedFiles(String path, String globPattern) { public Set<File> getGlobMatchedFilesRecursively(String path, String globPattern) {
return Try.of(() -> Files.walk(Paths.get(path)) return Try.of(() -> Files.walk(Paths.get(path))
.filter(p -> globMatcher.pathMatchesGlobPattern(p, globPattern)) .filter(p -> globMatcher.pathMatchesGlobPattern(p, globPattern))
.map(Path::toFile) .map(Path::toFile)