Skip to content

Commit 672c7b3

Browse files
committed
Version 1.0.6, fix empty records
1 parent ae9326c commit 672c7b3

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
group = io.papermc.codebook
2-
version = 1.0.6-SNAPSHOT
2+
version = 1.0.6

src/main/java/io/papermc/codebook/pages/FixJarPage.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import dev.denwav.hypo.asm.AsmMethodData;
3232
import dev.denwav.hypo.core.HypoContext;
3333
import dev.denwav.hypo.hydrate.generic.HypoHydration;
34+
import dev.denwav.hypo.model.HypoModelUtil;
3435
import dev.denwav.hypo.model.data.ClassData;
3536
import dev.denwav.hypo.model.data.ClassKind;
3637
import dev.denwav.hypo.model.data.FieldData;
@@ -71,7 +72,11 @@ private void fixJar() throws IOException {
7172
final var tasks = new ArrayList<Future<?>>();
7273
for (final ClassData classData : this.context.getProvider().allClasses()) {
7374
final var task = this.context.getExecutor().submit(() -> {
74-
this.processClass((AsmClassData) classData);
75+
try {
76+
this.processClass((AsmClassData) classData);
77+
} catch (final IOException e) {
78+
throw HypoModelUtil.rethrow(e);
79+
}
7580
});
7681
tasks.add(task);
7782
}
@@ -87,8 +92,9 @@ private void fixJar() throws IOException {
8792
}
8893
}
8994

90-
private void processClass(final AsmClassData classData) {
95+
private void processClass(final AsmClassData classData) throws IOException {
9196
OverrideAnnotationAdder.addAnnotations(classData);
97+
EmptyRecordFixer.fixClass(classData);
9298
RecordFieldAccessFixer.fixClass(classData);
9399
DeprecatedAnnotationAdder.addAnnotations(classData);
94100
}
@@ -151,13 +157,34 @@ private static void addAnnotations(final AsmClassData classData) {
151157
}
152158
}
153159

160+
private static final class EmptyRecordFixer {
161+
162+
private EmptyRecordFixer() {}
163+
164+
private static void fixClass(final AsmClassData classData) throws IOException {
165+
if (classData.is(ClassKind.RECORD)) {
166+
return;
167+
}
168+
169+
final @Nullable ClassData superClass = classData.superClass();
170+
if (superClass == null) {
171+
return;
172+
}
173+
174+
if (superClass.name().equals("java/lang/Record")) {
175+
// extends record, but is not marked as such
176+
classData.getNode().access |= Opcodes.ACC_RECORD;
177+
}
178+
}
179+
}
180+
154181
private static final class RecordFieldAccessFixer {
155182
private static final int RESET_ACCESS = ~(Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED);
156183

157184
private RecordFieldAccessFixer() {}
158185

159186
private static void fixClass(final AsmClassData classData) {
160-
if (classData.kind() != ClassKind.RECORD) {
187+
if (classData.isNot(ClassKind.RECORD)) {
161188
return;
162189
}
163190

0 commit comments

Comments
 (0)