From e0efb9892240f26f3688e923b555fc8077fd9a74 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Wed, 7 Dec 2022 20:08:19 +0100 Subject: Improve error handling in some places (#464) * Improve error handling in some places * Address PR feedback * Address PR feedback (2) Co-authored-by: modmuss50 * Address PR feedback (3) * Fix checkstyle Co-authored-by: modmuss50 --- .../java/cuchaz/enigma/analysis/index/JarIndex.java | 6 +++++- .../mapping/serde/MappingParseException.java | 19 ++++++++++++------- .../mapping/serde/enigma/EnigmaMappingsReader.java | 11 +++++++---- .../serde/proguard/ProguardMappingsReader.java | 6 +++--- .../mapping/serde/tiny/TinyMappingsReader.java | 3 +-- .../mapping/serde/tinyv2/TinyV2Reader.java | 3 +-- 6 files changed, 29 insertions(+), 19 deletions(-) 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 60864ba5..336ad58c 100644 --- a/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java +++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java @@ -84,7 +84,11 @@ public class JarIndex implements JarIndexer { progress.step(2, I18n.translate("progress.jar.indexing.references")); for (String className : classNames) { - classProvider.get(className).accept(new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Enigma.ASM_VERSION)); + try { + classProvider.get(className).accept(new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Enigma.ASM_VERSION)); + } catch (Exception e) { + throw new RuntimeException("Exception while indexing class: " + className, e); + } } progress.step(3, I18n.translate("progress.jar.indexing.methods")); diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java index 6f5d7d6e..ec05dabd 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java @@ -12,27 +12,32 @@ package cuchaz.enigma.translation.mapping.serde; import java.io.File; -import java.util.function.Supplier; +import java.nio.file.Path; public class MappingParseException extends Exception { private int line; private String message; - private String filePath; + private Path filePath; public MappingParseException(File file, int line, String message) { + this(file.toPath(), line, message); + } + + public MappingParseException(Path filePath, int line, String message) { this.line = line; this.message = message; - filePath = file.getAbsolutePath(); + this.filePath = filePath; } - public MappingParseException(Supplier filenameProvider, int line, String message) { + public MappingParseException(Path filePath, int line, Throwable cause) { + super(cause); this.line = line; - this.message = message; - filePath = filenameProvider.get(); + this.message = cause.toString(); + this.filePath = filePath; } @Override public String getMessage() { - return "Line " + line + ": " + message + " in file " + filePath; + return "Line " + line + ": " + message + " in file " + filePath.toString(); } } 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 1f8b7558..54613426 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 @@ -4,6 +4,7 @@ import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; +import java.nio.file.NotDirectoryException; import java.nio.file.Path; import java.util.ArrayDeque; import java.util.Arrays; @@ -52,8 +53,11 @@ public enum EnigmaMappingsReader implements MappingsReader { DIRECTORY { @Override public EntryTree read(Path root, ProgressListener progress, MappingSaveParameters saveParameters) throws IOException, MappingParseException { - EntryTree mappings = new HashEntryTree<>(); + if (!Files.isDirectory(root)) { + throw new NotDirectoryException(root.toString()); + } + EntryTree mappings = new HashEntryTree<>(); List files = Files.walk(root).filter(f -> !Files.isDirectory(f)).filter(f -> f.toString().endsWith(".mapping")).toList(); progress.init(files.size(), I18n.translate("progress.mappings.enigma_directory.loading")); @@ -132,8 +136,7 @@ public enum EnigmaMappingsReader implements MappingsReader { mappingStack.push(pair); } } catch (Throwable t) { - t.printStackTrace(); - throw new MappingParseException(path::toString, lineNumber + 1, t.toString()); + throw new MappingParseException(path, lineNumber + 1, t); } } @@ -183,7 +186,7 @@ public enum EnigmaMappingsReader implements MappingsReader { for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == ' ') { - throw new MappingParseException(path::toString, lineNumber + 1, "Spaces must not be used to indent lines!"); + throw new MappingParseException(path, lineNumber + 1, "Spaces must not be used to indent lines!"); } if (line.charAt(i) != '\t') { diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java index fc550d4d..b839c079 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java @@ -62,7 +62,7 @@ public class ProguardMappingsReader implements MappingsReader { String targetName = fieldMatcher.group(3); if (currentClass == null) { - throw new MappingParseException(path::toString, lineNumber, "field mapping not inside class: " + line); + throw new MappingParseException(path, lineNumber, "field mapping not inside class: " + line); } mappings.insert(new FieldEntry(currentClass, name, new TypeDescriptor(getDescriptor(type))), new EntryMapping(targetName)); @@ -73,12 +73,12 @@ public class ProguardMappingsReader implements MappingsReader { String targetName = methodMatcher.group(4); if (currentClass == null) { - throw new MappingParseException(path::toString, lineNumber, "method mapping not inside class: " + line); + throw new MappingParseException(path, lineNumber, "method mapping not inside class: " + line); } mappings.insert(new MethodEntry(currentClass, name, new MethodDescriptor(getDescriptor(returnType, parameterTypes))), new EntryMapping(targetName)); } else { - throw new MappingParseException(path::toString, lineNumber, "invalid mapping line: " + line); + throw new MappingParseException(path, lineNumber, "invalid mapping line: " + line); } } diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java index e08c8673..534a567c 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java @@ -50,8 +50,7 @@ public enum TinyMappingsReader implements MappingsReader { MappingPair mapping = parseLine(line); mappings.insert(mapping.getEntry(), mapping.getMapping()); } catch (Throwable t) { - t.printStackTrace(); - throw new MappingParseException(path::toString, lineNumber, t.toString()); + throw new MappingParseException(path, lineNumber, t); } } diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java index 61bc41da..eecbc35b 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java @@ -187,8 +187,7 @@ public final class TinyV2Reader implements MappingsReader { unsupportKey(parts); } } catch (Throwable t) { - t.printStackTrace(); - throw new MappingParseException(path::toString, lineNumber + 1, t.toString()); + throw new MappingParseException(path, lineNumber + 1, t); } } -- cgit v1.2.3