Only register subtype if subtype information is available.
Bug:
Change-Id: I019964a922dd933657147f7d91f3d26df576b6c1
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 81c13db..7954ae4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -83,7 +83,9 @@
: factory.createField(lambdaClassType, lambdaClassType, rewriter.instanceFieldName);
// We have to register this new class as a subtype of object.
- factory.objectType.addDirectSubtype(type);
+ if (rewriter.appInfo.hasSubtyping()) {
+ factory.objectType.addDirectSubtype(type);
+ }
}
// Generate unique lambda class type for lambda descriptor and instantiation point context.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 7d3bc33..af32cb7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.desugar;
import com.android.tools.r8.dex.Constants;
+import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.DexApplication.Builder;
import com.android.tools.r8.graph.DexCallSite;
import com.android.tools.r8.graph.DexEncodedMethod;
@@ -57,6 +58,7 @@
static final String LAMBDA_INSTANCE_FIELD_NAME = "INSTANCE";
final IRConverter converter;
+ final AppInfo appInfo;
final DexItemFactory factory;
final DexMethod metafactoryMethod;
@@ -78,7 +80,6 @@
//
// NOTE: synchronize concurrent access on `knownCallSites`.
private final Map<DexCallSite, LambdaDescriptor> knownCallSites = new IdentityHashMap<>();
-
// Maps lambda class type into lambda class representation. Since lambda class
// type uniquely defines lambda class, effectively canonicalizes lambda classes.
// NOTE: synchronize concurrent access on `knownLambdaClasses`.
@@ -93,6 +94,7 @@
assert converter != null;
this.converter = converter;
this.factory = converter.application.dexItemFactory;
+ this.appInfo = converter.appInfo;
DexType metafactoryType = factory.createType(METAFACTORY_TYPE_DESCR);
DexType callSiteType = factory.createType(CALLSITE_TYPE_DESCR);