Bail out of descriptor access for extensions with unknown JVM signature.
Bug: 119027642, 120397956
Change-Id: I0b6fc119100999bb70371a29197afb43ba1f3af6
diff --git a/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java b/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
index 21b9409..20621f9 100644
--- a/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
+++ b/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
@@ -69,8 +69,10 @@
return new JvmFunctionExtensionVisitor() {
@Override
public void visit(JvmMethodSignature desc) {
- name = desc.getName();
- descriptor = desc.getDesc();
+ if (desc != null) {
+ name = desc.getName();
+ descriptor = desc.getDesc();
+ }
}
};
}
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index 0607b0e..e26ec3d 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -28,7 +28,9 @@
import com.android.tools.r8.utils.ArtErrorParser.ArtErrorInfo;
import com.android.tools.r8.utils.ArtErrorParser.ArtErrorParserException;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.KeepingDiagnosticHandler;
import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
@@ -48,15 +50,25 @@
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import org.junit.Before;
import org.junit.ComparisonFailure;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
public abstract class CompilationTestBase {
+ protected KeepingDiagnosticHandler handler;
+ protected Reporter reporter;
+
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+ @Before
+ public void reset() {
+ handler = new KeepingDiagnosticHandler();
+ reporter = new Reporter(handler);
+ }
+
public AndroidApp runAndCheckVerification(
CompilerUnderTest compiler,
CompilationMode mode,
@@ -88,7 +100,7 @@
assertTrue(referenceApk == null || new File(referenceApk).exists());
AndroidAppConsumers outputApp;
if (compiler == CompilerUnderTest.R8) {
- R8Command.Builder builder = R8Command.builder();
+ R8Command.Builder builder = R8Command.builder(reporter);
builder.addProgramFiles(ListUtils.map(inputs, Paths::get));
if (pgConfs != null) {
builder.addProguardConfigurationFiles(
diff --git a/src/test/java/com/android/tools/r8/internal/NestTreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/NestTreeShakeJarVerificationTest.java
index e90c504..6514635 100644
--- a/src/test/java/com/android/tools/r8/internal/NestTreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/NestTreeShakeJarVerificationTest.java
@@ -4,10 +4,15 @@
package com.android.tools.r8.internal;
+import static org.junit.Assert.assertEquals;
+
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
import com.android.tools.r8.utils.AndroidApp;
import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.stream.Stream;
import org.junit.Test;
public class NestTreeShakeJarVerificationTest extends NestCompilationBase {
@@ -22,5 +27,13 @@
ImmutableList.of(BASE + PG_CONF, BASE + PG_CONF_NO_OPT),
options -> options.testing.allowTypeErrors = true,
ImmutableList.of(BASE + DEPLOY_JAR));
+ assertEquals(0, filterKotlinMetadata(handler.warnings).count());
+ assertEquals(0, filterKotlinMetadata(handler.infos).count());
+ }
+
+ private Stream<Diagnostic> filterKotlinMetadata(List<Diagnostic> warnings) {
+ return warnings.stream().filter(diagnostic -> {
+ return diagnostic.getDiagnosticMessage().contains("kotlin.Metadata");
+ });
}
}