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");
+    });
   }
 }