Report incomplete hierarchy error
This is the case when you reference a Java class in Kotlin whose superclass is not resolved. Previously this fact was swallowed by LazyJavaClassDescriptor leading to mysterious compilation errors #KT-5129 Fixed
This commit is contained in:
@@ -17,10 +17,11 @@
|
||||
package org.jetbrains.kotlin.cli;
|
||||
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.Charsets;
|
||||
import kotlin.io.IoPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.cli.common.CLICompiler;
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode;
|
||||
@@ -33,7 +34,10 @@ import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.TestName;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.util.List;
|
||||
|
||||
public class CliBaseTest {
|
||||
@@ -46,7 +50,7 @@ public class CliBaseTest {
|
||||
public final TestName testName = new TestName();
|
||||
|
||||
@NotNull
|
||||
private static Pair<String, ExitCode> executeCompilerGrabOutput(@NotNull CLICompiler<?> compiler, @NotNull List<String> args) {
|
||||
public static Pair<String, ExitCode> executeCompilerGrabOutput(@NotNull CLICompiler<?> compiler, @NotNull List<String> args) {
|
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
||||
PrintStream origErr = System.err;
|
||||
try {
|
||||
@@ -88,7 +92,7 @@ public class CliBaseTest {
|
||||
@NotNull final String testDataDir,
|
||||
@NotNull final String tempDir
|
||||
) throws IOException {
|
||||
List<String> lines = FileUtil.loadLines(new FileInputStream(argsFilePath));
|
||||
List<String> lines = IoPackage.readLines(new File(argsFilePath), Charsets.UTF_8);
|
||||
|
||||
return ContainerUtil.mapNotNull(lines, new Function<String, String>() {
|
||||
@Override
|
||||
|
||||
+30
@@ -18,11 +18,15 @@ package org.jetbrains.kotlin.jvm.compiler;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult;
|
||||
import org.jetbrains.kotlin.cli.CliBaseTest;
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode;
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport;
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorPlainTextToStream;
|
||||
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||
@@ -181,4 +185,30 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
|
||||
|
||||
assertEquals("There should be no diagnostics", 0, Iterables.size(bindingContext.getDiagnostics()));
|
||||
}
|
||||
|
||||
public void testIncompleteHierarchyInJava() throws Exception {
|
||||
// This test compiles a Java library of two classes (Super and Sub), then deletes Super.class and attempts to compile a Kotlin
|
||||
// source against this broken library. The expected result is an "incomplete hierarchy" error message from the compiler
|
||||
|
||||
JetTestUtils.compileJavaFiles(
|
||||
Arrays.asList(
|
||||
new File(getTestDataDirectory() + "/library/test/Super.java"),
|
||||
new File(getTestDataDirectory() + "/library/test/Sub.java")
|
||||
),
|
||||
Arrays.asList("-d", tmpdir.getPath())
|
||||
);
|
||||
|
||||
File superClassFile = new File(tmpdir + "/test/Super.class");
|
||||
assert superClassFile.delete() : "Can't delete " + superClassFile;
|
||||
|
||||
File source = new File(getTestDataDirectory(), "source.kt");
|
||||
|
||||
Pair<String, ExitCode> pair = CliBaseTest.executeCompilerGrabOutput(new K2JVMCompiler(), Arrays.asList(
|
||||
source.getPath(),
|
||||
"-classpath", tmpdir.getPath(),
|
||||
"-d", tmpdir.getPath()
|
||||
));
|
||||
|
||||
JetTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), pair.first);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user