mirror of https://github.com/FabricMC/yarn.git
Better char literals
Signed-off-by: liach <liach@users.noreply.github.com>
This commit is contained in:
parent
c45cd7ab43
commit
957c0f5138
|
@ -397,7 +397,9 @@ public class FieldBuilder {
|
|||
// fake initializer falls through
|
||||
case 'C':
|
||||
if (fieldNode.value instanceof Integer) {
|
||||
return CodeBlock.builder().add("(char) $L", fieldNode.value).build();
|
||||
int value = (int) fieldNode.value;
|
||||
char c = (char) value;
|
||||
return printChar(CodeBlock.builder(), c, value).build();
|
||||
}
|
||||
// fake initializer falls through
|
||||
case 'D':
|
||||
|
@ -437,6 +439,34 @@ public class FieldBuilder {
|
|||
return CodeBlock.builder().add(desc.equals("Ljava/lang/String;") ? "java.lang.String.valueOf(\"dummy\")" : "null").build();
|
||||
}
|
||||
|
||||
|
||||
private static CodeBlock.Builder printChar(CodeBlock.Builder builder, char c, int value) {
|
||||
if (!Character.isValidCodePoint(value) || !Character.isDefined(value)) {
|
||||
return builder.add("(char) $L", value);
|
||||
}
|
||||
|
||||
// See https://docs.oracle.com/javase/specs/jls/se16/html/jls-3.html#jls-EscapeSequence
|
||||
// ignore space or ", just use direct in those cases
|
||||
switch (c) {
|
||||
case '\b':
|
||||
return builder.add("'\\b'");
|
||||
case '\t':
|
||||
return builder.add("'\\t'");
|
||||
case '\n':
|
||||
return builder.add("'\\n'");
|
||||
case '\f':
|
||||
return builder.add("'\\f'");
|
||||
case '\r':
|
||||
return builder.add("'\\r'");
|
||||
case '\'':
|
||||
return builder.add("'\\''");
|
||||
case '\\':
|
||||
return builder.add("'\\\\'");
|
||||
}
|
||||
|
||||
return builder.add("'$L'", c);
|
||||
}
|
||||
|
||||
private void addJavaDoc() {
|
||||
mappings.addFieldDoc(builder::addJavadoc, new EntryTriple(classNode.name, fieldNode.name, fieldNode.desc));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue