From 49e696255e9b623535679f228384ea45d4f89cfd Mon Sep 17 00:00:00 2001 From: Thiakil Date: Mon, 23 Jul 2018 12:41:19 +0800 Subject: fix source index tokens for inner classes that are not mapped --- src/main/java/cuchaz/enigma/analysis/SourceIndex.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java index 14b2e768..78195cb7 100644 --- a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java @@ -17,15 +17,19 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.strobel.decompiler.languages.Region; import com.strobel.decompiler.languages.java.ast.AstNode; +import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration; import com.strobel.decompiler.languages.java.ast.Identifier; +import com.strobel.decompiler.languages.java.ast.TypeDeclaration; import cuchaz.enigma.mapping.entry.Entry; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.regex.Pattern; public class SourceIndex { + private static Pattern ANONYMOUS_INNER = Pattern.compile("\\$\\d+$"); private String source; private TreeMap> tokenToReference; @@ -81,6 +85,14 @@ public class SourceIndex { return null; } + if (node instanceof Identifier && name.indexOf('$') >=0 && node.getParent() instanceof ConstructorDeclaration && name.lastIndexOf('$') >= 0 && !ANONYMOUS_INNER.matcher(name).matches()){ + TypeDeclaration type = node.getParent().getParent() instanceof TypeDeclaration ? (TypeDeclaration) node.getParent().getParent() : null; + if (type != null){ + name = type.getName(); + token.end = token.start + name.length(); + } + } + // DEBUG // System.out.println( String.format( "%s \"%s\" region: %s", node.getNodeType(), name, region ) ); -- cgit v1.2.3