Skip to content

Commit

Permalink
Of course i forgot about checkstyle
Browse files Browse the repository at this point in the history
  • Loading branch information
IotaBread committed Feb 24, 2025
1 parent ed69b93 commit b0f9d5d
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 63 deletions.
123 changes: 63 additions & 60 deletions enigma/src/test/java/org/quiltmc/enigma/DecompilationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,137 +45,140 @@ public void testInvalidIdentifiers(DecompilerService decompiler) {
// field declarations
for (TypeDescriptor.Primitive type : TypeDescriptor.Primitive.values()) {
assertThat(
checker.getDeclarationToken(TestEntryFactory.newField("a", type.getKeyword(), "" + type.getCode())),
equalTo(type.getKeyword())
checker.getDeclarationToken(TestEntryFactory.newField("a", type.getKeyword(), "" + type.getCode())),
equalTo(type.getKeyword())
);
}

List<String> fieldNames = List.of("final", "break", "for", "static", "super", "private", "import", "synchronized", "$");
for (String name : fieldNames) {
assertThat(
checker.getDeclarationToken(TestEntryFactory.newField("a", name, "I")),
equalTo(name)
checker.getDeclarationToken(TestEntryFactory.newField("a", name, "I")),
equalTo(name)
);
}

assertThat(
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "transient", "C")),
equalTo("transient")
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "transient", "C")),
equalTo("transient")
);
assertThat(
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "volatile", "Z")),
equalTo("volatile")
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "volatile", "Z")),
equalTo("volatile")
);
assertThat(
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "false", "Z")),
equalTo("false")
checker.getDeclarationToken(TestEntryFactory.newField("a$abstract", "false", "Z")),
equalTo("false")
);

// method declarations
List<String> methodNames = List.of("new", "assert", "try", "switch", "void", "throws", "class", "while");
for (String name : methodNames) {
assertThat(
checker.getDeclarationToken(TestEntryFactory.newMethod("a", name, "()V")),
equalTo(name)
checker.getDeclarationToken(TestEntryFactory.newMethod("a", name, "()V")),
equalTo(name)
);
}

assertThat(
checker.getDeclarationToken(TestEntryFactory.newMethod("a", "native", "()I")),
equalTo("native")
checker.getDeclarationToken(TestEntryFactory.newMethod("a", "native", "()I")),
equalTo("native")
);
if (!decompiler.getId().equals("enigma:cfr")) {
// cfr doesnt decompile the local interface, just the local class
assertThat(
checker.getDeclarationToken(TestEntryFactory.newMethod("a$interface", "throws", "()V")),
equalTo("throws")
checker.getDeclarationToken(TestEntryFactory.newMethod("a$interface", "throws", "()V")),
equalTo("throws")
);
assertThat(
checker.getDeclarationToken(TestEntryFactory.newMethod("a$interface", "enum", "()I")),
equalTo("enum")
checker.getDeclarationToken(TestEntryFactory.newMethod("a$interface", "enum", "()I")),
equalTo("enum")
);
}

// class declarations
assertThat(
checker.getDeclarationToken(TestEntryFactory.newClass("a$enum")),
equalTo("enum")
checker.getDeclarationToken(TestEntryFactory.newClass("a$enum")),
equalTo("enum")
);
if (!decompiler.getId().equals("enigma:cfr")) {
assertThat(
checker.getDeclarationToken(TestEntryFactory.newClass("a$interface")),
equalTo("interface")
checker.getDeclarationToken(TestEntryFactory.newClass("a$interface")),
equalTo("interface")
);
}

assertThat(
checker.getDeclarationToken(TestEntryFactory.newClass("a$abstract")),
equalTo(decompiler.getId().equals("enigma:cfr") ? "Abstract" : "abstract") // cfr capitalizes the class for some reason
checker.getDeclarationToken(TestEntryFactory.newClass("a$abstract")),
equalTo(decompiler.getId().equals("enigma:cfr") ? "Abstract" : "abstract") // cfr capitalizes the class for some reason
);

// field references
if (!decompiler.getId().equals("enigma:cfr")) {
// cfr doesn't decompile the field assign inside the constructor
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newField("a$abstract", "transient", "C"),
"",
TestEntryFactory.newMethod("a$abstract", "<init>", "(La;)V")
)),
contains("transient")
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newField("a$abstract", "transient", "C"),
"",
TestEntryFactory.newMethod("a$abstract", "<init>", "(La;)V")
)),
contains("transient")
);
}

if (!decompiler.getId().equals("enigma:vineflower")) {
// due to an oversight, there's no way to know where a method starts and ends when using vineflower
// so any references after the throws() declaration are linked to said method instead of the correct one, class()
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newField("a$abstract", "transient", "C"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
)),
contains("transient")
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newField("a$abstract", "transient", "C"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
)),
contains("transient")
);
}

// method references
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newMethod("a", "new", "()V"),
"",
TestEntryFactory.newMethod("a", "try", "()V")
)),
contains("new")
);
if (!decompiler.getId().equals("enigma:vineflower")) {
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newMethod("a$abstract", "throws", "()V"),
TestEntryFactory.newMethod("a", "new", "()V"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
TestEntryFactory.newMethod("a", "try", "()V")
)),
contains("throws")
contains("new")
);
if (!decompiler.getId().equals("enigma:vineflower")) {
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newMethod("a$abstract", "throws", "()V"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
)),
contains("throws")
);
}

// class references
if (!decompiler.getId().equals("enigma:cfr")) {
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newClass("a$interface"),
"",
decompiler.getId().equals("enigma:procyon") ? TestEntryFactory.newClass("a$abstract") : TestEntryFactory.newMethod("a", "class", "()V")
)),
contains("interface")
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newClass("a$interface"),
"",
decompiler.getId().equals("enigma:procyon") ? TestEntryFactory.newClass("a$abstract") : TestEntryFactory.newMethod("a", "class", "()V")
)),
contains("interface")
);
}

if (!decompiler.getId().equals("enigma:vineflower")) {
assertThat(
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newClass("a$abstract"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
)),
hasItem(decompiler.getId().equals("enigma:cfr") ? "Abstract" : "abstract")
checker.getReferenceTokens(new EntryReference<>(
TestEntryFactory.newClass("a$abstract"),
"",
TestEntryFactory.newMethod("a", "class", "()V")
)),
hasItem(decompiler.getId().equals("enigma:cfr") ? "Abstract" : "abstract")
);
}
}
Expand Down
4 changes: 2 additions & 2 deletions enigma/src/test/java/org/quiltmc/enigma/TokenChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ protected String getDeclarationToken(Entry<?> entry) {
// decompile the class
Source source = this.decompiler.getUndocumentedSource(entry.getTopLevelClass().getFullName());
// DEBUG
createDebugFile(source, entry.getTopLevelClass());
// this.createDebugFile(source, entry.getTopLevelClass());
String string = source.asString();
SourceIndex index = source.index();

Expand All @@ -65,7 +65,7 @@ protected Collection<String> getReferenceTokens(EntryReference<? extends Entry<?
String string = source.asString();
SourceIndex index = source.index();
// DEBUG
// createDebugFile(source, reference.context.getTopLevelClass());
// this.createDebugFile(source, reference.context.getTopLevelClass());

// get the token values
List<String> values = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void tryCatchThrownException() {
try {
throw new RuntimeException("meow :3");
} catch (RuntimeException e) {
invokeConstructor();
this.invokeConstructor();
}
}

Expand Down

0 comments on commit b0f9d5d

Please sign in to comment.