ErrorReporter is now Java-independent

This commit is contained in:
Andrey Breslav
2015-03-04 18:04:43 +03:00
parent 266485add3
commit 36bbd2c0e3
16 changed files with 55 additions and 28 deletions
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages;
import org.jetbrains.kotlin.load.java.JavaBindingContext;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.components.TraceBasedErrorReporter;
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass;
import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.kotlin.resolve.AnalyzingUtils;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -148,14 +147,15 @@ public final class AnalyzerWithCompilerReport {
assert analysisResult != null;
BindingContext bindingContext = analysisResult.getBindingContext();
Collection<VirtualFileKotlinClass> errorClasses = bindingContext.getKeys(TraceBasedErrorReporter.ABI_VERSION_ERRORS);
for (VirtualFileKotlinClass kotlinClass : errorClasses) {
Integer abiVersion = bindingContext.get(TraceBasedErrorReporter.ABI_VERSION_ERRORS, kotlinClass);
String path = toSystemDependentName(kotlinClass.getFile().getPath());
Collection<String> errorClasses = bindingContext.getKeys(TraceBasedErrorReporter.ABI_VERSION_ERRORS);
for (String kotlinClass : errorClasses) {
TraceBasedErrorReporter.AbiVersionErrorData data = bindingContext.get(TraceBasedErrorReporter.ABI_VERSION_ERRORS, kotlinClass);
assert data != null;
String path = toSystemDependentName(kotlinClass);
messageCollectorWrapper.report(CompilerMessageSeverity.ERROR,
"Class '" + JvmClassName.byClassId(kotlinClass.getClassId()) +
"Class '" + JvmClassName.byClassId(data.classId) +
"' was compiled with an incompatible version of Kotlin. " +
"Its ABI version is " + abiVersion + ", expected ABI version is " + JvmAbi.VERSION,
"Its ABI version is " + data.actualVersion + ", expected ABI version is " + JvmAbi.VERSION,
CompilerMessageLocation.create(path, 0, 0));
}
}
@@ -21,10 +21,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass;
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass;
import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.resolve.BindingTrace;
import org.jetbrains.kotlin.resolve.OverrideResolver;
import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter;
import org.jetbrains.kotlin.util.slicedMap.Slices;
import org.jetbrains.kotlin.util.slicedMap.WritableSlice;
@@ -34,7 +34,17 @@ import java.util.List;
public class TraceBasedErrorReporter implements ErrorReporter {
private static final Logger LOG = Logger.getInstance(TraceBasedErrorReporter.class);
public static final WritableSlice<VirtualFileKotlinClass, Integer> ABI_VERSION_ERRORS = Slices.createCollectiveSlice();
public static class AbiVersionErrorData {
public final int actualVersion;
public final ClassId classId;
public AbiVersionErrorData(int actualVersion, @NotNull ClassId classId) {
this.actualVersion = actualVersion;
this.classId = classId;
}
}
public static final WritableSlice<String, AbiVersionErrorData> ABI_VERSION_ERRORS = Slices.createCollectiveSlice();
public static final WritableSlice<ClassDescriptor, List<String>> INCOMPLETE_HIERARCHY = Slices.createCollectiveSlice();
private BindingTrace trace;
@@ -45,8 +55,8 @@ public class TraceBasedErrorReporter implements ErrorReporter {
}
@Override
public void reportIncompatibleAbiVersion(@NotNull KotlinJvmBinaryClass kotlinClass, int actualVersion) {
trace.record(ABI_VERSION_ERRORS, (VirtualFileKotlinClass) kotlinClass, actualVersion);
public void reportIncompatibleAbiVersion(@NotNull ClassId classId, @NotNull String filePath, int actualVersion) {
trace.record(ABI_VERSION_ERRORS, filePath, new AbiVersionErrorData(actualVersion, classId));
}
@Override
@@ -33,6 +33,8 @@ public class VirtualFileKotlinClass private(
innerClasses: FileBasedKotlinClass.InnerClassesInfo
) : FileBasedKotlinClass(className, classHeader, innerClasses) {
override fun getLocation() = file.getPath()
override fun getFileContents(): ByteArray {
try {
return file.contentsToByteArray()