Fixes #21, tries to fix #20

Signed-off-by: liach <liach@users.noreply.github.com>
This commit is contained in:
liach 2021-03-31 21:27:03 -05:00
parent 598f6db83c
commit c45cd7ab43
2 changed files with 29 additions and 8 deletions

View File

@ -391,27 +391,47 @@ public class FieldBuilder {
// fake initializers exclude fields from constant values // fake initializers exclude fields from constant values
switch (desc.charAt(0)) { switch (desc.charAt(0)) {
case 'B': case 'B':
if (fieldNode.value instanceof Integer) {
return CodeBlock.builder().add("(byte) $L", fieldNode.value).build();
}
// fake initializer falls through
case 'C': case 'C':
if (fieldNode.value instanceof Integer) {
return CodeBlock.builder().add("(char) $L", fieldNode.value).build();
}
// fake initializer falls through
case 'D': case 'D':
if (fieldNode.value instanceof Double) {
return CodeBlock.builder().add("$LD", fieldNode.value).build();
}
// fake initializer falls through
case 'I': case 'I':
if (fieldNode.value instanceof Integer) {
return CodeBlock.builder().add("$L", fieldNode.value).build();
}
// fake initializer falls through
case 'J': case 'J':
if (fieldNode.value instanceof Long) {
return CodeBlock.builder().add("$LL", fieldNode.value).build();
}
// fake initializer falls through
case 'S': case 'S':
if (fieldNode.value != null) { if (fieldNode.value instanceof Integer) {
return CodeBlock.builder().add(String.valueOf(fieldNode.value)).build(); return CodeBlock.builder().add("(short) $L", fieldNode.value).build();
} }
return CodeBlock.builder().add("java.lang.Byte.parseByte(\"dummy\")").build(); return CodeBlock.builder().add("java.lang.Byte.parseByte(\"dummy\")").build();
case 'F': case 'F':
if (fieldNode.value != null) { if (fieldNode.value instanceof Float) {
return CodeBlock.builder().add(fieldNode.value + "f").build(); return CodeBlock.builder().add("$LF", fieldNode.value).build();
} }
return CodeBlock.builder().add("java.lang.Float.parseFloat(\"dummy\")").build(); return CodeBlock.builder().add("java.lang.Float.parseFloat(\"dummy\")").build();
case 'Z': case 'Z':
if (fieldNode.value instanceof Number) { if (fieldNode.value instanceof Integer) {
return CodeBlock.builder().add(Boolean.toString(((Number) fieldNode.value).intValue() != 0)).build(); return CodeBlock.builder().add("$L", ((int) fieldNode.value) != 0).build();
} }
return CodeBlock.builder().add("java.lang.Boolean.parseBoolean(\"dummy\")").build(); return CodeBlock.builder().add("java.lang.Boolean.parseBoolean(\"dummy\")").build();
} }
if (fieldNode.value != null) { if (desc.equals("Ljava/lang/String;") && fieldNode.value instanceof String) {
return CodeBlock.builder().add("$S", fieldNode.value).build(); return CodeBlock.builder().add("$S", fieldNode.value).build();
} }
return CodeBlock.builder().add(desc.equals("Ljava/lang/String;") ? "java.lang.String.valueOf(\"dummy\")" : "null").build(); return CodeBlock.builder().add(desc.equals("Ljava/lang/String;") ? "java.lang.String.valueOf(\"dummy\")" : "null").build();

View File

@ -95,7 +95,8 @@ public class Main {
classes.values().stream() classes.values().stream()
.filter(classBuilder -> !classBuilder.getClassName().contains("$")) .filter(classBuilder -> !classBuilder.getClassName().contains("$"))
.forEach(classBuilder -> { .forEach(classBuilder -> {
JavaFile javaFile = JavaFile.builder(classBuilder.getClassName().replaceAll("/", ".").substring(0, classBuilder.getClassName().lastIndexOf("/")), classBuilder.build()) int packageEnd = classBuilder.getClassName().lastIndexOf("/");
JavaFile javaFile = JavaFile.builder(packageEnd == -1 ? "" : classBuilder.getClassName().substring(0, packageEnd).replaceAll("/", "."), classBuilder.build())
.build(); .build();
try { try {
javaFile.writeTo(outputDirectory); javaFile.writeTo(outputDirectory);