Don't add lambdas from features into lambda groups
Bug: 148525512
Bug: 149369974
Change-Id: Id23f7982e14f71abca8fbfcc47775318cdfe8704
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
index 8fee6c5..a5e9d5c4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
@@ -234,7 +234,9 @@
cls.hasKotlinInfo()
&& cls.getKotlinInfo().isSyntheticClass()
&& cls.getKotlinInfo().asSyntheticClass().isLambda()
- && KotlinLambdaGroupIdFactory.hasValidAnnotations(kotlin, cls))
+ && KotlinLambdaGroupIdFactory.hasValidAnnotations(kotlin, cls)
+ && (appView.options().featureSplitConfiguration == null
+ || !appView.options().featureSplitConfiguration.isInFeature(cls)))
.sorted((a, b) -> a.type.slowCompareTo(b.type)) // Ensure stable ordering.
.forEachOrdered(
lambda -> {
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
index 405d65c..a06dcf8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
@@ -7,6 +7,7 @@
import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -15,7 +16,6 @@
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.ArchiveResourceProvider;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -102,16 +102,15 @@
instruction ->
instruction.asCheckCast().getType().toSourceString().contains("Base"))
.count());
- // TODO(b/148525512): The lambda group has 2 captures which capture "Feature".
- assertEquals(
- 2,
+ // The lambda group has no captures which capture "Feature" (lambdas in the feature are not
+ // in this lambda group).
+ assertTrue(
invokeMethod
.streamInstructions()
.filter(InstructionSubject::isCheckCast)
- .filter(
+ .noneMatch(
instruction ->
- instruction.asCheckCast().getType().toSourceString().contains("Feature"))
- .count());
+ instruction.asCheckCast().getType().toSourceString().contains("Feature")));
}
@Test
@@ -142,12 +141,6 @@
equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
.inspect(this::checkLambdaGroups);
- // TODO(b/148525512): Fails on 7.0.0 and 8.1.0.
- if (parameters.getRuntime().asDex().getVm().getVersion() == Version.V7_0_0
- || parameters.getRuntime().asDex().getVm().getVersion() == Version.V8_1_0) {
- return;
- }
-
// Run the code without the feature code present.
compileResult
.run(parameters.getRuntime(), baseKtClassName)