summaryrefslogtreecommitdiff
path: root/enigma/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'enigma/src/main/java')
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProject.java8
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java8
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java7
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/StructureTreeNode.java10
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java28
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/classprovider/ObfuscationFixClassProvider.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/Translator.java2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java17
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java5
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/IdentifierValidation.java14
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java8
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java11
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java7
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java6
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/I18n.java9
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/Utils.java16
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/validation/PrintValidatable.java19
29 files changed, 82 insertions, 132 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
index a9e022f..4f50f2f 100644
--- a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
+++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
@@ -120,11 +120,11 @@ public class EnigmaProject {
120 } 120 }
121 121
122 public boolean isRenamable(Entry<?> obfEntry) { 122 public boolean isRenamable(Entry<?> obfEntry) {
123 if (obfEntry instanceof MethodEntry) { 123 if (obfEntry instanceof MethodEntry obfMethodEntry) {
124 // HACKHACK: Object methods are not obfuscated identifiers 124 // HACKHACK: Object methods are not obfuscated identifiers
125 MethodEntry obfMethodEntry = (MethodEntry) obfEntry;
126 String name = obfMethodEntry.getName(); 125 String name = obfMethodEntry.getName();
127 String sig = obfMethodEntry.getDesc().toString(); 126 String sig = obfMethodEntry.getDesc().toString();
127 //TODO replace with a map or check if declaring class is java.lang.Object
128 if (name.equals("clone") && sig.equals("()Ljava/lang/Object;")) { 128 if (name.equals("clone") && sig.equals("()Ljava/lang/Object;")) {
129 return false; 129 return false;
130 } else if (name.equals("equals") && sig.equals("(Ljava/lang/Object;)Z")) { 130 } else if (name.equals("equals") && sig.equals("(Ljava/lang/Object;)Z")) {
@@ -249,14 +249,14 @@ public class EnigmaProject {
249 } 249 }
250 250
251 public SourceExport decompile(ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) { 251 public SourceExport decompile(ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) {
252 List<ClassSource> decompiled = this.decompileStream(progress, decompilerService, errorStrategy).collect(Collectors.toList()); 252 List<ClassSource> decompiled = this.decompileStream(progress, decompilerService, errorStrategy).toList();
253 return new SourceExport(decompiled); 253 return new SourceExport(decompiled);
254 } 254 }
255 255
256 public Stream<ClassSource> decompileStream(ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) { 256 public Stream<ClassSource> decompileStream(ProgressListener progress, DecompilerService decompilerService, DecompileErrorStrategy errorStrategy) {
257 Collection<ClassNode> classes = this.compiled.values().stream() 257 Collection<ClassNode> classes = this.compiled.values().stream()
258 .filter(classNode -> classNode.name.indexOf('$') == -1) 258 .filter(classNode -> classNode.name.indexOf('$') == -1)
259 .collect(Collectors.toList()); 259 .toList();
260 260
261 progress.init(classes.size(), I18n.translate("progress.classes.decompiling")); 261 progress.init(classes.size(), I18n.translate("progress.classes.decompiling"));
262 262
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
index 90d8a6c..0142412 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
@@ -70,8 +70,7 @@ public class ClassReferenceTreeNode extends DefaultMutableTreeNode
70 70
71 if (recurse && this.children != null) { 71 if (recurse && this.children != null) {
72 for (Object child : this.children) { 72 for (Object child : this.children) {
73 if (child instanceof ClassReferenceTreeNode) { 73 if (child instanceof ClassReferenceTreeNode node) {
74 ClassReferenceTreeNode node = (ClassReferenceTreeNode) child;
75 74
76 // don't recurse into ancestor 75 // don't recurse into ancestor
77 Set<Entry<?>> ancestors = Sets.newHashSet(); 76 Set<Entry<?>> ancestors = Sets.newHashSet();
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java b/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java
index 6dd6526..281b05f 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java
@@ -91,7 +91,7 @@ public class EntryReference<E extends Entry<?>, C extends Entry<?>> implements T
91 } 91 }
92 92
93 public Entry<?> getNameableEntry() { 93 public Entry<?> getNameableEntry() {
94 if (entry instanceof MethodEntry && ((MethodEntry) entry).isConstructor()) { 94 if (entry instanceof MethodEntry method && method.isConstructor()) {
95 // renaming a constructor really means renaming the class 95 // renaming a constructor really means renaming the class
96 return entry.getContainingClass(); 96 return entry.getContainingClass();
97 } 97 }
@@ -112,7 +112,7 @@ public class EntryReference<E extends Entry<?>, C extends Entry<?>> implements T
112 112
113 @Override 113 @Override
114 public boolean equals(Object other) { 114 public boolean equals(Object other) {
115 return other instanceof EntryReference && equals((EntryReference<?, ?>) other); 115 return other instanceof EntryReference reference && equals(reference);
116 } 116 }
117 117
118 public boolean equals(EntryReference<?, ?> other) { 118 public boolean equals(EntryReference<?, ?> other) {
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
index 4beab7f..c93ac53 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
@@ -72,10 +72,10 @@ public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements Re
72 72
73 if (recurse && children != null) { 73 if (recurse && children != null) {
74 for (Object node : children) { 74 for (Object node : children) {
75 if (node instanceof MethodReferenceTreeNode) { 75 if (node instanceof MethodReferenceTreeNode methodNode) {
76 ((MethodReferenceTreeNode) node).load(index, true, false); 76 methodNode.load(index, true, false);
77 } else if (node instanceof FieldReferenceTreeNode) { 77 } else if (node instanceof FieldReferenceTreeNode fieldNode) {
78 ((FieldReferenceTreeNode) node).load(index, true); 78 fieldNode.load(index, true);
79 } 79 }
80 } 80 }
81 } 81 }
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java b/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
index fad10bf..a624b7c 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
@@ -9,7 +9,6 @@ import org.objectweb.asm.tree.analysis.Value;
9 9
10import java.util.List; 10import java.util.List;
11import java.util.Objects; 11import java.util.Objects;
12import java.util.stream.Collectors;
13 12
14public class InterpreterPair<V extends Value, W extends Value> extends Interpreter<InterpreterPair.PairValue<V, W>> { 13public class InterpreterPair<V extends Value, W extends Value> extends Interpreter<InterpreterPair.PairValue<V, W>> {
15 private final Interpreter<V> left; 14 private final Interpreter<V> left;
@@ -72,8 +71,8 @@ public class InterpreterPair<V extends Value, W extends Value> extends Interpret
72 @Override 71 @Override
73 public PairValue<V, W> naryOperation(AbstractInsnNode insn, List<? extends PairValue<V, W>> values) throws AnalyzerException { 72 public PairValue<V, W> naryOperation(AbstractInsnNode insn, List<? extends PairValue<V, W>> values) throws AnalyzerException {
74 return pair( 73 return pair(
75 left.naryOperation(insn, values.stream().map(v -> v.left).collect(Collectors.toList())), 74 left.naryOperation(insn, values.stream().map(v -> v.left).toList()),
76 right.naryOperation(insn, values.stream().map(v -> v.right).collect(Collectors.toList())) 75 right.naryOperation(insn, values.stream().map(v -> v.right).toList())
77 ); 76 );
78 } 77 }
79 78
@@ -114,7 +113,7 @@ public class InterpreterPair<V extends Value, W extends Value> extends Interpret
114 113
115 @Override 114 @Override
116 public boolean equals(Object o) { 115 public boolean equals(Object o) {
117 return o instanceof InterpreterPair.PairValue && Objects.equals(left, ((PairValue) o).left) && Objects.equals(right, ((PairValue) o).right); 116 return o instanceof InterpreterPair.PairValue pairValue && Objects.equals(left, pairValue.left) && Objects.equals(right, pairValue.right);
118 } 117 }
119 118
120 @Override 119 @Override
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
index 8995eb5..6803861 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -72,8 +72,7 @@ public class MethodReferenceTreeNode extends DefaultMutableTreeNode implements R
72 72
73 if (recurse && this.children != null) { 73 if (recurse && this.children != null) {
74 for (Object child : this.children) { 74 for (Object child : this.children) {
75 if (child instanceof MethodReferenceTreeNode) { 75 if (child instanceof MethodReferenceTreeNode node) {
76 MethodReferenceTreeNode node = (MethodReferenceTreeNode) child;
77 76
78 // don't recurse into ancestor 77 // don't recurse into ancestor
79 Set<Entry<?>> ancestors = Sets.newHashSet(); 78 Set<Entry<?>> ancestors = Sets.newHashSet();
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/StructureTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/StructureTreeNode.java
index 55d75cf..b4343c1 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/StructureTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/StructureTreeNode.java
@@ -49,7 +49,7 @@ public class StructureTreeNode extends DefaultMutableTreeNode {
49 } 49 }
50 50
51 // don't add constructor methods if hideDeobfuscated is true 51 // don't add constructor methods if hideDeobfuscated is true
52 if (hideDeobfuscated && (child instanceof MethodEntry) && ((MethodEntry) child).isConstructor()) { 52 if (hideDeobfuscated && (child instanceof MethodEntry method) && method.isConstructor()) {
53 continue; 53 continue;
54 } 54 }
55 55
@@ -95,12 +95,12 @@ public class StructureTreeNode extends DefaultMutableTreeNode {
95 public String toHtml() { 95 public String toHtml() {
96 List<String> modifiers = new ArrayList<>(); 96 List<String> modifiers = new ArrayList<>();
97 97
98 if (this.entry instanceof DefEntry<?>) { 98 if (this.entry instanceof DefEntry<?> defEntry) {
99 AccessFlags access = ((DefEntry<?>) this.entry).getAccess(); 99 AccessFlags access = defEntry.getAccess();
100 boolean isInterfaceMethod = false; 100 boolean isInterfaceMethod = false;
101 101
102 if (this.entry instanceof MethodEntry && this.entry.getParent() instanceof ClassDefEntry) { 102 if (this.entry instanceof MethodEntry && this.entry.getParent() instanceof ClassDefEntry parent) {
103 isInterfaceMethod = ((ClassDefEntry) this.entry.getParent()).getAccess().isInterface(); 103 isInterfaceMethod = parent.getAccess().isInterface();
104 } 104 }
105 105
106 if (access.isStatic() && !access.isEnum()) { 106 if (access.isStatic() && !access.isEnum()) {
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
index 9a2726e..bb992b7 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
@@ -43,14 +43,14 @@ public class EntryIndex implements JarIndexer {
43 } 43 }
44 44
45 public boolean hasEntry(Entry<?> entry) { 45 public boolean hasEntry(Entry<?> entry) {
46 if (entry instanceof ClassEntry) { 46 if (entry instanceof ClassEntry classEntry) {
47 return hasClass((ClassEntry) entry); 47 return hasClass(classEntry);
48 } else if (entry instanceof MethodEntry) { 48 } else if (entry instanceof MethodEntry methodEntry) {
49 return hasMethod((MethodEntry) entry); 49 return hasMethod(methodEntry);
50 } else if (entry instanceof FieldEntry) { 50 } else if (entry instanceof FieldEntry fieldEntry) {
51 return hasField((FieldEntry) entry); 51 return hasField(fieldEntry);
52 } else if (entry instanceof LocalVariableEntry) { 52 } else if (entry instanceof LocalVariableEntry localVariableEntry) {
53 return hasMethod(((LocalVariableEntry) entry).getParent()); 53 return hasMethod(localVariableEntry.getParent());
54 } 54 }
55 55
56 return false; 56 return false;
@@ -73,12 +73,12 @@ public class EntryIndex implements JarIndexer {
73 73
74 @Nullable 74 @Nullable
75 public AccessFlags getEntryAccess(Entry<?> entry) { 75 public AccessFlags getEntryAccess(Entry<?> entry) {
76 if (entry instanceof MethodEntry) { 76 if (entry instanceof MethodEntry methodEntry) {
77 return getMethodAccess((MethodEntry) entry); 77 return getMethodAccess(methodEntry);
78 } else if (entry instanceof FieldEntry) { 78 } else if (entry instanceof FieldEntry fieldEntry) {
79 return getFieldAccess((FieldEntry) entry); 79 return getFieldAccess(fieldEntry);
80 } else if (entry instanceof LocalVariableEntry) { 80 } else if (entry instanceof LocalVariableEntry localVariableEntry) {
81 return getMethodAccess(((LocalVariableEntry) entry).getParent()); 81 return getMethodAccess(localVariableEntry.getParent());
82 } 82 }
83 83
84 return null; 84 return null;
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
index f3d419e..efea83d 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
@@ -17,7 +17,6 @@ import org.objectweb.asm.tree.MethodInsnNode;
17import org.objectweb.asm.tree.analysis.*; 17import org.objectweb.asm.tree.analysis.*;
18 18
19import java.util.List; 19import java.util.List;
20import java.util.stream.Collectors;
21 20
22public class IndexReferenceVisitor extends ClassVisitor { 21public class IndexReferenceVisitor extends ClassVisitor {
23 private final JarIndexer indexer; 22 private final JarIndexer indexer;
@@ -112,7 +111,7 @@ public class IndexReferenceVisitor extends ClassVisitor {
112 111
113 if (insn.getOpcode() == Opcodes.INVOKEDYNAMIC) { 112 if (insn.getOpcode() == Opcodes.INVOKEDYNAMIC) {
114 InvokeDynamicInsnNode invokeDynamicInsn = (InvokeDynamicInsnNode) insn; 113 InvokeDynamicInsnNode invokeDynamicInsn = (InvokeDynamicInsnNode) insn;
115 List<AbstractInsnNode> args = values.stream().map(v -> v.right.insns.stream().findFirst().orElseThrow(AssertionError::new)).collect(Collectors.toList()); 114 List<AbstractInsnNode> args = values.stream().map(v -> v.right.insns.stream().findFirst().orElseThrow(AssertionError::new)).toList();
116 115
117 if ("java/lang/invoke/LambdaMetafactory".equals(invokeDynamicInsn.bsm.getOwner()) && "metafactory".equals(invokeDynamicInsn.bsm.getName())) { 116 if ("java/lang/invoke/LambdaMetafactory".equals(invokeDynamicInsn.bsm.getOwner()) && "metafactory".equals(invokeDynamicInsn.bsm.getName())) {
118 Type samMethodType = (Type) invokeDynamicInsn.bsmArgs[0]; 117 Type samMethodType = (Type) invokeDynamicInsn.bsmArgs[0];
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
index aa360cf..6c26282 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
@@ -44,7 +44,7 @@ public class JarIndex implements JarIndexer {
44 this.referenceIndex = referenceIndex; 44 this.referenceIndex = referenceIndex;
45 this.bridgeMethodIndex = bridgeMethodIndex; 45 this.bridgeMethodIndex = bridgeMethodIndex;
46 this.packageVisibilityIndex = packageVisibilityIndex; 46 this.packageVisibilityIndex = packageVisibilityIndex;
47 this.indexers = Arrays.asList(entryIndex, inheritanceIndex, referenceIndex, bridgeMethodIndex, packageVisibilityIndex); 47 this.indexers = List.of(entryIndex, inheritanceIndex, referenceIndex, bridgeMethodIndex, packageVisibilityIndex);
48 this.entryResolver = new IndexEntryResolver(this); 48 this.entryResolver = new IndexEntryResolver(this);
49 this.childrenByClass = ArrayListMultimap.create(); 49 this.childrenByClass = ArrayListMultimap.create();
50 } 50 }
diff --git a/enigma/src/main/java/cuchaz/enigma/classprovider/ObfuscationFixClassProvider.java b/enigma/src/main/java/cuchaz/enigma/classprovider/ObfuscationFixClassProvider.java
index db9e2d0..36236a8 100644
--- a/enigma/src/main/java/cuchaz/enigma/classprovider/ObfuscationFixClassProvider.java
+++ b/enigma/src/main/java/cuchaz/enigma/classprovider/ObfuscationFixClassProvider.java
@@ -65,8 +65,7 @@ public class ObfuscationFixClassProvider implements ClassProvider {
65 for (MethodNode methodNode : node.methods) { 65 for (MethodNode methodNode : node.methods) {
66 AbstractInsnNode insnNode = methodNode.instructions.getFirst(); 66 AbstractInsnNode insnNode = methodNode.instructions.getFirst();
67 while (insnNode != null) { 67 while (insnNode != null) {
68 if (insnNode instanceof MethodInsnNode && insnNode.getOpcode() == Opcodes.INVOKEVIRTUAL) { 68 if (insnNode instanceof MethodInsnNode methodInsnNode && insnNode.getOpcode() == Opcodes.INVOKEVIRTUAL) {
69 MethodInsnNode methodInsnNode = (MethodInsnNode) insnNode;
70 if (methodInsnNode.name.equals("getClass") && methodInsnNode.owner.equals("java/lang/Object") && methodInsnNode.desc.equals("()Ljava/lang/Class;")) { 69 if (methodInsnNode.name.equals("getClass") && methodInsnNode.owner.equals("java/lang/Object") && methodInsnNode.desc.equals("()Ljava/lang/Class;")) {
71 AbstractInsnNode previous = methodInsnNode.getPrevious(); 70 AbstractInsnNode previous = methodInsnNode.getPrevious();
72 AbstractInsnNode next = methodInsnNode.getNext(); 71 AbstractInsnNode next = methodInsnNode.getNext();
diff --git a/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java b/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java
index ed6cfb9..971252e 100644
--- a/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java
@@ -13,7 +13,6 @@ import java.util.Collection;
13import java.util.List; 13import java.util.List;
14import java.util.Map; 14import java.util.Map;
15import java.util.TreeMap; 15import java.util.TreeMap;
16import java.util.stream.Collectors;
17 16
18public class SourceIndex { 17public class SourceIndex {
19 private String source; 18 private String source;
@@ -159,7 +158,7 @@ public class SourceIndex {
159 Collection<Token> newTokens = oldTokens 158 Collection<Token> newTokens = oldTokens
160 .stream() 159 .stream()
161 .map(result::getRemappedToken) 160 .map(result::getRemappedToken)
162 .collect(Collectors.toList()); 161 .toList();
163 162
164 remapped.referenceToTokens.putAll(reference, newTokens); 163 remapped.referenceToTokens.putAll(reference, newTokens);
165 } 164 }
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/Translator.java b/enigma/src/main/java/cuchaz/enigma/translation/Translator.java
index d3bc188..66c2f9e 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/Translator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/Translator.java
@@ -36,7 +36,7 @@ public interface Translator {
36 default <T extends Translatable> Collection<T> translate(Collection<T> translatable) { 36 default <T extends Translatable> Collection<T> translate(Collection<T> translatable) {
37 return translatable.stream() 37 return translatable.stream()
38 .map(this::translate) 38 .map(this::translate)
39 .collect(Collectors.toList()); 39 .toList();
40 } 40 }
41 41
42 default <T extends Translatable> Set<T> translate(Set<T> translatable) { 42 default <T extends Translatable> Set<T> translate(Set<T> translatable) {
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
index 5b79b79..f57dd90 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
@@ -10,16 +10,11 @@ public enum AccessModifier {
10 } 10 }
11 11
12 public AccessFlags transform(AccessFlags access) { 12 public AccessFlags transform(AccessFlags access) {
13 switch (this) { 13 return switch (this) {
14 case PUBLIC: 14 case PUBLIC -> access.setPublic();
15 return access.setPublic(); 15 case PROTECTED -> access.setProtected();
16 case PROTECTED: 16 case PRIVATE -> access.setPrivate();
17 return access.setProtected(); 17 default -> access;
18 case PRIVATE: 18 };
19 return access.setPrivate();
20 case UNCHANGED:
21 default:
22 return access;
23 }
24 } 19 }
25} 20}
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
index ef904d7..8b5490e 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
@@ -2,7 +2,6 @@ package cuchaz.enigma.translation.mapping;
2 2
3import java.util.Collection; 3import java.util.Collection;
4import java.util.List; 4import java.util.List;
5import java.util.stream.Collectors;
6import java.util.stream.Stream; 5import java.util.stream.Stream;
7 6
8import javax.annotation.Nullable; 7import javax.annotation.Nullable;
@@ -95,7 +94,7 @@ public class EntryRemapper {
95 // Find all the methods in this record class 94 // Find all the methods in this record class
96 List<MethodEntry> classMethods = jarIndex.getEntryIndex().getMethods().stream() 95 List<MethodEntry> classMethods = jarIndex.getEntryIndex().getMethods().stream()
97 .filter(entry -> classEntry.equals(entry.getParent())) 96 .filter(entry -> classEntry.equals(entry.getParent()))
98 .collect(Collectors.toList()); 97 .toList();
99 98
100 MethodEntry methodEntry = null; 99 MethodEntry methodEntry = null;
101 100
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
index 521f72d..9dd0c3a 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
@@ -7,7 +7,6 @@ import cuchaz.enigma.translation.representation.entry.MethodEntry;
7 7
8import java.util.Collection; 8import java.util.Collection;
9import java.util.Set; 9import java.util.Set;
10import java.util.stream.Collectors;
11 10
12public interface EntryResolver { 11public interface EntryResolver {
13 <E extends Entry<?>> Collection<E> resolveEntry(E entry, ResolutionStrategy strategy); 12 <E extends Entry<?>> Collection<E> resolveEntry(E entry, ResolutionStrategy strategy);
@@ -21,11 +20,11 @@ public interface EntryResolver {
21 if (reference.context != null) { 20 if (reference.context != null) {
22 Collection<C> context = resolveEntry(reference.context, strategy); 21 Collection<C> context = resolveEntry(reference.context, strategy);
23 return Streams.zip(entry.stream(), context.stream(), (e, c) -> new EntryReference<>(e, c, reference)) 22 return Streams.zip(entry.stream(), context.stream(), (e, c) -> new EntryReference<>(e, c, reference))
24 .collect(Collectors.toList()); 23 .toList();
25 } else { 24 } else {
26 return entry.stream() 25 return entry.stream()
27 .map(e -> new EntryReference<>(e, null, reference)) 26 .map(e -> new EntryReference<>(e, null, reference))
28 .collect(Collectors.toList()); 27 .toList();
29 } 28 }
30 } 29 }
31 30
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/IdentifierValidation.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IdentifierValidation.java
index 9595c4e..e3aeb20 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/IdentifierValidation.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IdentifierValidation.java
@@ -11,7 +11,6 @@
11 11
12package cuchaz.enigma.translation.mapping; 12package cuchaz.enigma.translation.mapping;
13 13
14import java.util.Arrays;
15import java.util.List; 14import java.util.List;
16 15
17import cuchaz.enigma.utils.validation.Message; 16import cuchaz.enigma.utils.validation.Message;
@@ -23,12 +22,13 @@ public final class IdentifierValidation {
23 private IdentifierValidation() { 22 private IdentifierValidation() {
24 } 23 }
25 24
26 private static final List<String> ILLEGAL_IDENTIFIERS = Arrays.asList( 25 private static final List<String> ILLEGAL_IDENTIFIERS = List.of(
27 "abstract", "continue", "for", "new", "switch", "assert", "default", "goto", "package", "synchronized", 26 "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
28 "boolean", "do", "if", "private", "this", "break", "double", "implements", "protected", "throw", "byte", 27 "continue", "default", "do", "double", "else", "enum", "extends", "false", "final", "finally",
29 "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch", 28 "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long",
30 "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally", 29 "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static",
31 "long", "strictfp", "volatile", "const", "float", "native", "super", "while", "true", "false", "null", "_" 30 "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try",
31 "void", "volatile", "while", "_"
32 ); 32 );
33 33
34 public static boolean validateClassName(ValidationContext vc, String name, boolean isInner) { 34 public static boolean validateClassName(ValidationContext vc, String name, boolean isInner) {
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
index 78231dd..1a89df7 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
@@ -16,7 +16,6 @@ import cuchaz.enigma.translation.representation.entry.MethodEntry;
16 16
17import javax.annotation.Nullable; 17import javax.annotation.Nullable;
18import java.util.*; 18import java.util.*;
19import java.util.stream.Collectors;
20 19
21public class IndexEntryResolver implements EntryResolver { 20public class IndexEntryResolver implements EntryResolver {
22 private final EntryIndex entryIndex; 21 private final EntryIndex entryIndex;
@@ -54,7 +53,7 @@ public class IndexEntryResolver implements EntryResolver {
54 if (!resolvedChildren.isEmpty()) { 53 if (!resolvedChildren.isEmpty()) {
55 return resolvedChildren.stream() 54 return resolvedChildren.stream()
56 .map(resolvedChild -> (E) entry.replaceAncestor(classChild, resolvedChild)) 55 .map(resolvedChild -> (E) entry.replaceAncestor(classChild, resolvedChild))
57 .collect(Collectors.toList()); 56 .toList();
58 } 57 }
59 } 58 }
60 } 59 }
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
index f9f3b88..1615912 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
@@ -2,7 +2,7 @@ package cuchaz.enigma.translation.mapping;
2 2
3import java.util.Collection; 3import java.util.Collection;
4import java.util.HashSet; 4import java.util.HashSet;
5import java.util.stream.Collectors; 5import java.util.List;
6 6
7import cuchaz.enigma.analysis.index.InheritanceIndex; 7import cuchaz.enigma.analysis.index.InheritanceIndex;
8import cuchaz.enigma.analysis.index.JarIndex; 8import cuchaz.enigma.analysis.index.JarIndex;
@@ -41,9 +41,9 @@ public class MappingValidator {
41 Entry<?> relatedEntry = entry.replaceAncestor(containingClass, relatedClass); 41 Entry<?> relatedEntry = entry.replaceAncestor(containingClass, relatedClass);
42 Entry<?> translatedEntry = deobfuscator.translate(relatedEntry); 42 Entry<?> translatedEntry = deobfuscator.translate(relatedEntry);
43 43
44 Collection<Entry<?>> translatedSiblings = obfToDeobf.getSiblings(relatedEntry).stream() 44 List<? extends Entry<?>> translatedSiblings = obfToDeobf.getSiblings(relatedEntry).stream()
45 .map(deobfuscator::translate) 45 .map(deobfuscator::translate)
46 .collect(Collectors.toList()); 46 .toList();
47 47
48 if (!isUnique(translatedEntry, translatedSiblings, name)) { 48 if (!isUnique(translatedEntry, translatedSiblings, name)) {
49 Entry<?> parent = translatedEntry.getParent(); 49 Entry<?> parent = translatedEntry.getParent();
@@ -67,7 +67,7 @@ public class MappingValidator {
67 return relatedClasses; 67 return relatedClasses;
68 } 68 }
69 69
70 private boolean isUnique(Entry<?> entry, Collection<Entry<?>> siblings, String name) { 70 private boolean isUnique(Entry<?> entry, List<? extends Entry<?>> siblings, String name) {
71 for (Entry<?> sibling : siblings) { 71 for (Entry<?> sibling : siblings) {
72 if (entry.canConflictWith(sibling) && sibling.getName().equals(name)) { 72 if (entry.canConflictWith(sibling) && sibling.getName().equals(name)) {
73 return false; 73 return false;
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
index 5d9794f..141a07c 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
@@ -24,7 +24,6 @@ import cuchaz.enigma.translation.representation.entry.MethodEntry;
24import java.util.Collection; 24import java.util.Collection;
25import java.util.HashMap; 25import java.util.HashMap;
26import java.util.Map; 26import java.util.Map;
27import java.util.stream.Collectors;
28 27
29public class MappingsChecker { 28public class MappingsChecker {
30 private final JarIndex index; 29 private final JarIndex index;
@@ -40,7 +39,7 @@ public class MappingsChecker {
40 39
41 Collection<Entry<?>> obfEntries = mappings.getAllEntries() 40 Collection<Entry<?>> obfEntries = mappings.getAllEntries()
42 .filter(e -> e instanceof ClassEntry || e instanceof MethodEntry || e instanceof FieldEntry || e instanceof LocalVariableEntry) 41 .filter(e -> e instanceof ClassEntry || e instanceof MethodEntry || e instanceof FieldEntry || e instanceof LocalVariableEntry)
43 .collect(Collectors.toList()); 42 .toList();
44 43
45 progress.init(obfEntries.size(), "Checking for dropped mappings"); 44 progress.init(obfEntries.size(), "Checking for dropped mappings");
46 45
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java
index a1e975c..27545c0 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java
@@ -28,7 +28,6 @@ import java.util.Arrays;
28import java.util.Deque; 28import java.util.Deque;
29import java.util.List; 29import java.util.List;
30import java.util.Locale; 30import java.util.Locale;
31import java.util.stream.Collectors;
32 31
33public enum EnigmaMappingsReader implements MappingsReader { 32public enum EnigmaMappingsReader implements MappingsReader {
34 FILE { 33 FILE {
@@ -52,7 +51,7 @@ public enum EnigmaMappingsReader implements MappingsReader {
52 List<Path> files = Files.walk(root) 51 List<Path> files = Files.walk(root)
53 .filter(f -> !Files.isDirectory(f)) 52 .filter(f -> !Files.isDirectory(f))
54 .filter(f -> f.toString().endsWith(".mapping")) 53 .filter(f -> f.toString().endsWith(".mapping"))
55 .collect(Collectors.toList()); 54 .toList();
56 55
57 progress.init(files.size(), I18n.translate("progress.mappings.enigma_directory.loading")); 56 progress.init(files.size(), I18n.translate("progress.mappings.enigma_directory.loading"));
58 int step = 0; 57 int step = 0;
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java
index 378ed98..d9f1470 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java
@@ -26,7 +26,6 @@ import java.util.Collection;
26import java.util.Collections; 26import java.util.Collections;
27import java.util.Objects; 27import java.util.Objects;
28import java.util.concurrent.atomic.AtomicInteger; 28import java.util.concurrent.atomic.AtomicInteger;
29import java.util.stream.Collectors;
30import java.util.stream.Stream; 29import java.util.stream.Stream;
31 30
32import cuchaz.enigma.ProgressListener; 31import cuchaz.enigma.ProgressListener;
@@ -57,7 +56,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
57 Collection<ClassEntry> classes = mappings.getRootNodes() 56 Collection<ClassEntry> classes = mappings.getRootNodes()
58 .filter(entry -> entry.getEntry() instanceof ClassEntry) 57 .filter(entry -> entry.getEntry() instanceof ClassEntry)
59 .map(entry -> (ClassEntry) entry.getEntry()) 58 .map(entry -> (ClassEntry) entry.getEntry())
60 .collect(Collectors.toList()); 59 .toList();
61 60
62 progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing")); 61 progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing"));
63 62
@@ -78,7 +77,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
78 Collection<ClassEntry> changedClasses = delta.getChangedRoots() 77 Collection<ClassEntry> changedClasses = delta.getChangedRoots()
79 .filter(entry -> entry instanceof ClassEntry) 78 .filter(entry -> entry instanceof ClassEntry)
80 .map(entry -> (ClassEntry) entry) 79 .map(entry -> (ClassEntry) entry)
81 .collect(Collectors.toList()); 80 .toList();
82 81
83 applyDeletions(path, changedClasses, mappings, delta.getBaseMappings(), saveParameters.getFileNameFormat()); 82 applyDeletions(path, changedClasses, mappings, delta.getBaseMappings(), saveParameters.getFileNameFormat());
84 83
@@ -120,7 +119,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
120 deletedClassStream = deletedClassStream.map(oldMappingTranslator::translate); 119 deletedClassStream = deletedClassStream.map(oldMappingTranslator::translate);
121 } 120 }
122 121
123 Collection<ClassEntry> deletedClasses = deletedClassStream.collect(Collectors.toList()); 122 Collection<ClassEntry> deletedClasses = deletedClassStream.toList();
124 123
125 for (ClassEntry classEntry : deletedClasses) { 124 for (ClassEntry classEntry : deletedClasses) {
126 try { 125 try {
@@ -309,9 +308,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
309 308
310 private String indent(String line, int depth) { 309 private String indent(String line, int depth) {
311 StringBuilder builder = new StringBuilder(); 310 StringBuilder builder = new StringBuilder();
312 for (int i = 0; i < depth; i++) { 311 builder.append("\t".repeat(Math.max(0, depth)));
313 builder.append("\t");
314 }
315 builder.append(line.trim()); 312 builder.append(line.trim());
316 return builder.toString(); 313 return builder.toString();
317 } 314 }
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java
index 9c9f103..9275847 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java
@@ -26,7 +26,6 @@ import java.util.ArrayList;
26import java.util.Collection; 26import java.util.Collection;
27import java.util.Comparator; 27import java.util.Comparator;
28import java.util.List; 28import java.util.List;
29import java.util.stream.Collectors;
30 29
31public enum SrgMappingsWriter implements MappingsWriter { 30public enum SrgMappingsWriter implements MappingsWriter {
32 INSTANCE; 31 INSTANCE;
@@ -44,9 +43,9 @@ public enum SrgMappingsWriter implements MappingsWriter {
44 List<String> fieldLines = new ArrayList<>(); 43 List<String> fieldLines = new ArrayList<>();
45 List<String> methodLines = new ArrayList<>(); 44 List<String> methodLines = new ArrayList<>();
46 45
47 Collection<Entry<?>> rootEntries = Lists.newArrayList(mappings).stream() 46 List<? extends Entry<?>> rootEntries = Lists.newArrayList(mappings).stream()
48 .map(EntryTreeNode::getEntry) 47 .map(EntryTreeNode::getEntry)
49 .collect(Collectors.toList()); 48 .toList();
50 progress.init(rootEntries.size(), I18n.translate("progress.mappings.srg_file.generating")); 49 progress.init(rootEntries.size(), I18n.translate("progress.mappings.srg_file.generating"));
51 50
52 int steps = 0; 51 int steps = 0;
@@ -111,7 +110,7 @@ public enum SrgMappingsWriter implements MappingsWriter {
111 return entry.getParent().getFullName() + "/" + entry.getName(); 110 return entry.getParent().getFullName() + "/" + entry.getName();
112 } 111 }
113 112
114 private Collection<Entry<?>> sorted(Iterable<Entry<?>> iterable) { 113 private Collection<Entry<?>> sorted(Iterable<? extends Entry<?>> iterable) {
115 ArrayList<Entry<?>> sorted = Lists.newArrayList(iterable); 114 ArrayList<Entry<?>> sorted = Lists.newArrayList(iterable);
116 sorted.sort(Comparator.comparing(Entry::getName)); 115 sorted.sort(Comparator.comparing(Entry::getName));
117 return sorted; 116 return sorted;
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java
index 5546b2f..5160eda 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java
@@ -24,7 +24,6 @@ import java.nio.file.Path;
24import java.util.Deque; 24import java.util.Deque;
25import java.util.LinkedList; 25import java.util.LinkedList;
26import java.util.List; 26import java.util.List;
27import java.util.stream.Collectors;
28import java.util.stream.StreamSupport; 27import java.util.stream.StreamSupport;
29 28
30public final class TinyV2Writer implements MappingsWriter { 29public final class TinyV2Writer implements MappingsWriter {
@@ -40,7 +39,7 @@ public final class TinyV2Writer implements MappingsWriter {
40 39
41 @Override 40 @Override
42 public void write(EntryTree<EntryMapping> mappings, MappingDelta<EntryMapping> delta, Path path, ProgressListener progress, MappingSaveParameters parameters) { 41 public void write(EntryTree<EntryMapping> mappings, MappingDelta<EntryMapping> delta, Path path, ProgressListener progress, MappingSaveParameters parameters) {
43 List<EntryTreeNode<EntryMapping>> classes = StreamSupport.stream(mappings.spliterator(), false).filter(node -> node.getEntry() instanceof ClassEntry).collect(Collectors.toList()); 42 List<EntryTreeNode<EntryMapping>> classes = StreamSupport.stream(mappings.spliterator(), false).filter(node -> node.getEntry() instanceof ClassEntry).toList();
44 43
45 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) { 44 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) {
46 writer.println("tiny\t2\t" + MINOR_VERSION + "\t" + obfHeader + "\t" + deobfHeader); 45 writer.println("tiny\t2\t" + MINOR_VERSION + "\t" + obfHeader + "\t" + deobfHeader);
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
index affcd50..eb26ea9 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
@@ -5,7 +5,7 @@ import cuchaz.enigma.translation.representation.entry.Entry;
5import javax.annotation.Nullable; 5import javax.annotation.Nullable;
6import java.util.ArrayList; 6import java.util.ArrayList;
7import java.util.Collection; 7import java.util.Collection;
8import java.util.stream.Collectors; 8import java.util.List;
9 9
10public interface EntryTreeNode<T> { 10public interface EntryTreeNode<T> {
11 @Nullable 11 @Nullable
@@ -28,10 +28,10 @@ public interface EntryTreeNode<T> {
28 return nodes; 28 return nodes;
29 } 29 }
30 30
31 default Collection<Entry<?>> getChildrenRecursively() { 31 default List<? extends Entry<?>> getChildrenRecursively() {
32 return getNodesRecursively().stream() 32 return getNodesRecursively().stream()
33 .map(EntryTreeNode::getEntry) 33 .map(EntryTreeNode::getEntry)
34 .collect(Collectors.toList()); 34 .toList();
35 } 35 }
36 36
37 default boolean hasValue() { 37 default boolean hasValue() {
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/I18n.java b/enigma/src/main/java/cuchaz/enigma/utils/I18n.java
index cb498e0..26e5b27 100644
--- a/enigma/src/main/java/cuchaz/enigma/utils/I18n.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/I18n.java
@@ -18,15 +18,10 @@ import com.google.gson.Gson;
18public class I18n { 18public class I18n {
19 public static final String DEFAULT_LANGUAGE = "en_us"; 19 public static final String DEFAULT_LANGUAGE = "en_us";
20 private static final Gson GSON = new Gson(); 20 private static final Gson GSON = new Gson();
21 private static Map<String, String> translations = Maps.newHashMap(); 21 private static Map<String, String> defaultTranslations = load(DEFAULT_LANGUAGE);
22 private static Map<String, String> defaultTranslations = Maps.newHashMap(); 22 private static Map<String, String> translations = defaultTranslations;
23 private static Map<String, String> languageNames = Maps.newHashMap(); 23 private static Map<String, String> languageNames = Maps.newHashMap();
24 24
25 static {
26 defaultTranslations = load(DEFAULT_LANGUAGE);
27 translations = defaultTranslations;
28 }
29
30 @SuppressWarnings("unchecked") 25 @SuppressWarnings("unchecked")
31 public static Map<String, String> load(String language) { 26 public static Map<String, String> load(String language) {
32 try (InputStream inputStream = I18n.class.getResourceAsStream("/lang/" + language + ".json")) { 27 try (InputStream inputStream = I18n.class.getResourceAsStream("/lang/" + language + ".json")) {
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/Utils.java b/enigma/src/main/java/cuchaz/enigma/utils/Utils.java
index 8beaaae..ad4e936 100644
--- a/enigma/src/main/java/cuchaz/enigma/utils/Utils.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/Utils.java
@@ -27,7 +27,6 @@ import java.util.List;
27import java.util.Locale; 27import java.util.Locale;
28import java.util.concurrent.locks.Lock; 28import java.util.concurrent.locks.Lock;
29import java.util.function.Supplier; 29import java.util.function.Supplier;
30import java.util.stream.Collectors;
31import java.util.zip.ZipEntry; 30import java.util.zip.ZipEntry;
32import java.util.zip.ZipFile; 31import java.util.zip.ZipFile;
33 32
@@ -46,7 +45,7 @@ public class Utils {
46 45
47 public static void delete(Path path) throws IOException { 46 public static void delete(Path path) throws IOException {
48 if (Files.exists(path)) { 47 if (Files.exists(path)) {
49 for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList())) { 48 for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).toList()) {
50 Files.delete(p); 49 Files.delete(p);
51 } 50 }
52 } 51 }
@@ -97,17 +96,4 @@ public class Utils {
97 l.unlock(); 96 l.unlock();
98 } 97 }
99 } 98 }
100
101
102 public static boolean isBlank(String input) {
103 if (input == null) {
104 return true;
105 }
106 for (int i = 0; i < input.length(); i++) {
107 if (!Character.isWhitespace(input.charAt(i))) {
108 return false;
109 }
110 }
111 return true;
112 }
113} 99}
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java b/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java
index 48a5a10..9ad5867 100644
--- a/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java
@@ -26,8 +26,7 @@ public final class ParameterizedMessage {
26 @Override 26 @Override
27 public boolean equals(Object o) { 27 public boolean equals(Object o) {
28 if (this == o) return true; 28 if (this == o) return true;
29 if (!(o instanceof ParameterizedMessage)) return false; 29 if (!(o instanceof ParameterizedMessage that)) return false;
30 ParameterizedMessage that = (ParameterizedMessage) o;
31 return Objects.equals(message, that.message) && 30 return Objects.equals(message, that.message) &&
32 Arrays.equals(params, that.params) && 31 Arrays.equals(params, that.params) &&
33 Objects.equals(target, that.target); 32 Objects.equals(target, that.target);
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/validation/PrintValidatable.java b/enigma/src/main/java/cuchaz/enigma/utils/validation/PrintValidatable.java
index fe91cc1..81b6c43 100644
--- a/enigma/src/main/java/cuchaz/enigma/utils/validation/PrintValidatable.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/validation/PrintValidatable.java
@@ -10,20 +10,11 @@ public class PrintValidatable implements Validatable {
10 public void addMessage(ParameterizedMessage message) { 10 public void addMessage(ParameterizedMessage message) {
11 String text = message.getText(); 11 String text = message.getText();
12 String longText = message.getLongText(); 12 String longText = message.getLongText();
13 String type; 13 String type = switch (message.message.type) {
14 switch (message.message.type) { 14 case INFO -> "info";
15 case INFO: 15 case WARNING -> "warning";
16 type = "info"; 16 case ERROR -> "error";
17 break; 17 };
18 case WARNING:
19 type = "warning";
20 break;
21 case ERROR:
22 type = "error";
23 break;
24 default:
25 throw new IllegalStateException("unreachable");
26 }
27 System.out.printf("%s: %s\n", type, text); 18 System.out.printf("%s: %s\n", type, text);
28 if (!longText.isEmpty()) { 19 if (!longText.isEmpty()) {
29 Arrays.stream(longText.split("\n")).forEach(s -> System.out.printf(" %s\n", s)); 20 Arrays.stream(longText.split("\n")).forEach(s -> System.out.printf(" %s\n", s));