Browse Source

Update language loading

Dominik Fuchß 4 years ago
parent
commit
af5ca21d1a

+ 1 - 2
jplag.cli/src/main/java/de/jplag/CLI.java

@@ -112,8 +112,7 @@ public class CLI {
         addAllMultiValueArgument(NEW_DIRECTORY.getListFrom(namespace), submissionDirectories);
         addAllMultiValueArgument(OLD_DIRECTORY.getListFrom(namespace), oldSubmissionDirectories);
 
-        Language language = LanguageLoader.loadLanguage(LANGUAGE.getFrom(namespace)).orElseThrow();
-        JPlagOptions options = new JPlagOptions(submissionDirectories, oldSubmissionDirectories, language);
+        JPlagOptions options = new JPlagOptions(submissionDirectories, oldSubmissionDirectories, LANGUAGE.getFrom(namespace));
         options.setBaseCodeSubmissionName(BASE_CODE.getFrom(namespace));
         options.setVerbosity(Verbosity.fromOption(VERBOSITY.getFrom(namespace)));
         options.setDebugParser(DEBUG.getFrom(namespace));

+ 6 - 7
jplag/src/main/java/de/jplag/JPlag.java

@@ -44,7 +44,7 @@ public class JPlag {
         this.options = options;
         errorCollector = new ErrorCollector(options);
         coreAlgorithm = new GreedyStringTiling(options);
-        language = initializeLanguage();
+        language = initializeLanguage(this.options, this.errorCollector);
         comparisonStrategy = initializeComparisonStrategy(options.getComparisonMode());
         excludedFileNames = Optional.ofNullable(this.options.getExclusionFileName()).map(this::readExclusionFile).orElse(Collections.emptySet());
         options.setExcludedFiles(excludedFileNames); // store for report
@@ -105,13 +105,12 @@ public class JPlag {
         };
     }
 
-    private Language initializeLanguage() {
-        Language uninitializedLanguage = this.options.getLanguage();
-
+    private static Language initializeLanguage(JPlagOptions options, ErrorConsumer errorCollector) {
+        Language uninitializedLanguage = LanguageLoader.loadLanguage(options.getLanguageShortName()).orElseThrow();
         Language language = uninitializedLanguage.initializeLanguage(errorCollector);
-        this.options.setLanguage(language);
-        this.options.setLanguageDefaults(language);
-        logger.info("Initialized language " + language.getName());
+        options.setLanguage(language);
+        options.setLanguageDefaults(language);
+        logger.info("Initialized language {}", language.getName());
         return language;
     }
 }

+ 11 - 2
jplag/src/main/java/de/jplag/options/JPlagOptions.java

@@ -29,6 +29,11 @@ public class JPlagOptions {
 
     public static final Charset CHARSET = StandardCharsets.UTF_8;
 
+    /**
+     * The short name of the language used to parse the submissions.
+     */
+    private String languageShortName;
+
     /**
      * Language used to parse the submissions.
      */
@@ -131,10 +136,10 @@ public class JPlagOptions {
     /**
      * Constructor with required attributes.
      */
-    public JPlagOptions(List<String> submissionDirectories, List<String> oldSubmissionDirectories, Language language) {
+    public JPlagOptions(List<String> submissionDirectories, List<String> oldSubmissionDirectories, String languageShortName) {
         this.submissionDirectories = submissionDirectories;
         this.oldSubmissionDirectories = oldSubmissionDirectories;
-        this.language = language;
+        this.languageShortName = languageShortName;
     }
 
     public Optional<String> getBaseCodeSubmissionName() {
@@ -157,6 +162,10 @@ public class JPlagOptions {
         return fileSuffixes;
     }
 
+    public String getLanguageShortName() {
+        return languageShortName;
+    }
+
     public Language getLanguage() {
         return language;
     }

+ 1 - 1
jplag/src/test/java/de/jplag/TestBase.java

@@ -45,7 +45,7 @@ public abstract class TestBase {
     }
 
     protected JPlagResult runJPlag(List<String> newPaths, List<String> oldPaths, Consumer<JPlagOptions> customization) throws ExitException {
-        JPlagOptions options = new JPlagOptions(newPaths, oldPaths, LanguageLoader.loadLanguage(JPlagOptions.DEFAULT_LANGUAGE).orElseThrow());
+        JPlagOptions options = new JPlagOptions(newPaths, oldPaths, JPlagOptions.DEFAULT_LANGUAGE);
         options.setVerbosity(Verbosity.LONG);
         customization.accept(options);
         JPlag jplag = new JPlag(options);