diff --git a/autograder-cmd/src/main/java/de/firemage/autograder/cmd/Application.java b/autograder-cmd/src/main/java/de/firemage/autograder/cmd/Application.java
index a729942a..11122a70 100644
--- a/autograder-cmd/src/main/java/de/firemage/autograder/cmd/Application.java
+++ b/autograder-cmd/src/main/java/de/firemage/autograder/cmd/Application.java
@@ -5,16 +5,16 @@
import de.firemage.autograder.cmd.output.Annotation;
import de.firemage.autograder.core.ArtemisUtil;
import de.firemage.autograder.core.CheckConfiguration;
-import de.firemage.autograder.utils.CodePosition;
+import de.firemage.autograder.core.CodePosition;
import de.firemage.autograder.core.Linter;
import de.firemage.autograder.core.LinterConfigurationException;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LinterStatus;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LinterStatus;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.compiler.CompilationFailureException;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.compiler.CompilationFailureException;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import de.firemage.autograder.span.Formatter;
import de.firemage.autograder.span.Highlight;
import de.firemage.autograder.span.Position;
diff --git a/autograder-core/pom.xml b/autograder-core/pom.xml
index 8870848f..d0ccc2ef 100644
--- a/autograder-core/pom.xml
+++ b/autograder-core/pom.xml
@@ -15,11 +15,6 @@
https://github.com/Feuermagier/autograder/autograder-core
-
- de.firemage.autograder
- autograder-utils
-
-
fr.inria.gforge.spoon
@@ -63,6 +58,13 @@
${slf4j.version}
+
+
+ com.github.albfernandez
+ juniversalchardet
+ 2.5.0
+
+
net.xyzsd.fluent
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/CodeLinter.java b/autograder-core/src/main/java/de/firemage/autograder/core/CodeLinter.java
index bb321b77..d8cbddf9 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/CodeLinter.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/CodeLinter.java
@@ -1,9 +1,8 @@
package de.firemage.autograder.core;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.LinterStatus;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import java.io.IOException;
import java.util.List;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/CodeModel.java b/autograder-core/src/main/java/de/firemage/autograder/core/CodeModel.java
similarity index 96%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/CodeModel.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/CodeModel.java
index f34c163f..2872555f 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/CodeModel.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/CodeModel.java
@@ -1,10 +1,10 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.ModelBuildException;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.ModelBuildException;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.Launcher;
import spoon.compiler.Environment;
import spoon.compiler.ModelBuildingException;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/CodePosition.java b/autograder-core/src/main/java/de/firemage/autograder/core/CodePosition.java
similarity index 94%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/CodePosition.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/CodePosition.java
index 6a9d4323..e7346da9 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/CodePosition.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/CodePosition.java
@@ -1,7 +1,7 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.SourcePath;
import spoon.reflect.code.CtAbstractSwitch;
import spoon.reflect.code.CtLoop;
import spoon.reflect.cu.SourcePosition;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/JavaVersion.java b/autograder-core/src/main/java/de/firemage/autograder/core/JavaVersion.java
similarity index 97%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/JavaVersion.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/JavaVersion.java
index 8fc2b81e..949383df 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/JavaVersion.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/JavaVersion.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
import java.util.Arrays;
import java.util.Comparator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/Linter.java b/autograder-core/src/main/java/de/firemage/autograder/core/Linter.java
index 85b11468..ec96c8b2 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/Linter.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/Linter.java
@@ -2,12 +2,8 @@
import de.firemage.autograder.core.check.Check;
import de.firemage.autograder.core.check.ExecutableCheck;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LinterStatus;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.Translatable;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import de.firemage.autograder.core.parallel.AnalysisResult;
import de.firemage.autograder.core.parallel.AnalysisScheduler;
import fluent.bundle.FluentBundle;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/LinterConfigurationException.java b/autograder-core/src/main/java/de/firemage/autograder/core/LinterConfigurationException.java
index 92b5ca0c..b85e8b4b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/LinterConfigurationException.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/LinterConfigurationException.java
@@ -1,7 +1,5 @@
package de.firemage.autograder.core;
-import de.firemage.autograder.utils.LinterException;
-
public class LinterConfigurationException extends LinterException {
public LinterConfigurationException(String message) {
super(message);
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/LinterException.java b/autograder-core/src/main/java/de/firemage/autograder/core/LinterException.java
similarity index 90%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/LinterException.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/LinterException.java
index 551b69fc..2ae2dc19 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/LinterException.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/LinterException.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
public class LinterException extends Exception {
public LinterException() {
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/LinterStatus.java b/autograder-core/src/main/java/de/firemage/autograder/core/LinterStatus.java
similarity index 94%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/LinterStatus.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/LinterStatus.java
index 9287baec..f2adc24e 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/LinterStatus.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/LinterStatus.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
public enum LinterStatus {
COMPILING(new LocalizedMessage("status-compiling")),
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/LocalizedMessage.java b/autograder-core/src/main/java/de/firemage/autograder/core/LocalizedMessage.java
similarity index 90%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/LocalizedMessage.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/LocalizedMessage.java
index 1fe5c4b3..6613f42b 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/LocalizedMessage.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/LocalizedMessage.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
import fluent.bundle.FluentBundle;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/MultiInCodeProblem.java b/autograder-core/src/main/java/de/firemage/autograder/core/MultiInCodeProblem.java
index 73fe3c5a..efbcfeef 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/MultiInCodeProblem.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/MultiInCodeProblem.java
@@ -1,9 +1,6 @@
package de.firemage.autograder.core;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
-import de.firemage.autograder.utils.Translatable;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.SourcePath;
import org.apache.commons.io.FilenameUtils;
import java.util.Collection;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/Problem.java b/autograder-core/src/main/java/de/firemage/autograder/core/Problem.java
index 3434fb2a..dcbc3170 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/Problem.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/Problem.java
@@ -1,8 +1,6 @@
package de.firemage.autograder.core;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.Translatable;
public interface Problem {
Check getCheck();
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/ProblemImpl.java b/autograder-core/src/main/java/de/firemage/autograder/core/ProblemImpl.java
index c92d8af6..df6eec99 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/ProblemImpl.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/ProblemImpl.java
@@ -1,8 +1,6 @@
package de.firemage.autograder.core;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.Translatable;
/**
* Contains the default implementation of most {@link Problem} methods.
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/SerializableCharset.java b/autograder-core/src/main/java/de/firemage/autograder/core/SerializableCharset.java
similarity index 94%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/SerializableCharset.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/SerializableCharset.java
index 94583822..04e3d127 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/SerializableCharset.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/SerializableCharset.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.file.SourceInfo;
import java.io.Serializable;
import java.nio.charset.Charset;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/Translatable.java b/autograder-core/src/main/java/de/firemage/autograder/core/Translatable.java
similarity index 77%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/Translatable.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/Translatable.java
index 34d95e3b..e17ced4b 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/Translatable.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/Translatable.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core;
import fluent.bundle.FluentBundle;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/Check.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/Check.java
index d38200f0..10cfc47a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/Check.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/Check.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.check;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.MultiInCodeProblem;
import java.util.ArrayList;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/AvoidStringConcat.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/AvoidStringConcat.java
index 958facae..85f60273 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/AvoidStringConcat.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/AvoidStringConcat.java
@@ -1,16 +1,10 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import spoon.processing.AbstractProcessor;
-import spoon.reflect.code.CtInvocation;
-
-import java.util.Map;
@ExecutableCheck(reportedProblems = { ProblemType.AVOID_STRING_CONCAT })
public class AvoidStringConcat extends IntegratedCheck {
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CharRange.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CharRange.java
index 135febfd..e50bb9d3 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CharRange.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CharRange.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.CtRange;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import org.apache.commons.lang3.Range;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CheckIterableDuplicates.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CheckIterableDuplicates.java
index a55650cb..4e7d572a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CheckIterableDuplicates.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CheckIterableDuplicates.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtBreak;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionAddAll.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionAddAll.java
index 805fc717..4b43cc6a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionAddAll.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionAddAll.java
@@ -1,14 +1,14 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
import de.firemage.autograder.core.check.api.UseEnumValues.CtEnumFieldRead;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.CtBlock;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtForEach;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionsNCopies.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionsNCopies.java
index 10fda7b8..8d9b82e8 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionsNCopies.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/CollectionsNCopies.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.ForLoopRange;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtFor;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/EqualsHashCodeComparableContract.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/EqualsHashCodeComparableContract.java
index ae2715b1..19831b80 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/EqualsHashCodeComparableContract.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/EqualsHashCodeComparableContract.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/ImplementComparable.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/ImplementComparable.java
index 4ae81946..e5c732b8 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/ImplementComparable.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/ImplementComparable.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtType;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/IsEmptyReimplementationCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/IsEmptyReimplementationCheck.java
index 22e324f4..dd471cb1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/IsEmptyReimplementationCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/IsEmptyReimplementationCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtBinaryOperator;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/MathReimplementation.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/MathReimplementation.java
index 4a5a488b..bcbe746c 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/MathReimplementation.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/MathReimplementation.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OldCollectionCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OldCollectionCheck.java
index b4a1d246..efd89749 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OldCollectionCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OldCollectionCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OptionalBadPractices.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OptionalBadPractices.java
index fe2e4d6c..3c92d244 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OptionalBadPractices.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/OptionalBadPractices.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/SimplifyArraysFill.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/SimplifyArraysFill.java
index fc3dac38..b36b97e4 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/SimplifyArraysFill.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/SimplifyArraysFill.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtFieldAccess;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/StringRepeat.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/StringRepeat.java
index 4d71ba6c..559a3286 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/StringRepeat.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/StringRepeat.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
@@ -8,7 +8,7 @@
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArrayCopy.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArrayCopy.java
index 0551d44a..ba294d68 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArrayCopy.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArrayCopy.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArraysFill.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArraysFill.java
index 008a6d6f..0566a57f 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArraysFill.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseArraysFill.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.ForLoopRange;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtArrayWrite;
import spoon.reflect.code.CtAssignment;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEntrySet.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEntrySet.java
index 80b40541..7de9c4b4 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEntrySet.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEntrySet.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtForEach;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumCollection.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumCollection.java
index 1be6fc57..bf4a8022 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumCollection.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumCollection.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumValues.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumValues.java
index dc18cc68..beb3a2cb 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumValues.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseEnumValues.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseFormatString.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseFormatString.java
index f2cfaca6..eeb53779 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseFormatString.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseFormatString.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseModuloOperator.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseModuloOperator.java
index 61393b4a..6c185820 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseModuloOperator.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseModuloOperator.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseStringFormatted.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseStringFormatted.java
index d0e33c3d..5535447b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseStringFormatted.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseStringFormatted.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseSubList.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseSubList.java
index f5a40895..972a9e76 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseSubList.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/api/UseSubList.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.check.general.ForToForEachLoop;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/CommentedOutCodeCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/CommentedOutCodeCheck.java
index daf9540e..8bb70b99 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/CommentedOutCodeCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/CommentedOutCodeCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.Translatable;
+import de.firemage.autograder.core.Translatable;
import de.firemage.autograder.core.check.ExecutableCheck;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.SourcePath;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
import org.apache.commons.lang3.StringUtils;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/FieldJavadocCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/FieldJavadocCheck.java
index e2152e7c..9af70eb8 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/FieldJavadocCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/FieldJavadocCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/JavadocStubCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/JavadocStubCheck.java
index e85e0b8b..10c3ddca 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/JavadocStubCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/JavadocStubCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/MethodJavadocCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/MethodJavadocCheck.java
index 54bb7d3f..5f7a8fd6 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/MethodJavadocCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/MethodJavadocCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/ThrowsJavadocCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/ThrowsJavadocCheck.java
index b2dc262b..0d885560 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/ThrowsJavadocCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/ThrowsJavadocCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TodoComment.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TodoComment.java
index 0556da84..7162aab4 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TodoComment.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TodoComment.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TypeJavadocCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TypeJavadocCheck.java
index 3cc49302..6f6ab3c0 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TypeJavadocCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/TypeJavadocCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/UnnecessaryComment.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/UnnecessaryComment.java
index edd0626e..1406215f 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/UnnecessaryComment.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/comment/UnnecessaryComment.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ChainedIfCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ChainedIfCheck.java
index 2550b700..490c041a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ChainedIfCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ChainedIfCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ExtendsObjectCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ExtendsObjectCheck.java
index d695f21b..3365d5fe 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ExtendsObjectCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/ExtendsObjectCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultiThreading.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultiThreading.java
index 67496f7d..db0d5de1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultiThreading.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultiThreading.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultipleInlineStatements.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultipleInlineStatements.java
index 7b3d77a6..ada14131 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultipleInlineStatements.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/MultipleInlineStatements.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantAssignment.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantAssignment.java
index 30aab8b3..0bdb8ead 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantAssignment.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantAssignment.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.check.unnecessary.UnusedCodeElementCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtLocalVariable;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantBooleanEqual.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantBooleanEqual.java
index cb607e53..cd125f76 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantBooleanEqual.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantBooleanEqual.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantCatch.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantCatch.java
index e11c2430..ae55a869 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantCatch.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantCatch.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantConstructorCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantConstructorCheck.java
index 4652cc77..efc64761 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantConstructorCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantConstructorCheck.java
@@ -1,8 +1,8 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.Translatable;
+import de.firemage.autograder.core.Translatable;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantElse.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantElse.java
index 68f172ca..7d41af17 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantElse.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantElse.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantIfForBooleanCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantIfForBooleanCheck.java
index 3d60a7e8..479eda7a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantIfForBooleanCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantIfForBooleanCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantModifier.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantModifier.java
index 31bc34b1..0a8f18b9 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantModifier.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantModifier.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantNegationCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantNegationCheck.java
index b22e6741..761f1306 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantNegationCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantNegationCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantUninitializedVariable.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantUninitializedVariable.java
index 30ef0e24..02f2d813 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantUninitializedVariable.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantUninitializedVariable.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantVariable.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantVariable.java
index 0caa2ecc..6e98f2ea 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantVariable.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RedundantVariable.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.reflect.code.CtComment;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RepeatedMathOperationCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RepeatedMathOperationCheck.java
index ef0679ba..15425d75 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RepeatedMathOperationCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/RepeatedMathOperationCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/SelfAssignmentCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/SelfAssignmentCheck.java
index ca6e1e5f..257f8288 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/SelfAssignmentCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/SelfAssignmentCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TooManyExceptions.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TooManyExceptions.java
index fc2f8538..a3682f94 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TooManyExceptions.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TooManyExceptions.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtClass;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TryCatchComplexity.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TryCatchComplexity.java
index 91c65012..9a8c9e99 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TryCatchComplexity.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/TryCatchComplexity.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
import spoon.reflect.code.CtBlock;
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtCatch;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnnecessaryBoxing.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnnecessaryBoxing.java
index 7d8f755f..485eaec6 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnnecessaryBoxing.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnnecessaryBoxing.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnusedImport.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnusedImport.java
index 59b48183..5ec3d552 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnusedImport.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UnusedImport.java
@@ -1,14 +1,14 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.ElementUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.ElementUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.javadoc.api.elements.JavadocReference;
import spoon.javadoc.api.elements.JavadocVisitor;
import spoon.javadoc.api.parsing.JavadocParser;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UseOperatorAssignment.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UseOperatorAssignment.java
index be6e5156..69958075 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UseOperatorAssignment.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/UseOperatorAssignment.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/WrapperInstantiationCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/WrapperInstantiationCheck.java
index d2a3e853..43810917 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/WrapperInstantiationCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/complexity/WrapperInstantiationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtConstructorCall;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/AssertCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/AssertCheck.java
index 9e5745e8..cceec3e1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/AssertCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/AssertCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.debug;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/PrintStackTraceCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/PrintStackTraceCheck.java
index f726511a..6a18ef0a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/PrintStackTraceCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/debug/PrintStackTraceCheck.java
@@ -1,12 +1,11 @@
package de.firemage.autograder.core.check.debug;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtInvocation;
import spoon.reflect.code.CtVariableRead;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/CustomExceptionInheritanceCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/CustomExceptionInheritanceCheck.java
index e5d55117..1b674950 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/CustomExceptionInheritanceCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/CustomExceptionInheritanceCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionControlFlowCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionControlFlowCheck.java
index e3e8b3c9..1b8a6dbb 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionControlFlowCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionControlFlowCheck.java
@@ -1,12 +1,11 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.CtCatch;
import spoon.reflect.code.CtThrow;
import spoon.reflect.code.CtTry;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionMessageCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionMessageCheck.java
index b9d00eed..66b06335 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionMessageCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/ExceptionMessageCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtConstructorCall;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/NumberFormatExceptionIgnored.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/NumberFormatExceptionIgnored.java
index 87df839e..93a14ae5 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/NumberFormatExceptionIgnored.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/NumberFormatExceptionIgnored.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtCatch;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/RuntimeExceptionCatchCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/RuntimeExceptionCatchCheck.java
index 792072eb..d869bfa2 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/RuntimeExceptionCatchCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/exceptions/RuntimeExceptionCatchCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidLabels.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidLabels.java
index 14ec2f7b..6088eed2 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidLabels.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidLabels.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidRecompilingRegex.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidRecompilingRegex.java
index 348ebd25..e76c25bd 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidRecompilingRegex.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidRecompilingRegex.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidShadowing.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidShadowing.java
index 0c85e16b..28a3c5a3 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidShadowing.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/AvoidShadowing.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtConstructor;
import spoon.reflect.declaration.CtElement;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/BinaryOperator.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/BinaryOperator.java
index 4b45d253..30e858ea 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/BinaryOperator.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/BinaryOperator.java
@@ -1,12 +1,11 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareCharValue.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareCharValue.java
index 52989de2..3a8d4fe9 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareCharValue.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareCharValue.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareObjectsNotStringsCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareObjectsNotStringsCheck.java
index ef310432..b6611bf1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareObjectsNotStringsCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/CompareObjectsNotStringsCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/DoNotUseRawTypes.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/DoNotUseRawTypes.java
index 4e2ca0a3..4a0a93ba 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/DoNotUseRawTypes.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/DoNotUseRawTypes.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/FieldShouldBeFinal.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/FieldShouldBeFinal.java
index 2dacefaf..3c26bf07 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/FieldShouldBeFinal.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/FieldShouldBeFinal.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtStatement;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ForToForEachLoop.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ForToForEachLoop.java
index fa7d57e1..adc66880 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ForToForEachLoop.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ForToForEachLoop.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
@@ -8,9 +8,9 @@
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtArrayRead;
import spoon.reflect.code.CtBodyHolder;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ImportTypes.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ImportTypes.java
index dc4b22d0..b0a8b513 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ImportTypes.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ImportTypes.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeDoWhile.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeDoWhile.java
index ded69c41..0288a866 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeDoWhile.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeDoWhile.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeFor.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeFor.java
index d369e664..c9a8065c 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeFor.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/LoopShouldBeFor.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtAssignment;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/MagicString.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/MagicString.java
index 333ae7a3..683ac723 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/MagicString.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/MagicString.java
@@ -1,12 +1,11 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtLiteral;
import spoon.reflect.declaration.CtField;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ObjectDatatype.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ObjectDatatype.java
index 37b0adb3..ee5629c4 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ObjectDatatype.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ObjectDatatype.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtVariable;
import spoon.reflect.reference.CtTypeReference;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/OverrideAnnotationMissing.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/OverrideAnnotationMissing.java
index ccc9de5d..cb688b3b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/OverrideAnnotationMissing.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/OverrideAnnotationMissing.java
@@ -1,10 +1,10 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.StaticAnalysis;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtMethod;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ReassignedParameterCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ReassignedParameterCheck.java
index 5f1da5aa..10d2dc85 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ReassignedParameterCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ReassignedParameterCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ScannerClosedCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ScannerClosedCheck.java
index e7e08500..020dbb8e 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ScannerClosedCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/ScannerClosedCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/StringCompareCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/StringCompareCheck.java
index 9baab282..9797a971 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/StringCompareCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/StringCompareCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SuppressWarningsCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SuppressWarningsCheck.java
index fdb848cd..e035bbe1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SuppressWarningsCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SuppressWarningsCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SystemSpecificLineBreak.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SystemSpecificLineBreak.java
index 4503a6e7..bd3588db 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SystemSpecificLineBreak.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/SystemSpecificLineBreak.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UncheckedTypeCast.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UncheckedTypeCast.java
index e462891b..b2e9fc1b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UncheckedTypeCast.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UncheckedTypeCast.java
@@ -1,10 +1,10 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
-import de.firemage.autograder.utils.compiler.CompilationDiagnostic;
-import de.firemage.autograder.utils.compiler.CompilationResult;
+import de.firemage.autograder.core.compiler.CompilationDiagnostic;
+import de.firemage.autograder.core.compiler.CompilationResult;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseDifferentVisibility.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseDifferentVisibility.java
index 30dcb7f9..5c7618ee 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseDifferentVisibility.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseDifferentVisibility.java
@@ -1,14 +1,14 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.ElementUtil;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.ElementUtil;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.CtModel;
import spoon.reflect.declaration.CtElement;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseGuardClauses.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseGuardClauses.java
index a3ab022f..fad1850a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseGuardClauses.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/general/UseGuardClauses.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/BooleanIdentifierCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/BooleanIdentifierCheck.java
index b50ed591..92b4c97c 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/BooleanIdentifierCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/BooleanIdentifierCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.naming;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/ConstantsHaveDescriptiveNamesCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/ConstantsHaveDescriptiveNamesCheck.java
index 05604985..3c92b084 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/ConstantsHaveDescriptiveNamesCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/ConstantsHaveDescriptiveNamesCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.naming;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtInvocation;
import spoon.reflect.code.CtLiteral;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/PackageNamingConvention.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/PackageNamingConvention.java
index a5d96631..86da3ab7 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/PackageNamingConvention.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/PackageNamingConvention.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.naming;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/TypesHaveDescriptiveNamesCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/TypesHaveDescriptiveNamesCheck.java
index b3e6e791..2ebca4f5 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/TypesHaveDescriptiveNamesCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/naming/TypesHaveDescriptiveNamesCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.naming;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/AvoidInnerClasses.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/AvoidInnerClasses.java
index 0bc44ec1..6aaf764c 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/AvoidInnerClasses.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/AvoidInnerClasses.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtType;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/CheckStaticBlocks.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/CheckStaticBlocks.java
index 2ff0abff..784c37be 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/CheckStaticBlocks.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/CheckStaticBlocks.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ClosedSetOfValues.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ClosedSetOfValues.java
index 558dad3c..7db604c9 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ClosedSetOfValues.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ClosedSetOfValues.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
@@ -8,7 +8,7 @@
import de.firemage.autograder.core.integrated.StaticAnalysis;
import de.firemage.autograder.core.integrated.effects.AssignmentEffect;
import de.firemage.autograder.core.integrated.effects.TerminalEffect;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.CtAbstractSwitch;
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ConcreteCollectionCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ConcreteCollectionCheck.java
index 9b414db2..d9458a0e 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ConcreteCollectionCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ConcreteCollectionCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtArrayAccess;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotMakeConstantsClasses.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotMakeConstantsClasses.java
index 51929789..4081d767 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotMakeConstantsClasses.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotMakeConstantsClasses.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtConstructorCall;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotUseSystemExit.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotUseSystemExit.java
index 3b726e3c..fc012f4b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotUseSystemExit.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/DoNotUseSystemExit.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/IOUISeparation.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/IOUISeparation.java
index 7fc27eb7..f3dd2105 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/IOUISeparation.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/IOUISeparation.java
@@ -1,14 +1,14 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.ElementUtil;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.ElementUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.CtModel;
import spoon.reflect.code.CtFieldRead;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InstanceOf.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InstanceOf.java
index 52febe2c..8a097a9a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InstanceOf.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InstanceOf.java
@@ -1,10 +1,10 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.StaticAnalysis;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InterfaceBadPractices.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InterfaceBadPractices.java
index 46e5e228..7b22f3d8 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InterfaceBadPractices.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/InterfaceBadPractices.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/LeakedCollectionCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/LeakedCollectionCheck.java
index 0714699d..1b764971 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/LeakedCollectionCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/LeakedCollectionCheck.java
@@ -1,15 +1,15 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
-import de.firemage.autograder.utils.Option;
+import de.firemage.autograder.core.check.utils.Option;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.ElementUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.ElementUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.reflect.code.CtAssignment;
import spoon.reflect.code.CtConstructorCall;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeAbstractCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeAbstractCheck.java
index 9ed69904..c28aa230 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeAbstractCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeAbstractCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeStatic.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeStatic.java
index 7664a37b..45e06a89 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeStatic.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MethodShouldBeStatic.java
@@ -1,10 +1,10 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.StaticAnalysis;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtExecutableReferenceExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MutableEnum.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MutableEnum.java
index dd4c0612..4babbb93 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MutableEnum.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/MutableEnum.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ShouldBeEnumAttribute.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ShouldBeEnumAttribute.java
index 31877242..5b9ace9f 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ShouldBeEnumAttribute.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/ShouldBeEnumAttribute.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/StaticFieldShouldBeInstanceCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/StaticFieldShouldBeInstanceCheck.java
index 5b1328cc..bc2ec9d4 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/StaticFieldShouldBeInstanceCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/StaticFieldShouldBeInstanceCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtField;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/UtilityClassCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/UtilityClassCheck.java
index 791d3561..a801445b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/UtilityClassCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/oop/UtilityClassCheck.java
@@ -1,12 +1,11 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtConstructor;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DefaultPackageCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DefaultPackageCheck.java
index e1cd7621..271d632a 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DefaultPackageCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DefaultPackageCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DuplicateCode.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DuplicateCode.java
index ee9874bb..5186bdd2 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DuplicateCode.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/DuplicateCode.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import de.firemage.autograder.core.integrated.structure.StructuralElement;
import de.firemage.autograder.core.integrated.structure.StructuralEqualsVisitor;
import spoon.processing.AbstractProcessor;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/TooFewPackagesCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/TooFewPackagesCheck.java
index de6159f9..85a6b227 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/TooFewPackagesCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/structure/TooFewPackagesCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/EmptyBlockCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/EmptyBlockCheck.java
index b179fd86..4d93d3d0 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/EmptyBlockCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/EmptyBlockCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.unnecessary;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
import spoon.reflect.code.CtBlock;
import spoon.reflect.code.CtCatch;
import spoon.reflect.code.CtComment;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/UnusedCodeElementCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/UnusedCodeElementCheck.java
index e6f5241a..eeaa98c1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/UnusedCodeElementCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/unnecessary/UnusedCodeElementCheck.java
@@ -1,16 +1,16 @@
package de.firemage.autograder.core.check.unnecessary;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.reflect.code.CtLambda;
import spoon.reflect.code.CtLocalVariable;
import spoon.reflect.declaration.CtConstructor;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/Option.java b/autograder-core/src/main/java/de/firemage/autograder/core/check/utils/Option.java
similarity index 97%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/Option.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/check/utils/Option.java
index e6ccee65..02d29906 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/Option.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/check/utils/Option.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core.check.utils;
import java.util.Iterator;
import java.util.Objects;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationDiagnostic.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationDiagnostic.java
similarity index 86%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationDiagnostic.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationDiagnostic.java
index 4793a9ab..1b08f722 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationDiagnostic.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationDiagnostic.java
@@ -1,8 +1,8 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.SourcePath;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.file.SourceInfo;
import javax.tools.Diagnostic;
import javax.tools.JavaFileObject;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationFailureException.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationFailureException.java
similarity index 81%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationFailureException.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationFailureException.java
index c0b244d8..c574a478 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationFailureException.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationFailureException.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
-import de.firemage.autograder.utils.LinterException;
+import de.firemage.autograder.core.LinterException;
import java.util.List;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationResult.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationResult.java
similarity index 74%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationResult.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationResult.java
index c8a3a489..1bc0435d 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/CompilationResult.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/CompilationResult.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
import java.nio.file.Path;
import java.util.List;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/Compiler.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/Compiler.java
similarity index 96%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/Compiler.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/Compiler.java
index 6fd40dd4..d4061afa 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/Compiler.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/Compiler.java
@@ -1,9 +1,9 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
-import de.firemage.autograder.utils.file.CompilationUnit;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
+import de.firemage.autograder.core.file.CompilationUnit;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.TempLocation;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/PhysicalFileObject.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/PhysicalFileObject.java
similarity index 93%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/PhysicalFileObject.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/PhysicalFileObject.java
index 2bf5a4ab..89e8f79e 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/PhysicalFileObject.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/PhysicalFileObject.java
@@ -1,8 +1,8 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
-import de.firemage.autograder.utils.SerializableCharset;
-import de.firemage.autograder.utils.file.CompilationUnit;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.CompilationUnit;
+import de.firemage.autograder.core.file.SourcePath;
+import de.firemage.autograder.core.SerializableCharset;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.NestingKind;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/SeparateBinaryFileManager.java b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/SeparateBinaryFileManager.java
similarity index 95%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/SeparateBinaryFileManager.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/compiler/SeparateBinaryFileManager.java
index ae92d3ca..8f172246 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/compiler/SeparateBinaryFileManager.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/compiler/SeparateBinaryFileManager.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.compiler;
+package de.firemage.autograder.core.compiler;
import javax.tools.FileObject;
import javax.tools.ForwardingJavaFileManager;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/CompilationUnit.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/CompilationUnit.java
similarity index 97%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/CompilationUnit.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/CompilationUnit.java
index 8af72ddb..be3db1df 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/CompilationUnit.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/CompilationUnit.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
import javax.tools.JavaFileObject;
import java.io.IOException;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/FileSourceInfo.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/FileSourceInfo.java
similarity index 95%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/FileSourceInfo.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/FileSourceInfo.java
index d02d5496..6e64527e 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/FileSourceInfo.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/FileSourceInfo.java
@@ -1,8 +1,8 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.SerializableCharset;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.compiler.PhysicalFileObject;
+import de.firemage.autograder.core.SerializableCharset;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.compiler.PhysicalFileObject;
import org.apache.commons.io.FileUtils;
import org.mozilla.universalchardet.UniversalDetector;
import org.slf4j.Logger;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourceInfo.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/SourceInfo.java
similarity index 97%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourceInfo.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/SourceInfo.java
index 7faf1d47..a06ef9b6 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourceInfo.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/SourceInfo.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import spoon.compiler.SpoonResource;
import java.io.IOException;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourcePath.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/SourcePath.java
similarity index 98%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourcePath.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/SourcePath.java
index c683ebc7..05d31daf 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/SourcePath.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/SourcePath.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
import java.io.Serializable;
import java.nio.file.Path;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/StringSourceInfo.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/StringSourceInfo.java
similarity index 98%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/StringSourceInfo.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/StringSourceInfo.java
index 0265e746..a5b1d5a1 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/StringSourceInfo.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/StringSourceInfo.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.apache.commons.io.FileUtils;
import spoon.compiler.SpoonResource;
import spoon.support.compiler.VirtualFile;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/TempLocation.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/TempLocation.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/TempLocation.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/TempLocation.java
index de0c09fd..35007e7f 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/TempLocation.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/TempLocation.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils;
+package de.firemage.autograder.core.file;
import org.apache.commons.io.FileUtils;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/UploadedFile.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/UploadedFile.java
similarity index 84%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/UploadedFile.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/UploadedFile.java
index 7bcc29eb..1343e155 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/UploadedFile.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/UploadedFile.java
@@ -1,13 +1,12 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LinterStatus;
-import de.firemage.autograder.utils.compiler.CompilationFailureException;
-import de.firemage.autograder.utils.compiler.CompilationResult;
-import de.firemage.autograder.utils.compiler.Compiler;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.integrated.ModelBuildException;
-import de.firemage.autograder.utils.TempLocation;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LinterStatus;
+import de.firemage.autograder.core.compiler.CompilationFailureException;
+import de.firemage.autograder.core.compiler.CompilationResult;
+import de.firemage.autograder.core.compiler.Compiler;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.integrated.ModelBuildException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/ZipFormatException.java b/autograder-core/src/main/java/de/firemage/autograder/core/file/ZipFormatException.java
similarity index 79%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/file/ZipFormatException.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/file/ZipFormatException.java
index bdd7181a..7055982d 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/file/ZipFormatException.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/file/ZipFormatException.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.LinterException;
+import de.firemage.autograder.core.LinterException;
// TODO: delete
public class ZipFormatException extends LinterException {
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CoreUtil.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CoreUtil.java
similarity index 88%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CoreUtil.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/CoreUtil.java
index 43c5d221..6c4d83cc 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CoreUtil.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CoreUtil.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import java.util.Arrays;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CtElementStream.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtElementStream.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CtElementStream.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtElementStream.java
index 70852bc0..a5b42e4d 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/CtElementStream.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtElementStream.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.reflect.declaration.CtElement;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtRange.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtRange.java
index f48c35ba..02bb33ff 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtRange.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/CtRange.java
@@ -1,6 +1,5 @@
package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.integrated.TypeUtil;
import org.apache.commons.lang3.Range;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ElementUtil.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ElementUtil.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ElementUtil.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/ElementUtil.java
index eb9ce197..29db3eec 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ElementUtil.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ElementUtil.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.processing.FactoryAccessor;
import spoon.reflect.cu.SourcePosition;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ForLoopRange.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ForLoopRange.java
index 0a82ce05..6842ef7d 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ForLoopRange.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ForLoopRange.java
@@ -1,7 +1,5 @@
package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedAnalysis.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedAnalysis.java
index 7afe6261..8b337c5b 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedAnalysis.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedAnalysis.java
@@ -1,12 +1,10 @@
package de.firemage.autograder.core.integrated;
import de.firemage.autograder.core.CodeLinter;
-import de.firemage.autograder.utils.LinterStatus;
+import de.firemage.autograder.core.LinterStatus;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
-import de.firemage.autograder.utils.integrated.CoreUtil;
-import de.firemage.autograder.utils.integrated.ElementUtil;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import spoon.reflect.CtModel;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedCheck.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedCheck.java
index 8f29f74e..0a38b2e9 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedCheck.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.CodePosition;
+import de.firemage.autograder.core.CodePosition;
import de.firemage.autograder.core.ProblemImpl;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.Translatable;
+import de.firemage.autograder.core.Translatable;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.file.SourceInfo;
import spoon.reflect.declaration.CtElement;
import java.util.ArrayList;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedInCodeProblem.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedInCodeProblem.java
index 1e8a570f..6b4faf88 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedInCodeProblem.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/IntegratedInCodeProblem.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.CodePosition;
+import de.firemage.autograder.core.CodePosition;
import de.firemage.autograder.core.ProblemImpl;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.Translatable;
+import de.firemage.autograder.core.Translatable;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.file.SourceInfo;
import spoon.reflect.declaration.CtElement;
public class IntegratedInCodeProblem extends ProblemImpl {
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodHierarchy.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodHierarchy.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodHierarchy.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodHierarchy.java
index 5dd3d31d..af0b8067 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodHierarchy.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodHierarchy.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.reflect.CtModel;
import spoon.reflect.code.CtLambda;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodUtil.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodUtil.java
similarity index 98%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodUtil.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodUtil.java
index 5e356b54..6d7a7145 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/MethodUtil.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/MethodUtil.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.reflect.code.CtConstructorCall;
import spoon.reflect.code.CtInvocation;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ModelBuildException.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ModelBuildException.java
similarity index 61%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ModelBuildException.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/ModelBuildException.java
index c6a1a89a..64a1f2d1 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/ModelBuildException.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/ModelBuildException.java
@@ -1,6 +1,6 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.LinterException;
+import de.firemage.autograder.core.LinterException;
public class ModelBuildException extends LinterException {
public ModelBuildException(String message, Throwable cause) {
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/SpoonUtil.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/SpoonUtil.java
index d061b7fd..71a35dd1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/SpoonUtil.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/SpoonUtil.java
@@ -8,9 +8,6 @@
import de.firemage.autograder.core.integrated.evaluator.fold.FoldUtils;
import de.firemage.autograder.core.integrated.evaluator.fold.InlineVariableRead;
import de.firemage.autograder.core.integrated.evaluator.fold.RemoveRedundantCasts;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
import org.apache.commons.io.FilenameUtils;
import spoon.reflect.CtModel;
import spoon.reflect.code.BinaryOperatorKind;
@@ -40,7 +37,6 @@
import spoon.reflect.declaration.CtNamedElement;
import spoon.reflect.declaration.CtParameter;
import spoon.reflect.declaration.CtType;
-import spoon.reflect.declaration.CtTypeMember;
import spoon.reflect.declaration.CtTypedElement;
import spoon.reflect.declaration.CtVariable;
import spoon.reflect.declaration.ModifierKind;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/StaticAnalysis.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/StaticAnalysis.java
index 275b49eb..a79d68f0 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/StaticAnalysis.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/StaticAnalysis.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.integrated;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.compiler.CompilationResult;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.compiler.CompilationResult;
import spoon.processing.Processor;
import spoon.reflect.CtModel;
import spoon.reflect.declaration.CtElement;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/TypeUtil.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/TypeUtil.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/TypeUtil.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/TypeUtil.java
index 2d5898d6..4432a084 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/TypeUtil.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/TypeUtil.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.reflect.declaration.CtType;
import spoon.reflect.declaration.CtTypeInformation;
diff --git a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/UsesFinder.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/UsesFinder.java
similarity index 99%
rename from autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/UsesFinder.java
rename to autograder-core/src/main/java/de/firemage/autograder/core/integrated/UsesFinder.java
index 2e14545a..68ef6199 100644
--- a/autograder-utils/src/main/java/de/firemage/autograder/utils/integrated/UsesFinder.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/UsesFinder.java
@@ -1,4 +1,4 @@
-package de.firemage.autograder.utils.integrated;
+package de.firemage.autograder.core.integrated;
import spoon.processing.FactoryAccessor;
import spoon.reflect.CtModel;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/evaluator/fold/RemoveRedundantCasts.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/evaluator/fold/RemoveRedundantCasts.java
index dfda35e2..e195daa1 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/evaluator/fold/RemoveRedundantCasts.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/evaluator/fold/RemoveRedundantCasts.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.integrated.evaluator.fold;
import de.firemage.autograder.core.integrated.SpoonUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.reflect.code.CtExpression;
import spoon.reflect.reference.CtTypeParameterReference;
import spoon.reflect.reference.CtTypeReference;
diff --git a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/structure/StructuralEqualsVisitor.java b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/structure/StructuralEqualsVisitor.java
index 6d4a61b9..f00a2902 100644
--- a/autograder-core/src/main/java/de/firemage/autograder/core/integrated/structure/StructuralEqualsVisitor.java
+++ b/autograder-core/src/main/java/de/firemage/autograder/core/integrated/structure/StructuralEqualsVisitor.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.integrated.structure;
import de.firemage.autograder.core.integrated.SpoonUtil;
-import de.firemage.autograder.utils.integrated.CoreUtil;
+import de.firemage.autograder.core.integrated.CoreUtil;
import spoon.reflect.code.CtBinaryOperator;
import spoon.reflect.code.CtConditional;
import spoon.reflect.code.CtExpression;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/CheckTest.java b/autograder-core/src/test/java/de/firemage/autograder/core/CheckTest.java
index 55528591..91340ce0 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/CheckTest.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/CheckTest.java
@@ -1,9 +1,8 @@
package de.firemage.autograder.core;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.parallel.Execution;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/AbstractCheckTest.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/AbstractCheckTest.java
index a02b7895..3b88bc27 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/AbstractCheckTest.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/AbstractCheckTest.java
@@ -2,12 +2,12 @@
import de.firemage.autograder.core.CheckConfiguration;
import de.firemage.autograder.core.Linter;
-import de.firemage.autograder.utils.LinterException;
+import de.firemage.autograder.core.LinterException;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import java.io.IOException;
import java.util.Iterator;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/TestMergedProblems.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/TestMergedProblems.java
index 88a8aeae..469b57d9 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/TestMergedProblems.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/TestMergedProblems.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestAvoidStringConcat.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestAvoidStringConcat.java
index e116f89b..0046af7f 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestAvoidStringConcat.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestAvoidStringConcat.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCharRange.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCharRange.java
index a4f793a5..235e3e24 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCharRange.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCharRange.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCheckIterableDuplicates.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCheckIterableDuplicates.java
index 2acd93bb..c9dc9443 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCheckIterableDuplicates.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCheckIterableDuplicates.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionAddAll.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionAddAll.java
index b39ba738..a1b9c6ae 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionAddAll.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionAddAll.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionsNCopies.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionsNCopies.java
index c671e31e..f28dd936 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionsNCopies.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestCollectionsNCopies.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestImplementComparable.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestImplementComparable.java
index 1e9631c2..8affbb32 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestImplementComparable.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestImplementComparable.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestIsEmptyReimplementationCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestIsEmptyReimplementationCheck.java
index ed0683c1..2eed88f9 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestIsEmptyReimplementationCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestIsEmptyReimplementationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestMathReimplementation.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestMathReimplementation.java
index 98e34673..1db2bb1b 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestMathReimplementation.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestMathReimplementation.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestSimplifyArraysFill.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestSimplifyArraysFill.java
index 9bb93b60..0f7fbe75 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestSimplifyArraysFill.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestSimplifyArraysFill.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestStringRepeat.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestStringRepeat.java
index eef93eba..0e90234e 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestStringRepeat.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestStringRepeat.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArrayCopy.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArrayCopy.java
index 0bb5c5d4..21da79e5 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArrayCopy.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArrayCopy.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArraysFill.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArraysFill.java
index 77ad8dfc..75cb3a71 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArraysFill.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseArraysFill.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseEnumValues.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseEnumValues.java
index 9dbcc291..bbf52b7f 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseEnumValues.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseEnumValues.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseFormatString.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseFormatString.java
index e1dd9474..cd683bdc 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseFormatString.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseFormatString.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseModuloOperator.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseModuloOperator.java
index ab15ed7d..3901398b 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseModuloOperator.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseModuloOperator.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseStringFormatted.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseStringFormatted.java
index 4984b50d..fbbb5c87 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseStringFormatted.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseStringFormatted.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseSubList.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseSubList.java
index de7bbe19..38ee04b7 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseSubList.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/api/TestUseSubList.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestCommentedOutCodeCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestCommentedOutCodeCheck.java
index 8a02dbda..ce551779 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestCommentedOutCodeCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestCommentedOutCodeCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestFieldJavadocCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestFieldJavadocCheck.java
index 9d0029b0..51ca6cbd 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestFieldJavadocCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestFieldJavadocCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestMethodJavadocCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestMethodJavadocCheck.java
index eb305368..2b03ae91 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestMethodJavadocCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestMethodJavadocCheck.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestUnnecessaryComment.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestUnnecessaryComment.java
index 3a624aff..1231735e 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestUnnecessaryComment.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/comment/TestUnnecessaryComment.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.comment;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestExtendsObjectCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestExtendsObjectCheck.java
index a0e99b6c..8e3b6773 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestExtendsObjectCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestExtendsObjectCheck.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
+import de.firemage.autograder.core.LinterException;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantAssignment.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantAssignment.java
index a5ab6d85..772f238a 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantAssignment.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantAssignment.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantConstructor.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantConstructor.java
index 0bfddfca..d0dd2462 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantConstructor.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantConstructor.java
@@ -1,13 +1,13 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantElse.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantElse.java
index 6398a336..b05933e8 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantElse.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantElse.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantIfForBooleanCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantIfForBooleanCheck.java
index 8d8d0b3d..fdc0a0b3 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantIfForBooleanCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantIfForBooleanCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantModifier.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantModifier.java
index a3dbdad8..e97444d0 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantModifier.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantModifier.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantNegationCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantNegationCheck.java
index 73a4bdb2..cc511c2a 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantNegationCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantNegationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantUninitializedVariable.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantUninitializedVariable.java
index 22610847..1b33c304 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantUninitializedVariable.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantUninitializedVariable.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantVariable.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantVariable.java
index 90e16a3d..018158e2 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantVariable.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRedundantVariable.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRepeatedMathOperationCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRepeatedMathOperationCheck.java
index a76e23fd..ca035785 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRepeatedMathOperationCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestRepeatedMathOperationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTooManyExceptions.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTooManyExceptions.java
index cffd4ab6..e133891d 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTooManyExceptions.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTooManyExceptions.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTryCatchComplexity.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTryCatchComplexity.java
index 8f87998f..5384a450 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTryCatchComplexity.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestTryCatchComplexity.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnnecessaryBoxing.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnnecessaryBoxing.java
index e58b367f..b8b46eee 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnnecessaryBoxing.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnnecessaryBoxing.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnusedImport.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnusedImport.java
index fb0a8c08..f0cec51c 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnusedImport.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestUnusedImport.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestWrapperInstantiationCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestWrapperInstantiationCheck.java
index 38cf55e4..bee8bcf0 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestWrapperInstantiationCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/complexity/TestWrapperInstantiationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestCustomExceptionInheritanceCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestCustomExceptionInheritanceCheck.java
index 79181f06..175df089 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestCustomExceptionInheritanceCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestCustomExceptionInheritanceCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestExceptionMessageCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestExceptionMessageCheck.java
index f1a8861a..01570c85 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestExceptionMessageCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestExceptionMessageCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestNumberFormatExceptionIgnored.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestNumberFormatExceptionIgnored.java
index 4f74ca34..4b225841 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestNumberFormatExceptionIgnored.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/exceptions/TestNumberFormatExceptionIgnored.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.exceptions;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestAvoidShadowing.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestAvoidShadowing.java
index 3d2fae61..d1577ca6 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestAvoidShadowing.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestAvoidShadowing.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestCompareCharValue.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestCompareCharValue.java
index d8a9f489..afbe0911 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestCompareCharValue.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestCompareCharValue.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestFieldShouldBeFinal.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestFieldShouldBeFinal.java
index a7063e23..d73aba3a 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestFieldShouldBeFinal.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestFieldShouldBeFinal.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestForToForEachLoop.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestForToForEachLoop.java
index 04b54278..c2ae4c2b 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestForToForEachLoop.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestForToForEachLoop.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestImportTypes.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestImportTypes.java
index a4360cb3..6a9aa75c 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestImportTypes.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestImportTypes.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeDoWhile.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeDoWhile.java
index 07d97887..590d266a 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeDoWhile.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeDoWhile.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeFor.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeFor.java
index c0ffc148..1d665931 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeFor.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestLoopShouldBeFor.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestMagicString.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestMagicString.java
index e51d4656..76c39fe0 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestMagicString.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestMagicString.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestObjectDatatype.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestObjectDatatype.java
index 30f8eabf..e749dda8 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestObjectDatatype.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestObjectDatatype.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestOverrideAnnotationMissing.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestOverrideAnnotationMissing.java
index 8d7ab733..c3078be1 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestOverrideAnnotationMissing.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestOverrideAnnotationMissing.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestReassignedParameterCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestReassignedParameterCheck.java
index 382a920e..5237c15c 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestReassignedParameterCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestReassignedParameterCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestUseDifferentVisibility.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestUseDifferentVisibility.java
index 86e90ccd..9a8af365 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestUseDifferentVisibility.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/general/TestUseDifferentVisibility.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/naming/TestPackageNamingConvention.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/naming/TestPackageNamingConvention.java
index d9935860..ad5461b2 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/naming/TestPackageNamingConvention.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/naming/TestPackageNamingConvention.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.naming;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestClosedSetOfValues.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestClosedSetOfValues.java
index d5dbf55b..c989a812 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestClosedSetOfValues.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestClosedSetOfValues.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestConcreteCollectionCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestConcreteCollectionCheck.java
index 33629364..a2c0bd02 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestConcreteCollectionCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestConcreteCollectionCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestIOUISeparation.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestIOUISeparation.java
index 594d0bc1..8cc3057e 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestIOUISeparation.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestIOUISeparation.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestLeakedCollectionCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestLeakedCollectionCheck.java
index 9c302a13..977706e1 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestLeakedCollectionCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestLeakedCollectionCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestMethodShouldBeStatic.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestMethodShouldBeStatic.java
index 034d782c..bf10daef 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestMethodShouldBeStatic.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestMethodShouldBeStatic.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticBlock.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticBlock.java
index ec18df43..bf166a21 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticBlock.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticBlock.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticFieldShouldBeInstanceCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticFieldShouldBeInstanceCheck.java
index 97a52805..ada335f0 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticFieldShouldBeInstanceCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/oop/TestStaticFieldShouldBeInstanceCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDefaultPackageCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDefaultPackageCheck.java
index 82810fa8..e866f612 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDefaultPackageCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDefaultPackageCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDuplicateCode.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDuplicateCode.java
index e9aedb26..70707ef1 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDuplicateCode.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestDuplicateCode.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestTooFewPackagesCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestTooFewPackagesCheck.java
index d7ab3dad..85c5db58 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestTooFewPackagesCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/structure/TestTooFewPackagesCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.structure;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/check/unnecessary/TestUnusedCodeElementCheck.java b/autograder-core/src/test/java/de/firemage/autograder/core/check/unnecessary/TestUnusedCodeElementCheck.java
index b04d465b..008b083d 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/check/unnecessary/TestUnusedCodeElementCheck.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/check/unnecessary/TestUnusedCodeElementCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.core.check.unnecessary;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/autograder-utils/src/test/java/de/firemage/autograder/utils/file/TestFileSourceInfo.java b/autograder-core/src/test/java/de/firemage/autograder/core/file/TestFileSourceInfo.java
similarity index 81%
rename from autograder-utils/src/test/java/de/firemage/autograder/utils/file/TestFileSourceInfo.java
rename to autograder-core/src/test/java/de/firemage/autograder/core/file/TestFileSourceInfo.java
index 712059c0..7b070488 100644
--- a/autograder-utils/src/test/java/de/firemage/autograder/utils/file/TestFileSourceInfo.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/file/TestFileSourceInfo.java
@@ -1,9 +1,6 @@
-package de.firemage.autograder.utils.file;
+package de.firemage.autograder.core.file;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.CompilationUnit;
-import de.firemage.autograder.utils.file.FileSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/framework/ExpectedProblem.java b/autograder-core/src/test/java/de/firemage/autograder/core/framework/ExpectedProblem.java
index 7de234d9..4f8754e8 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/framework/ExpectedProblem.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/framework/ExpectedProblem.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.framework;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.file.SourcePath;
public record ExpectedProblem(SourcePath file, int line, ProblemType problemType, String comment) {
public String format() {
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestFramework.java b/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestFramework.java
index e32cc9c5..d779cc43 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestFramework.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestFramework.java
@@ -2,10 +2,10 @@
import de.firemage.autograder.core.CheckConfiguration;
import de.firemage.autograder.core.Linter;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.SourcePath;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.SourcePath;
+import de.firemage.autograder.core.file.UploadedFile;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestInput.java b/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestInput.java
index 749f7202..463ebe61 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestInput.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/framework/TestInput.java
@@ -1,10 +1,10 @@
package de.firemage.autograder.core.framework;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.SourcePath;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.SourcePath;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/autograder-utils/src/test/java/de/firemage/autograder/utils/integrated/MethodHierarchyTest.java b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/MethodHierarchyTest.java
similarity index 96%
rename from autograder-utils/src/test/java/de/firemage/autograder/utils/integrated/MethodHierarchyTest.java
rename to autograder-core/src/test/java/de/firemage/autograder/core/integrated/MethodHierarchyTest.java
index 1f207c2b..b7d31756 100644
--- a/autograder-utils/src/test/java/de/firemage/autograder/utils/integrated/MethodHierarchyTest.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/MethodHierarchyTest.java
@@ -1,13 +1,12 @@
-package de.firemage.autograder.utils.integrated;
-
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.StringSourceInfo;
-import de.firemage.autograder.utils.file.UploadedFile;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+package de.firemage.autograder.core.integrated;
+
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
+import de.firemage.autograder.core.file.UploadedFile;
import org.junit.jupiter.api.Test;
import spoon.reflect.code.CtLambda;
import spoon.reflect.declaration.CtMethod;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/integrated/evaluator/TestEvaluator.java b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/evaluator/TestEvaluator.java
index c4e07640..79dece00 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/integrated/evaluator/TestEvaluator.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/evaluator/TestEvaluator.java
@@ -1,7 +1,7 @@
package de.firemage.autograder.core.integrated.evaluator;
import de.firemage.autograder.core.integrated.SpoonUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.UsesFinder;
import de.firemage.autograder.core.integrated.evaluator.fold.ApplyCasts;
import de.firemage.autograder.core.integrated.evaluator.fold.ChainedFold;
import de.firemage.autograder.core.integrated.evaluator.fold.DeduplicateOperatorApplication;
diff --git a/autograder-core/src/test/java/de/firemage/autograder/core/integrated/structure/TestStructuralEqualsVisitor.java b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/structure/TestStructuralEqualsVisitor.java
index 0ab8d6ad..fcb3f70c 100644
--- a/autograder-core/src/test/java/de/firemage/autograder/core/integrated/structure/TestStructuralEqualsVisitor.java
+++ b/autograder-core/src/test/java/de/firemage/autograder/core/integrated/structure/TestStructuralEqualsVisitor.java
@@ -1,9 +1,9 @@
package de.firemage.autograder.core.integrated.structure;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.StringSourceInfo;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.StringSourceInfo;
+import de.firemage.autograder.core.file.UploadedFile;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/api/ProblematicEqualsHashCodeComparable.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/api/ProblematicEqualsHashCodeComparable.java
index 35fa4bb2..8ec80316 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/api/ProblematicEqualsHashCodeComparable.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/api/ProblematicEqualsHashCodeComparable.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.api;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.errorprone.ErrorProneCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/comment/CommentLanguageCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/comment/CommentLanguageCheck.java
index c3070660..7eacf8f6 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/comment/CommentLanguageCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/comment/CommentLanguageCheck.java
@@ -3,8 +3,8 @@
import com.github.pemistahl.lingua.api.Language;
import com.github.pemistahl.lingua.api.LanguageDetector;
import com.github.pemistahl.lingua.api.LanguageDetectorBuilder;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/DiamondOperatorCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/DiamondOperatorCheck.java
index a4af7739..475080a2 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/DiamondOperatorCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/DiamondOperatorCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.pmd.PMDCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RedundantReturnCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RedundantReturnCheck.java
index 0e722783..5d72e418 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RedundantReturnCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RedundantReturnCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.pmd.PMDCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RegexCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RegexCheck.java
index 6f356357..394b5c64 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RegexCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/complexity/RegexCheck.java
@@ -1,14 +1,14 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
-import de.firemage.autograder.utils.integrated.TypeUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import de.firemage.autograder.treeg.InvalidRegExSyntaxException;
import de.firemage.autograder.treeg.RegExParser;
import de.firemage.autograder.treeg.RegularExpression;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/ConstantNamingAndQualifierCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/ConstantNamingAndQualifierCheck.java
index e2fab84c..34430a48 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/ConstantNamingAndQualifierCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/ConstantNamingAndQualifierCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/DoubleBraceInitializationCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/DoubleBraceInitializationCheck.java
index 2cce16ca..d152bd57 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/DoubleBraceInitializationCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/general/DoubleBraceInitializationCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.general;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.errorprone.ErrorProneCheck;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/LinguisticNamingCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/LinguisticNamingCheck.java
index ed8daf59..1525d889 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/LinguisticNamingCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/LinguisticNamingCheck.java
@@ -1,17 +1,17 @@
package de.firemage.autograder.extra.check.naming;
-import de.firemage.autograder.utils.CodeModel;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.CodeModel;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.integrated.IdentifierNameUtils;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.utils.integrated.MethodHierarchy;
+import de.firemage.autograder.core.integrated.MethodHierarchy;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtLocalVariable;
import spoon.reflect.declaration.CtField;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/VariablesHaveDescriptiveNamesCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/VariablesHaveDescriptiveNamesCheck.java
index 4cf522b8..84b46d9e 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/VariablesHaveDescriptiveNamesCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/naming/VariablesHaveDescriptiveNamesCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.check.naming;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
@@ -8,7 +8,7 @@
import de.firemage.autograder.core.integrated.IntegratedCheck;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.MethodUtil;
+import de.firemage.autograder.core.integrated.MethodUtil;
import org.apache.commons.lang3.StringUtils;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtCatchVariable;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/oop/InheritanceBadPractices.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/oop/InheritanceBadPractices.java
index be356425..e05329b3 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/check/oop/InheritanceBadPractices.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/check/oop/InheritanceBadPractices.java
@@ -1,15 +1,14 @@
package de.firemage.autograder.extra.check.oop;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.ExecutableCheck;
import de.firemage.autograder.extra.integrated.IdentifierNameUtils;
import de.firemage.autograder.core.integrated.IntegratedCheck;
-import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.core.integrated.StaticAnalysis;
-import de.firemage.autograder.utils.integrated.CoreUtil;
-import de.firemage.autograder.utils.integrated.UsesFinder;
+import de.firemage.autograder.core.integrated.CoreUtil;
+import de.firemage.autograder.core.integrated.UsesFinder;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtConstructor;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCheck.java
index f257132e..cda7877f 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCheck.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.errorprone;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.check.Check;
import java.util.Map;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCompiler.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCompiler.java
index b0c55003..f97ef5e6 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCompiler.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneCompiler.java
@@ -1,9 +1,9 @@
package de.firemage.autograder.extra.errorprone;
-import de.firemage.autograder.utils.file.CompilationUnit;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.TempLocation;
+import de.firemage.autograder.core.file.CompilationUnit;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.TempLocation;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneDiagnostic.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneDiagnostic.java
index b37e7705..78cc1bf6 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneDiagnostic.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneDiagnostic.java
@@ -1,8 +1,8 @@
package de.firemage.autograder.extra.errorprone;
-import de.firemage.autograder.utils.CodePosition;
-import de.firemage.autograder.utils.file.SourceInfo;
-import de.firemage.autograder.utils.file.SourcePath;
+import de.firemage.autograder.core.CodePosition;
+import de.firemage.autograder.core.file.SourceInfo;
+import de.firemage.autograder.core.file.SourcePath;
import javax.tools.Diagnostic;
import javax.tools.JavaFileObject;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneLinter.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneLinter.java
index 4764d16f..5059e62b 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneLinter.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/ErrorProneLinter.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.errorprone;
import de.firemage.autograder.core.CodeLinter;
-import de.firemage.autograder.utils.LinterStatus;
+import de.firemage.autograder.core.LinterStatus;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.file.SourceInfo;
import de.firemage.autograder.core.check.Check;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import java.io.IOException;
import java.util.ArrayList;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/Message.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/Message.java
index 83d7a6ea..427a4ae7 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/Message.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/Message.java
@@ -1,8 +1,8 @@
package de.firemage.autograder.extra.errorprone;
-import de.firemage.autograder.utils.CodePosition;
+import de.firemage.autograder.core.CodePosition;
import de.firemage.autograder.core.ProblemImpl;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.Check;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/VMLauncher.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/VMLauncher.java
index 940faf9d..2cb553bb 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/VMLauncher.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/errorprone/VMLauncher.java
@@ -1,6 +1,6 @@
package de.firemage.autograder.extra.errorprone;
-import de.firemage.autograder.utils.TempLocation;
+import de.firemage.autograder.core.file.TempLocation;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDCheck.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDCheck.java
index 393a8f23..8b0d627c 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDCheck.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDCheck.java
@@ -1,8 +1,8 @@
package de.firemage.autograder.extra.pmd;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.Translatable;
+import de.firemage.autograder.core.Translatable;
import de.firemage.autograder.core.check.Check;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.RuleViolation;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDInCodeProblem.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDInCodeProblem.java
index 774461d4..593a344f 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDInCodeProblem.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDInCodeProblem.java
@@ -1,9 +1,9 @@
package de.firemage.autograder.extra.pmd;
-import de.firemage.autograder.utils.CodePosition;
+import de.firemage.autograder.core.CodePosition;
import de.firemage.autograder.core.ProblemImpl;
-import de.firemage.autograder.utils.LocalizedMessage;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.LocalizedMessage;
+import de.firemage.autograder.core.file.SourceInfo;
import net.sourceforge.pmd.RuleViolation;
import java.nio.file.Path;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDLinter.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDLinter.java
index d84e08d7..8d2a2e41 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDLinter.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/PMDLinter.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.extra.pmd;
import de.firemage.autograder.core.CodeLinter;
-import de.firemage.autograder.utils.LinterStatus;
+import de.firemage.autograder.core.LinterStatus;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.file.CompilationUnit;
-import de.firemage.autograder.utils.TempLocation;
-import de.firemage.autograder.utils.file.UploadedFile;
+import de.firemage.autograder.core.file.CompilationUnit;
+import de.firemage.autograder.core.file.TempLocation;
+import de.firemage.autograder.core.file.UploadedFile;
import net.sourceforge.pmd.PMDConfiguration;
import net.sourceforge.pmd.PmdAnalysis;
import net.sourceforge.pmd.Rule;
diff --git a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/ProblemRenderer.java b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/ProblemRenderer.java
index a623f4df..42feb429 100644
--- a/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/ProblemRenderer.java
+++ b/autograder-extra/src/main/java/de/firemage/autograder/extra/pmd/ProblemRenderer.java
@@ -1,8 +1,8 @@
package de.firemage.autograder.extra.pmd;
import de.firemage.autograder.core.Problem;
-import de.firemage.autograder.utils.file.FileSourceInfo;
-import de.firemage.autograder.utils.file.SourceInfo;
+import de.firemage.autograder.core.file.FileSourceInfo;
+import de.firemage.autograder.core.file.SourceInfo;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleViolation;
import net.sourceforge.pmd.renderers.AbstractIncrementingRenderer;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/TestLocalizedStrings.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/TestLocalizedStrings.java
index 4e4a2e66..51fff9dc 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/TestLocalizedStrings.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/TestLocalizedStrings.java
@@ -1,11 +1,11 @@
package de.firemage.autograder.extra.check;
import de.firemage.autograder.core.Linter;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import de.firemage.autograder.core.integrated.SpoonUtil;
import de.firemage.autograder.extra.check.naming.LinguisticNamingCheck;
import de.firemage.autograder.extra.check.naming.VariablesHaveDescriptiveNamesCheck;
-import de.firemage.autograder.utils.integrated.TypeUtil;
+import de.firemage.autograder.core.integrated.TypeUtil;
import fluent.bundle.FluentBundle;
import fluent.bundle.FluentResource;
import fluent.syntax.AST.Message;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/api/TestProblematicEqualsHashCodeComparable.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/api/TestProblematicEqualsHashCodeComparable.java
index b27b38e2..afaf97de 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/api/TestProblematicEqualsHashCodeComparable.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/api/TestProblematicEqualsHashCodeComparable.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.api;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestDiamondOperatorCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestDiamondOperatorCheck.java
index 3aceedf4..a25f2a87 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestDiamondOperatorCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestDiamondOperatorCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRedundantReturnCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRedundantReturnCheck.java
index 0c538322..8a833cc2 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRedundantReturnCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRedundantReturnCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRegexCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRegexCheck.java
index 9b54a7c4..d4476d74 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRegexCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/complexity/TestRegexCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.complexity;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestConstantNamingAndQualifierCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestConstantNamingAndQualifierCheck.java
index 14b5892f..02f0ae07 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestConstantNamingAndQualifierCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestConstantNamingAndQualifierCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestDoubleBraceInitializationCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestDoubleBraceInitializationCheck.java
index 092a1f87..505e9aaa 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestDoubleBraceInitializationCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestDoubleBraceInitializationCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestUseDifferentVisibility.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestUseDifferentVisibility.java
index 15b2c622..cd13cffd 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestUseDifferentVisibility.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/general/TestUseDifferentVisibility.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.general;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestLinguisticNamingCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestLinguisticNamingCheck.java
index 8e228f5c..10149e69 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestLinguisticNamingCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestLinguisticNamingCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.naming;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestVariablesHaveDescriptiveNamesCheck.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestVariablesHaveDescriptiveNamesCheck.java
index cf5df6df..b75dd115 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestVariablesHaveDescriptiveNamesCheck.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/naming/TestVariablesHaveDescriptiveNamesCheck.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.naming;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.JavaVersion;
+import de.firemage.autograder.core.file.StringSourceInfo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/oop/TestInheritanceBadPractices.java b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/oop/TestInheritanceBadPractices.java
index 2105beca..5abfa0c4 100644
--- a/autograder-extra/src/test/java/de/firemage/autograder/extra/check/oop/TestInheritanceBadPractices.java
+++ b/autograder-extra/src/test/java/de/firemage/autograder/extra/check/oop/TestInheritanceBadPractices.java
@@ -1,12 +1,12 @@
package de.firemage.autograder.extra.check.oop;
-import de.firemage.autograder.utils.LinterException;
-import de.firemage.autograder.utils.LocalizedMessage;
+import de.firemage.autograder.core.LinterException;
+import de.firemage.autograder.core.LocalizedMessage;
import de.firemage.autograder.core.Problem;
import de.firemage.autograder.core.ProblemType;
-import de.firemage.autograder.utils.file.StringSourceInfo;
+import de.firemage.autograder.core.file.StringSourceInfo;
import de.firemage.autograder.core.check.AbstractCheckTest;
-import de.firemage.autograder.utils.JavaVersion;
+import de.firemage.autograder.core.JavaVersion;
import org.junit.jupiter.api.Test;
import java.io.IOException;
diff --git a/autograder-hotswap/pom.xml b/autograder-hotswap/pom.xml
deleted file mode 100644
index ab528200..00000000
--- a/autograder-hotswap/pom.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- autograder-parent
- de.firemage.autograder
- 0.5.41
-
- 4.0.0
-
- autograder-hotswap
- autograder-hotswap
- Launcher for the autograder that allows changing the version
- https://github.com/Feuermagier/autograder/autograder-hotswap
-
-
-
- de.firemage.autograder
- autograder-core
-
-
- de.firemage.autograder
- autograder-utils
-
-
-
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/DynamicClassLoader.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/DynamicClassLoader.java
deleted file mode 100644
index 782daa92..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/DynamicClassLoader.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Path;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-// Based on https://github.com/quanla/classreloading/blob/master/src/main/java/qj/util/lang/DynamicClassLoader.java
-class DynamicClassLoader extends ClassLoader {
- private final JarFile jarFile;
-
- private final Collection cachedClasses = new HashSet<>();
- private final ClassLoader parent;
-
- DynamicClassLoader(Path path, ClassLoader parent) {
- this.parent = parent;
-
- File file = path.toFile();
-
- if (file.isDirectory()) {
- throw new IllegalStateException("Path %s is a directory".formatted(path));
- }
-
- try {
- this.jarFile = new JarFile(file);
- } catch (IOException e) {
- throw new IllegalStateException("Failed to read jar file", e);
- }
-
- }
-
- @Override
- public Class> loadClass(String name) throws ClassNotFoundException {
- if (!this.cachedClasses.add(name)) {
- return super.loadClass(name); // Use default CL cache
- }
-
- JarEntry entry = this.jarFile.getJarEntry(name.replace('.', '/') + ".class");
- if (entry == null) {
- return this.parent.loadClass(name);
- }
-
- // TODO: take a look at URLClassLoader#defineClass
-
- try(InputStream inputStream = this.jarFile.getInputStream(entry)) {
- byte[] classData = inputStream.readAllBytes();
- Class> clazz = this.defineClass(name, classData, 0, classData.length);
- if (clazz != null) {
- if (clazz.getPackage() == null) {
- this.definePackage(
- name.replaceAll("\\.\\w+$", ""),
- null,
- null,
- null,
- null,
- null,
- null,
- null
- );
- }
-
- this.resolveClass(clazz);
- }
-
- return clazz;
- } catch (IOException e) {
- throw new IllegalStateException("Failed to read %s from jar file".formatted(name), e);
- }
- }
-
- /* // TODO: consider porting this (from URLClassLoader)
- private Class> defineClass(String name, byte[] data) throws IOException {
- long t0 = System.nanoTime();
- int i = name.lastIndexOf('.');
- URL url = res.getCodeSourceURL();
- if (i != -1) {
- String pkgname = name.substring(0, i);
- // Check if package already loaded.
- Manifest man = res.getManifest();
- if (getAndVerifyPackage(pkgname, man, url) == null) {
- try {
- if (man != null) {
- definePackage(pkgname, man, url);
- } else {
- definePackage(pkgname, null, null, null, null, null, null, null);
- }
- } catch (IllegalArgumentException iae) {
- // parallel-capable class loaders: re-verify in case of a
- // race condition
- if (getAndVerifyPackage(pkgname, man, url) == null) {
- // Should never happen
- throw new AssertionError("Cannot find package " +
- pkgname);
- }
- }
- }
- }
- // Now read the class bytes and define the class
- java.nio.ByteBuffer bb = res.getByteBuffer();
- if (bb != null) {
- // Use (direct) ByteBuffer:
- CodeSigner[] signers = res.getCodeSigners();
- CodeSource cs = new CodeSource(url, signers);
- PerfCounter.getReadClassBytesTime().addElapsedTimeFrom(t0);
- return defineClass(name, bb, cs);
- } else {
- byte[] b = res.getBytes();
- // must read certificates AFTER reading bytes.
- CodeSigner[] signers = res.getCodeSigners();
- CodeSource cs = new CodeSource(url, signers);
- PerfCounter.getReadClassBytesTime().addElapsedTimeFrom(t0);
- return defineClass(name, b, 0, b.length, cs);
- }
- }*/
-}
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Linter.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Linter.java
deleted file mode 100644
index 90fe601b..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Linter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import de.firemage.autograder.utils.TempLocation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-import java.util.function.Consumer;
-
-// TODO: complain about the unnecessary hardcoding of the Java version in Artemis4J autograder impl
-
-public final class Linter {
- private static final Logger LOG = LoggerFactory.getLogger(Linter.class);
-
- private Consumer statusConsumer = string -> {};
- private Locale locale = Locale.GERMANY;
- private int threads = -1;
- private TempLocation tempLocation;
- private int maxProblemsPerCheck = -1;
- private boolean shouldAutoUpdate = shouldAutoUpdateEnvironment();
- private List excludedClasses = new ArrayList<>();
-
- private static boolean shouldAutoUpdateEnvironment() {
- String value = System.getenv("AUTOGRADER_SHOULD_AUTO_UPDATE");
-
- if (value == null) {
- return false;
- }
-
- try {
- return Integer.parseInt(value) == 1;
- } catch (NumberFormatException exception) {
- return Boolean.parseBoolean(value);
- }
- }
-
- public Linter() {
- }
-
- public Linter statusConsumer(Consumer statusConsumer) {
- this.statusConsumer = statusConsumer;
- return this;
- }
-
- public Linter locale(Locale locale) {
- this.locale = locale;
- return this;
- }
-
- public Linter threads(int threads) {
- this.threads = threads;
- return this;
- }
-
- public Linter tempLocation(TempLocation tempLocation) {
- this.tempLocation = tempLocation;
- return this;
- }
-
- public Linter maxProblemsPerCheck(int maxProblemsPerCheck) {
- this.maxProblemsPerCheck = maxProblemsPerCheck;
- return this;
- }
-
- public Linter shouldAutoUpdate(boolean shouldAutoUpdate) {
- this.shouldAutoUpdate = shouldAutoUpdate;
- return this;
- }
-
- public Linter excludedClasses(List excludedClasses) {
- this.excludedClasses = excludedClasses;
- return this;
- }
-
- @SuppressWarnings("unchecked")
- public List run(Path submissionSource, Collection problemTypes) throws Exception {
- if (this.tempLocation == null) {
- this.tempLocation = TempLocation.random();
- }
-
- ClassLoader classLoader = this.getClass().getClassLoader();
- if (this.shouldAutoUpdate) {
- Updater updater = new Updater();
-
- Path jarPath = null;
- try {
- jarPath = updater.loadJar(this.tempLocation.toPath()).orElse(null);
- } catch (IOException exception) {
- LOG.error("Failed to update autograder", exception);
- }
-
- if (jarPath != null) {
- classLoader = new DynamicClassLoader(jarPath, classLoader);
- }
- }
-
- return ProxyLinter.run(
- classLoader,
- submissionSource,
- problemTypes,
- this.excludedClasses,
- this.statusConsumer,
- this.locale,
- this.threads,
- this.tempLocation,
- this.maxProblemsPerCheck
- );
- }
-}
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Main.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Main.java
deleted file mode 100644
index 8b81195f..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Main.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import de.firemage.autograder.utils.TempLocation;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Locale;
-
-public final class Main {
- private static List readProblemTypes(Path path) throws IOException {
- List lines = Files.readAllLines(path);
-
- return lines.subList(1, lines.size()).stream().map(string -> string.replace("- ", "").trim()).toList();
- }
-
- public static void main(String[] args) throws Exception {
- List problemTypes = readProblemTypes(Path.of(args[0]));
-
- var result = new Linter()
- .maxProblemsPerCheck(-1)
- .locale(Locale.GERMANY)
- .tempLocation(TempLocation.fromPath(Path.of("D:\\Users\\Lucas\\Downloads")))
- .run(Path.of(args[1]), problemTypes);
-
- for (var res : result) {
- System.out.println(res);
- }
- }
-}
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Problem.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Problem.java
deleted file mode 100644
index 3571b19e..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Problem.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import de.firemage.autograder.utils.CodePosition;
-
-public record Problem(String problemType, CodePosition codePosition, String message) {}
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/ProxyLinter.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/ProxyLinter.java
deleted file mode 100644
index e916824f..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/ProxyLinter.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import de.firemage.autograder.utils.TempLocation;
-
-import java.lang.reflect.Method;
-import java.nio.file.Path;
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-import java.util.function.Consumer;
-
-final class ProxyLinter {
- private ProxyLinter() {
- }
-
- static List run(
- ClassLoader classLoader,
- Path submissionSource,
- Collection problemTypes,
- List excludedClasses,
- Consumer statusConsumer,
- Locale locale,
- int threads,
- TempLocation tempLocation,
- int maxProblemsPerCheck
- ) throws Exception {
- /*
- Object builderInstance = Class.forName("de.firemage.autograder.core.Linter", true, classLoader)
- .getMethod("builder", Locale.class)
- .invoke(null, locale);
-
- if (tempLocation != null) {
- builderInstance.getClass()
- .getMethod("tempLocation", TempLocation.class)
- .invoke(builderInstance, tempLocation);
- }
-
- if (threads > 0) {
- builderInstance.getClass()
- .getMethod("threads", int.class)
- .invoke(builderInstance, threads);
- }
-
- if (maxProblemsPerCheck > 0) {
- builderInstance.getClass()
- .getMethod("maxProblemsPerCheck", int.class)
- .invoke(builderInstance, maxProblemsPerCheck);
- }
-
- // TODO: should it do this? Hmm
- builderInstance.getClass()
- .getMethod("classLoader", ClassLoader.class)
- .invoke(builderInstance, classLoader);
-
-
- Object linterInstance = builderInstance.getClass()
- .getMethod("build")
- .invoke(builderInstance);
-
- Object uploadedFile = Class.forName("de.firemage.autograder.core.file.UploadedFile", true, classLoader)
- .getConstructor()
- .newInstance();
-
- try {
- linterInstance.getClass()
- // TODO: Consumer to Consumer
- .getMethod("checkFile", uploadedFile.getClass(), checkConfiguration.getClass(), statusConsumer.getClass())
- .invoke(linterInstance, uploadedFile, checkConfiguration, statusConsumer);
- } finally {
- uploadedFile.getClass()
- .getMethod("close")
- .invoke(uploadedFile);
- }*/
-
- /*
- Linter linter = Linter.builder(locale)
- .classLoader(classLoader)
- .threads(threads)
- .tempLocation(tempLocation)
- .maxProblemsPerCheck(maxProblemsPerCheck)
- .build();
-
- Consumer statusConsumerWrapper = status -> statusConsumer.accept(linter.translateMessage(status.getMessage()));
-
- List problems = new ArrayList<>();
- try (UploadedFile uploadedFile = UploadedFile.build(
- submissionSource,
- JavaVersion.latest(),
- tempLocation,
- statusConsumerWrapper,
- null)) {
- var autograderProblems = linter.checkFile(uploadedFile, new CheckConfiguration(
- problemTypes.stream().map(ProblemType::valueOf).toList(),
- excludedClasses
- ), statusConsumerWrapper);
-
- for (var problem : autograderProblems) {
- problems.add(new Problem(
- problem.getProblemType().toString(),
- problem.getPosition(),
- linter.translateMessage(problem.getExplanation())
- ));
- }
- }
-
- return problems;*/
-
- for (Method method : classLoader.loadClass("de.firemage.autograder.core.Linter").getDeclaredMethods()) {
- if (method.getName().equals("run")) {
- return (List) method.invoke(
- null,
- classLoader,
- submissionSource,
- problemTypes,
- excludedClasses,
- statusConsumer,
- locale,
- threads,
- // TODO: why can I not pass this here?
- // tempLocation,
- null,
- maxProblemsPerCheck
- );
- }
- }
-
- throw new IllegalStateException("Could not find method run in Linter");
- }
-}
diff --git a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Updater.java b/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Updater.java
deleted file mode 100644
index 904b6e51..00000000
--- a/autograder-hotswap/src/main/java/de/firemage/autograder/hotswap/Updater.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package de.firemage.autograder.hotswap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Optional;
-import java.util.Properties;
-
-record Updater() {
- private static final Logger LOG = LoggerFactory.getLogger(Updater.class);
- private static final String AUTOGRADER_RELEASES_URL = "https://github.com/Feuermagier/autograder/releases/latest";
- private static final Optional CURRENT_VERSION = getVersion();
-
- private static synchronized Optional getVersion() {
- String version = null;
-
- // try to load from maven properties first
- try {
- Properties properties = new Properties();
- InputStream is = Updater.class.getResourceAsStream("/META-INF/maven/de.firemage.autograder/autograder-core/pom.properties");
- if (is != null) {
- properties.load(is);
- version = properties.getProperty("version", null);
- }
- } catch (Exception e) {
- // ignore
- }
-
- // fallback to using Java API
- if (version == null) {
- Package aPackage = Updater.class.getPackage();
- if (aPackage != null) {
- version = aPackage.getImplementationVersion();
- if (version == null) {
- version = aPackage.getSpecificationVersion();
- }
- }
- }
-
- return Optional.ofNullable(version);
- }
-
- public Optional loadJar(Path currentFolder) throws IOException {
- // TODO: migrate to Uri.toUrl?
- URLConnection connection = new URL(AUTOGRADER_RELEASES_URL).openConnection();
- connection.connect();
- // Open stream to force redirect to the latest release
- String tag;
- try (var inputStream = connection.getInputStream()) {
- String[] components = connection.getURL().getFile().split("/");
- tag = components[components.length - 1];
- }
-
- System.out.println("Current version: " + CURRENT_VERSION.orElse("unknown") + ", tag: " + tag);
- Path existingJAR = Path.of(currentFolder.toString(), "%s_autograder_jar.jar".formatted(CURRENT_VERSION.map(s -> "v" + s).orElse(tag)));
- if (!Files.exists(existingJAR) || !existingJAR.getFileName().toString().startsWith(tag)) {
- Files.deleteIfExists(existingJAR);
- LOG.info("Downloading Autograder " + tag);
-
- Path targetPath = Files.createFile(Path.of(currentFolder.toString(), tag + "_autograder_jar.jar"));
- existingJAR = downloadRelease(targetPath, tag);
- } else {
- LOG.info("Skipping autograder JAR download as most recent one is already present at " + existingJAR.toAbsolutePath());
- }
-
- return Optional.ofNullable(existingJAR);
- }
-
- private static Path downloadRelease(Path targetPath, String version) {
- try {
- LOG.info("Downloading autograder JAR with version/tag " + version + " to " + targetPath.toAbsolutePath());
- Files.deleteIfExists(targetPath);
- Files.createFile(targetPath);
- URL url = new URL("%s/download/autograder-cmd.jar".formatted(AUTOGRADER_RELEASES_URL));
- ReadableByteChannel channel = Channels.newChannel(url.openStream());
- try (FileOutputStream stream = new FileOutputStream(targetPath.toFile())) {
- stream.getChannel().transferFrom(channel, 0, Long.MAX_VALUE);
- }
-
- return targetPath;
- } catch (IOException e) {
- LOG.error("Failed to download the autograder JAR", e);
- return null;
- }
- }
-}
diff --git a/autograder-utils/pom.xml b/autograder-utils/pom.xml
deleted file mode 100644
index 0d782181..00000000
--- a/autograder-utils/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- autograder-parent
- de.firemage.autograder
- 0.5.41
-
- 4.0.0
-
- autograder-utils
- autograder-utils
- Utilities for the autograder
- https://github.com/Feuermagier/autograder/autograder-utils
-
-
-
-
- fr.inria.gforge.spoon
- spoon-core
- ${spoon.version}
-
-
- org.slf4j
- slf4j-api
-
-
-
-
-
-
- com.github.albfernandez
- juniversalchardet
- 2.5.0
-
-
-
- org.slf4j
- jcl-over-slf4j
- ${slf4j.version}
-
-
-
-
- net.xyzsd.fluent
- fluent-base
- ${fluent.version}
-
-
- net.xyzsd.fluent
- fluent-functions-icu
- ${fluent.version}
-
-
-
diff --git a/pom.xml b/pom.xml
index 41b5da9d..98d20a70 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,16 +100,6 @@
autograder-extra
0.5.41
-
- de.firemage.autograder
- autograder-utils
- 0.5.41
-
-
- de.firemage.autograder
- autograder-hotswap
- 0.5.41
-
@@ -246,8 +236,6 @@
autograder-treeg
autograder-span
autograder-extra
- autograder-utils
- autograder-hotswap
@@ -262,8 +250,6 @@
autograder-treeg
autograder-span
autograder-extra
- autograder-utils
- autograder-hotswap