diff --git a/src/main/java/com/android/tools/r8/code/DexItemBasedConstString.java b/src/main/java/com/android/tools/r8/code/DexItemBasedConstString.java index a55ddfae5..876248e62 100644 --- a/src/main/java/com/android/tools/r8/code/DexItemBasedConstString.java +++ b/src/main/java/com/android/tools/r8/code/DexItemBasedConstString.java @@ -14,15 +14,19 @@ import java.nio.ShortBuffer; public class DexItemBasedConstString extends Format21c { + private final Exception origin; + public static final String NAME = "DexItemBasedConstString"; public static final String SMALI_NAME = "const-string*"; private final ClassNameComputationInfo classNameComputationInfo; public DexItemBasedConstString( - int register, DexReference string, ClassNameComputationInfo classNameComputationInfo) { + int register, DexReference string, ClassNameComputationInfo classNameComputationInfo, + Exception origin) { super(register, string); this.classNameComputationInfo = classNameComputationInfo; + this.origin = origin; } public DexReference getItem() { @@ -73,6 +77,8 @@ public class DexItemBasedConstString extends Format21c { @Override public void write(ShortBuffer dest, ObjectToOffsetMapping mapping) { + System.out.println("[R8 logging]: origin of DexItemBasedConstString"); + origin.printStackTrace(System.out); throw new Unreachable( "DexItemBasedConstString instructions should always be rewritten into ConstString"); } diff --git a/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java b/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java index 6b151b2dd..f62169bac 100644 --- a/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java +++ b/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java @@ -19,6 +19,8 @@ import com.android.tools.r8.ir.optimize.ReflectionOptimizer.ClassNameComputation public class DexItemBasedConstString extends ConstInstruction { + private final Exception origin; + private final DexReference item; private final ClassNameComputationInfo classNameComputationInfo; private final ThrowingInfo throwingInfo; @@ -36,6 +38,7 @@ public class DexItemBasedConstString extends ConstInstruction { this.item = item; this.classNameComputationInfo = classNameComputationInfo; this.throwingInfo = throwingInfo; + origin = new Exception(); } @Override @@ -72,7 +75,7 @@ public class DexItemBasedConstString extends ConstInstruction { builder.add( this, new com.android.tools.r8.code.DexItemBasedConstString( - dest, item, classNameComputationInfo)); + dest, item, classNameComputationInfo, origin)); } @Override diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java index d869977fd..20ad151bf 100644 --- a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java +++ b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java @@ -146,6 +146,27 @@ class IdentifierMinifier { private void replaceDexItemBasedConstStringInMethod(DexEncodedMethod encodedMethod) { if (!encodedMethod.getOptimizationInfo().useIdentifierNameString()) { + if (encodedMethod.getCode() != null) { + Code code = encodedMethod.getCode(); + if (code.isDexCode()) { + Instruction[] instructions = code.asDexCode().instructions; + for (Instruction instruction : instructions) { + if (instruction.isDexItemBasedConstString()) { + System.out.println( + "[R8 logging]: we're missing " + code.toString(encodedMethod, null)); + } + } + } else { + assert code.isCfCode(); + List<CfInstruction> instructions = code.asCfCode().instructions; + for (CfInstruction instruction : instructions) { + if (instruction.isDexItemBasedConstString()) { + System.out.println( + "[R8 logging]: we're missing " + code.toString(encodedMethod, null)); + } + } + } + } return; } // Abstract methods do not have code_item. @@ -156,6 +177,8 @@ class IdentifierMinifier { if (code == null) { return; } + System.out.println( + "[R8 logging]: replaceDexItemBasedConstString: " + encodedMethod.toSourceString()); if (code.isDexCode()) { Instruction[] instructions = code.asDexCode().instructions; for (int i = 0; i < instructions.length; ++i) { diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java index 4bdf87c74..cfed2d34b 100644 --- a/src/main/java/com/android/tools/r8/naming/Minifier.java +++ b/src/main/java/com/android/tools/r8/naming/Minifier.java @@ -79,6 +79,7 @@ public class Minifier { assert lens.verifyNoCollisions(appView.appInfo().classes(), appView.dexItemFactory()); timing.begin("MinifyIdentifiers"); + System.out.println("[R8 logging]: minify identifiers"); new IdentifierMinifier(appView, lens).run(); timing.end(); return lens; diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java index 4c2c8cfa8..ba6dd2285 100644 --- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java +++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java @@ -152,6 +152,7 @@ public class ProguardMapMinifier { NamingLens lens = new MinifiedRenaming(appView, classRenaming, methodRenaming, fieldRenaming); timing.begin("MinifyIdentifiers"); + System.out.println("[R8 logging]: minify identifiers (-applymapping)"); new IdentifierMinifier(appView, lens).run(); timing.end();