KT-3268 Check binary format version in the compiler
This commit is contained in:
+18
@@ -18,6 +18,7 @@ package org.jetbrains.jet.cli.common.messages;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiErrorElement;
|
||||
import com.intellij.psi.PsiModifierListOwner;
|
||||
@@ -36,6 +37,8 @@ import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.AbiVersionUtil;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -138,6 +141,20 @@ public final class AnalyzerWithCompilerReport {
|
||||
}
|
||||
}
|
||||
|
||||
private void reportAbiVersionErrors() {
|
||||
assert analyzeExhaust != null;
|
||||
BindingContext bindingContext = analyzeExhaust.getBindingContext();
|
||||
|
||||
Collection<PsiClass> psiClasses = bindingContext.getKeys(AbiVersionUtil.ABI_VERSION_ERRORS);
|
||||
for (PsiClass psiClass : psiClasses) {
|
||||
Integer abiVersion = bindingContext.get(AbiVersionUtil.ABI_VERSION_ERRORS, psiClass);
|
||||
messageCollectorWrapper.report(CompilerMessageSeverity.ERROR,
|
||||
"Class '" + psiClass.getQualifiedName() + "' was compiled with an incompatible version of Kotlin. " +
|
||||
"Its ABI version is " + abiVersion + ", expected ABI version is " + JvmAbi.VERSION,
|
||||
MessageUtil.psiElementToMessageLocation(psiClass));
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean reportDiagnostics(@NotNull BindingContext bindingContext, @NotNull MessageCollector messageCollector) {
|
||||
boolean hasErrors = false;
|
||||
for (Diagnostic diagnostic : sortedDiagnostics(bindingContext.getDiagnostics())) {
|
||||
@@ -219,6 +236,7 @@ public final class AnalyzerWithCompilerReport {
|
||||
reportDiagnostics(analyzeExhaust.getBindingContext(), messageCollectorWrapper);
|
||||
reportIncompleteHierarchies();
|
||||
reportAlternativeSignatureErrors();
|
||||
reportAbiVersionErrors();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user