summaryrefslogtreecommitdiff
path: root/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
diff options
context:
space:
mode:
authorGoogler <noreply@google.com>2017-02-24 22:49:46 +0000
committerColin Cross <ccross@android.com>2017-03-13 17:20:08 -0700
commitd3371d01485317d82c584e39838f6cf565076a68 (patch)
tree9fb9f34fe4930756102833fd52cca0437e3a258e /java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
parent90d5d5ca6672380b7a5ede3c240b2676b226818f (diff)
downloaddesugar-d3371d01485317d82c584e39838f6cf565076a68.tar.gz
More stable naming scheme for lambda classes in desugared android code
RELNOTES: More stable naming scheme for lambda classes in desugared android code -- PiperOrigin-RevId: 148506830 MOS_MIGRATED_REVID=148506830 GitOrigin-RevId: 0dcdb06fb5dce3425209de9bb66fc76e34279fb7 Change-Id: If747055f69903ddb5fd1bbd33c732f7342c9c064
Diffstat (limited to 'java/com/google/devtools/build/android/desugar/LambdaDesugaring.java')
-rw-r--r--java/com/google/devtools/build/android/desugar/LambdaDesugaring.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java b/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
index 79be2a3..a3cf3bf 100644
--- a/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
+++ b/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
@@ -55,6 +55,7 @@ class LambdaDesugaring extends ClassVisitor {
private String internalName;
private boolean isInterface;
+ private int lambdaCount;
public LambdaDesugaring(
ClassVisitor dest,
@@ -77,6 +78,7 @@ class LambdaDesugaring extends ClassVisitor {
String signature,
String superName,
String[] interfaces) {
+ checkState(internalName == null, "not intended for reuse but reused for %s", name);
internalName = name;
isInterface = BitFlags.isSet(access, Opcodes.ACC_INTERFACE);
super.visit(version, access, name, signature, superName, interfaces);
@@ -360,9 +362,13 @@ class LambdaDesugaring extends ClassVisitor {
// and ultimately we don't care if the bootstrap method was even on the bootclasspath
// when this class was compiled (although it must've been since javac is unhappy otherwise).
MethodHandle bsmMethod = toMethodHandle(publicLookup(), bsm, /*target*/ false);
- String lambdaClassName = lambdas.generateLambdaClass(
+ // Give generated classes to have more stable names (b/35643761). Use BSM's naming scheme
+ // but with separate counter for each surrounding class.
+ String lambdaClassName = internalName + "$$Lambda$" + (lambdaCount++);
+ lambdas.generateLambdaClass(
internalName,
- LambdaInfo.create(desc, bridgeInfo.methodReference(), bridgeInfo.bridgeMethod()),
+ LambdaInfo.create(
+ lambdaClassName, desc, bridgeInfo.methodReference(), bridgeInfo.bridgeMethod()),
bsmMethod,
args);
// Emit invokestatic that calls the factory method generated in the lambda class