Browse Source

Improve code according to review

Dominik Fuchß 4 years ago
parent
commit
6b64bac9e0

+ 4 - 4
jplag.cli/src/main/java/de/jplag/CLI.java

@@ -155,11 +155,11 @@ public final class CLI {
         addAllMultiValueArgument(OLD_DIRECTORY.getListFrom(namespace), oldSubmissionDirectories);
 
         var language = LanguageLoader.getLanguage(LANGUAGE.getFrom(namespace)).orElseThrow();
-        var comparisonMode = ComparisonMode.fromName(COMPARISON_MODE.getFrom(namespace));
-        if (comparisonMode.isEmpty()) {
+        var comparisonModeOptional = ComparisonMode.fromName(COMPARISON_MODE.getFrom(namespace));
+        if (comparisonModeOptional.isEmpty()) {
             logger.warn("Unknown comparison mode, using default mode!");
-            comparisonMode = Optional.of(JPlagOptions.DEFAULT_COMPARISON_MODE);
         }
+        var comparisonMode = comparisonModeOptional.orElse(JPlagOptions.DEFAULT_COMPARISON_MODE);
 
         ClusteringOptions.Builder clusteringBuilder = new ClusteringOptions.Builder();
         Optional.ofNullable((Boolean) CLUSTER_DISABLE.getFrom(namespace)).ifPresent(disabled -> clusteringBuilder.enabled(!disabled));
@@ -195,7 +195,7 @@ public final class CLI {
 
         return new JPlagOptions( //
                 language, //
-                comparisonMode.orElseThrow(), //
+                comparisonMode, //
                 DEBUG.getFrom(namespace), //
                 Arrays.stream(fileSuffixes).toList(), //
                 SIMILARITY_THRESHOLD.getFrom(namespace), //

+ 18 - 15
jplag/src/main/java/de/jplag/options/JPlagOptions.java

@@ -84,14 +84,14 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
         this.language = language;
         this.comparisonMode = comparisonMode;
         this.debugParser = debugParser;
-        this.fileSuffixes = fileSuffixes == null ? null : fileSuffixes.stream().toList();
-        this.similarityThreshold = fixSimilarityThreshold(similarityThreshold);
-        this.maximumNumberOfComparisons = fixMaximumNumberOfComparisons(maximumNumberOfComparisons);
+        this.fileSuffixes = fileSuffixes == null ? null : Collections.unmodifiableList(fileSuffixes);
+        this.similarityThreshold = normalizeSimilarityThreshold(similarityThreshold);
+        this.maximumNumberOfComparisons = normalizeMaximumNumberOfComparisons(maximumNumberOfComparisons);
         this.similarityMetric = similarityMetric;
-        this.minimumTokenMatch = minimumTokenMatch;
+        this.minimumTokenMatch = normalizeMinimumTokenMatch(minimumTokenMatch);
         this.exclusionFileName = exclusionFileName;
-        this.submissionDirectories = submissionDirectories == null ? null : submissionDirectories.stream().toList();
-        this.oldSubmissionDirectories = oldSubmissionDirectories == null ? null : oldSubmissionDirectories.stream().toList();
+        this.submissionDirectories = submissionDirectories == null ? null : Collections.unmodifiableList(submissionDirectories);
+        this.oldSubmissionDirectories = oldSubmissionDirectories == null ? null : Collections.unmodifiableList(oldSubmissionDirectories);
         this.baseCodeSubmissionName = baseCodeSubmissionName;
         this.subdirectoryName = subdirectoryName;
         this.verbosity = verbosity;
@@ -123,14 +123,14 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
     }
 
     public JPlagOptions withSimilarityThreshold(float similarityThreshold) {
-        return new JPlagOptions(language, comparisonMode, debugParser, fileSuffixes, fixSimilarityThreshold(similarityThreshold),
+        return new JPlagOptions(language, comparisonMode, debugParser, fileSuffixes, normalizeSimilarityThreshold(similarityThreshold),
                 maximumNumberOfComparisons, similarityMetric, minimumTokenMatch, exclusionFileName, submissionDirectories, oldSubmissionDirectories,
                 baseCodeSubmissionName, subdirectoryName, verbosity, clusteringOptions);
     }
 
     public JPlagOptions withMaximumNumberOfComparisons(Integer maximumNumberOfComparisons) {
         return new JPlagOptions(language, comparisonMode, debugParser, fileSuffixes, similarityThreshold,
-                fixMaximumNumberOfComparisons(maximumNumberOfComparisons), similarityMetric, minimumTokenMatch, exclusionFileName,
+                normalizeMaximumNumberOfComparisons(maximumNumberOfComparisons), similarityMetric, minimumTokenMatch, exclusionFileName,
                 submissionDirectories, oldSubmissionDirectories, baseCodeSubmissionName, subdirectoryName, verbosity, clusteringOptions);
     }
 
@@ -202,7 +202,7 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
         var language = language();
         if (fileSuffixes == null && language != null)
             return Arrays.stream(language.suffixes()).toList();
-        return fileSuffixes == null ? null : fileSuffixes.stream().toList();
+        return fileSuffixes == null ? null : Collections.unmodifiableList(fileSuffixes);
     }
 
     /**
@@ -224,18 +224,17 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
 
     @Override
     public Integer minimumTokenMatch() {
-        Integer fixedMinimumTokenMatch = (minimumTokenMatch != null && minimumTokenMatch < 1) ? Integer.valueOf(1) : minimumTokenMatch;
         var language = language();
-        if (fixedMinimumTokenMatch == null && language != null)
+        if (minimumTokenMatch == null && language != null)
             return language.minimumTokenMatch();
-        return fixedMinimumTokenMatch;
+        return minimumTokenMatch;
     }
 
     private Set<String> readExclusionFile(final String exclusionFileName) {
         try (BufferedReader reader = new BufferedReader(new FileReader(exclusionFileName, JPlagOptions.CHARSET))) {
             final var excludedFileNames = reader.lines().collect(Collectors.toSet());
             if (verbosity() == LONG) {
-                logger.info("Excluded files:\n" + String.join("\n", excludedFileNames);
+                logger.info("Excluded files:\n" + String.join("\n", excludedFileNames));
             }
             return excludedFileNames;
         } catch (IOException e) {
@@ -244,7 +243,7 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
         }
     }
 
-    private static float fixSimilarityThreshold(float similarityThreshold) {
+    private static float normalizeSimilarityThreshold(float similarityThreshold) {
         if (similarityThreshold > 100) {
             logger.warn("Maximum threshold of 100 used instead of {}", similarityThreshold);
             return 100;
@@ -256,7 +255,11 @@ public record JPlagOptions(Language language, ComparisonMode comparisonMode, boo
         }
     }
 
-    private Integer fixMaximumNumberOfComparisons(Integer maximumNumberOfComparisons) {
+    private Integer normalizeMaximumNumberOfComparisons(Integer maximumNumberOfComparisons) {
         return maximumNumberOfComparisons == null ? null : Math.max(maximumNumberOfComparisons, SHOW_ALL_COMPARISONS);
     }
+
+    private Integer normalizeMinimumTokenMatch(Integer minimumTokenMatch) {
+        return (minimumTokenMatch != null && minimumTokenMatch < 1) ? Integer.valueOf(1) : minimumTokenMatch;
+    }
 }