diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index 2b6cd3c..4a94ac1 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -86,6 +86,30 @@
     return this;
   }
 
+  public KotlinCompilerTool addSourceFilesWithNonKtExtension(TemporaryFolder temp, Path... files) {
+    return addSourceFilesWithNonKtExtension(temp, Arrays.asList(files));
+  }
+
+  public KotlinCompilerTool addSourceFilesWithNonKtExtension(
+      TemporaryFolder temp, Collection<Path> files) {
+    return addSourceFiles(
+        files.stream()
+            .map(
+                fileNotNamedKt -> {
+                  try {
+                    // The Kotlin compiler does not require particular naming of files except for
+                    // the extension,
+                    // so just create a file called source.kt in a new directory.
+                    Path fileNamedKt = temp.newFolder().toPath().resolve("source.kt");
+                    Files.copy(fileNotNamedKt, fileNamedKt);
+                    return fileNamedKt;
+                  } catch (IOException e) {
+                    throw new RuntimeException(e);
+                  }
+                })
+            .collect(Collectors.toList()));
+  }
+
   public KotlinCompilerTool addClasspathFiles(Path... files) {
     return addClasspathFiles(Arrays.asList(files));
   }
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 9b2f89b..d3bc8da 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -716,6 +716,10 @@
     return dataResources;
   }
 
+  protected static Path getFileInTest(String folder, String fileName) {
+    return Paths.get(ToolHelper.TESTS_DIR, "java", folder, fileName);
+  }
+
   /**
    * Create a temporary JAR file containing all test classes in a package.
    */
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
index b643c4b..57cd84c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
@@ -148,7 +148,8 @@
     ProcessResult kotlinTestCompileResult =
         kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
             .addClasspathFiles(libJar)
-            .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/sealed_app", "invalid"))
+            .addSourceFilesWithNonKtExtension(
+                temp, getFileInTest(PKG_PREFIX + "/sealed_app", "invalid.kt_txt"))
             .setOutputPath(temp.newFolder().toPath())
             .compileRaw();
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/sealed_app/invalid.kt b/src/test/java/com/android/tools/r8/kotlin/metadata/sealed_app/invalid.kt_txt
similarity index 100%
rename from src/test/java/com/android/tools/r8/kotlin/metadata/sealed_app/invalid.kt
rename to src/test/java/com/android/tools/r8/kotlin/metadata/sealed_app/invalid.kt_txt
