9: Replace all List<Issue>s with Set<Issue>s

This commit is contained in:
Bartłomiej Pluta
2019-04-04 10:18:45 +02:00
parent 8b565ad972
commit 7358569eab
10 changed files with 28 additions and 31 deletions

View File

@@ -12,7 +12,7 @@ import com.bartek.esa.dispatcher.model.DispatcherActions;
import com.bartek.esa.formatter.provider.FormatterProvider;
import javax.inject.Inject;
import java.util.List;
import java.util.Set;
public class EsaMain {
private final CliArgsParser cliArgsParser;
@@ -37,13 +37,13 @@ public class EsaMain {
.build();
CliArgsOptions options = cliArgsParser.parse(args);
List<Issue> issues = methodDispatcher.dispatchMethod(options, dispatcherActions);
Set<Issue> issues = methodDispatcher.dispatchMethod(options, dispatcherActions);
formatterProvider.provide(options).format(issues);
exitWithErrorIfAnyIssueIsAnError(issues);
}
private void exitWithErrorIfAnyIssueIsAnError(List<Issue> issues) {
private void exitWithErrorIfAnyIssueIsAnError(Set<Issue> issues) {
if(issues.stream().anyMatch(i -> i.getSeverity() == Severity.ERROR)) {
System.exit(1);
}

View File

@@ -8,7 +8,6 @@ import com.bartek.esa.file.provider.FileProvider;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -25,13 +24,13 @@ public abstract class Analyser {
this.fileProvider = fileProvider;
}
public List<Issue> analyse(String source, Set<String> pluginCodes, Set<String> excludeCodes) {
public Set<Issue> analyse(String source, Set<String> pluginCodes, Set<String> excludeCodes) {
String newSource = prepareSources(source);
File manifest = getManifest(newSource);
Set<File> files = getFiles(newSource);
Set<Plugin> selectedPlugins = getPlugins(pluginCodes, excludeCodes);
List<Issue> issues = pluginExecutor.executeForFiles(manifest, files, selectedPlugins);
Set<Issue> issues = pluginExecutor.executeForFiles(manifest, files, selectedPlugins);
performCleaning(newSource);
return issues;
}

View File

@@ -5,11 +5,11 @@ import com.bartek.esa.core.model.object.Issue;
import org.w3c.dom.Document;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
public abstract class BasePlugin implements Plugin {
private List<Issue> issues = new ArrayList<>();
private Set<Issue> issues = new HashSet<>();
private Document manifest;
private File file;
@@ -21,7 +21,7 @@ public abstract class BasePlugin implements Plugin {
}
@Override
public List<Issue> runForIssues() {
public Set<Issue> runForIssues() {
run(file);
return issues;
}

View File

@@ -4,10 +4,10 @@ import com.bartek.esa.core.model.object.Issue;
import org.w3c.dom.Document;
import java.io.File;
import java.util.List;
import java.util.Set;
public interface Plugin {
boolean supports(File file);
void update(File file, Document manifest);
List<Issue> runForIssues();
Set<Issue> runForIssues();
}

View File

@@ -7,10 +7,9 @@ import org.w3c.dom.Document;
import javax.inject.Inject;
import java.io.File;
import java.util.List;
import java.util.Set;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
public class PluginExecutor {
private final XmlHelper xmlHelper;
@@ -20,20 +19,20 @@ public class PluginExecutor {
this.xmlHelper = xmlHelper;
}
public List<Issue> executeForFiles(File manifest, Set<File> files, Set<Plugin> plugins) {
public Set<Issue> executeForFiles(File manifest, Set<File> files, Set<Plugin> plugins) {
return files.stream()
.map(file -> executeForFile(manifest, file, plugins))
.flatMap(List::stream)
.collect(toList());
.flatMap(Set::stream)
.collect(toSet());
}
private List<Issue> executeForFile(File manifest, File file, Set<Plugin> plugins) {
private Set<Issue> executeForFile(File manifest, File file, Set<Plugin> plugins) {
Document xmlManifest = xmlHelper.parseXml(manifest);
return plugins.stream()
.peek(plugin -> plugin.update(file, xmlManifest))
.filter(plugin -> plugin.supports(file))
.map(Plugin::runForIssues)
.flatMap(List::stream)
.collect(toList());
.flatMap(Set::stream)
.collect(toSet());
}
}

View File

@@ -6,7 +6,7 @@ import com.bartek.esa.dispatcher.model.DispatcherActions;
import javax.inject.Inject;
import java.util.Collections;
import java.util.List;
import java.util.Set;
public class MethodDispatcher {
@@ -15,7 +15,7 @@ public class MethodDispatcher {
}
public List<Issue> dispatchMethod(CliArgsOptions options, DispatcherActions actions) {
public Set<Issue> dispatchMethod(CliArgsOptions options, DispatcherActions actions) {
if(options.isSourceAnalysis()) {
return actions.getSourceAnalysis().perform(
options.getSourceAnalysisDirectory(),
@@ -32,6 +32,6 @@ public class MethodDispatcher {
);
}
return Collections.emptyList();
return Collections.emptySet();
}
}

View File

@@ -2,11 +2,10 @@ package com.bartek.esa.dispatcher.model;
import com.bartek.esa.core.model.object.Issue;
import java.util.List;
import java.util.Set;
@FunctionalInterface
public interface Action {
List<Issue> perform(String source, Set<String> plugins, Set<String> excludes);
Set<Issue> perform(String source, Set<String> plugins, Set<String> excludes);
}

View File

@@ -2,8 +2,8 @@ package com.bartek.esa.formatter.archetype;
import com.bartek.esa.core.model.object.Issue;
import java.util.List;
import java.util.Set;
public interface Formatter {
void format(List<Issue> issues);
void format(Set<Issue> issues);
}

View File

@@ -7,8 +7,8 @@ import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import static org.fusesource.jansi.Ansi.Color.*;
@@ -24,7 +24,7 @@ public class ColorFormatter implements Formatter {
}
@Override
public void format(List<Issue> issues) {
public void format(Set<Issue> issues) {
AnsiConsole.systemInstall();
if(issues.isEmpty()) {
Ansi noIssuesFound = ansi().fg(GREEN).a("No issues found.").reset();

View File

@@ -5,8 +5,8 @@ import com.bartek.esa.core.model.object.Issue;
import com.bartek.esa.formatter.archetype.Formatter;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
public class SimpleFormatter implements Formatter {
@@ -18,7 +18,7 @@ public class SimpleFormatter implements Formatter {
}
@Override
public void format(List<Issue> issues) {
public void format(Set<Issue> issues) {
if(issues.isEmpty()) {
System.out.println("No issues found.");
return;