Allow suppress additional diagnostics for JVM target
Suppression doesn't work without resolved annotation in binding context.
This commit is contained in:
+2
-5
@@ -58,10 +58,7 @@ import org.jetbrains.kotlin.parsing.KotlinScriptDefinition;
|
||||
import org.jetbrains.kotlin.parsing.KotlinScriptDefinitionProvider;
|
||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
import org.jetbrains.kotlin.resolve.AnalyzerScriptParameter;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext;
|
||||
import org.jetbrains.kotlin.resolve.ScriptNameUtil;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
||||
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
|
||||
import org.jetbrains.kotlin.util.PerformanceCounter;
|
||||
@@ -401,7 +398,7 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
obsoleteMultifileClasses.add(JvmClassName.byInternalName(obsoleteFacadeInternalName).getFqNameForClassNameWithoutDollars());
|
||||
}
|
||||
}
|
||||
BindingTraceContext diagnosticHolder = new BindingTraceContext();
|
||||
BindingTrace diagnosticHolder = new DelegatingBindingTrace(result.getBindingContext(), false, "For extra diagnostics in ${this.javaClass}");
|
||||
GenerationState generationState = new GenerationState(
|
||||
environment.getProject(),
|
||||
ClassBuilderFactories.BINARIES,
|
||||
|
||||
@@ -85,9 +85,15 @@ public class DelegatingBindingTrace implements BindingTrace {
|
||||
};
|
||||
|
||||
public DelegatingBindingTrace(BindingContext parentContext, String debugName) {
|
||||
this(parentContext, true, debugName);
|
||||
}
|
||||
|
||||
public DelegatingBindingTrace(BindingContext parentContext, boolean withParentDiagnostics, String debugName) {
|
||||
this.parentContext = parentContext;
|
||||
this.name = debugName;
|
||||
this.mutableDiagnostics = new MutableDiagnosticsWithSuppression(bindingContext, parentContext.getDiagnostics());
|
||||
this.mutableDiagnostics = withParentDiagnostics ?
|
||||
new MutableDiagnosticsWithSuppression(bindingContext, parentContext.getDiagnostics()) :
|
||||
new MutableDiagnosticsWithSuppression(bindingContext);
|
||||
}
|
||||
|
||||
public DelegatingBindingTrace(BindingContext parentContext, String debugName, @Nullable Object resolutionSubjectForMessage) {
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
public class MutableDiagnosticsWithSuppression(
|
||||
public class MutableDiagnosticsWithSuppression @JvmOverloads constructor(
|
||||
private val bindingContext: BindingContext,
|
||||
private val delegateDiagnostics: Diagnostics = Diagnostics.EMPTY
|
||||
) : Diagnostics {
|
||||
|
||||
@@ -39,7 +39,6 @@ import com.intellij.psi.util.PsiTreeUtil
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import com.intellij.util.containers.Stack
|
||||
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
||||
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
@@ -51,7 +50,7 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
@@ -81,9 +80,12 @@ abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
|
||||
|
||||
val javaFileStub = createJavaFileStub(packageFqName, files)
|
||||
val bindingContext: BindingContext
|
||||
val forExtraDiagnostics = BindingTraceContext()
|
||||
val forExtraDiagnostics = DelegatingBindingTrace(context.bindingContext, false, "For extra diagnostics in ${this.javaClass}")
|
||||
|
||||
try {
|
||||
val stubStack = Stack<StubElement<PsiElement>>()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
stubStack.push(javaFileStub as StubElement<PsiElement>)
|
||||
|
||||
val state = GenerationState(
|
||||
@@ -92,12 +94,13 @@ abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
|
||||
context.module,
|
||||
context.bindingContext,
|
||||
Lists.newArrayList(files),
|
||||
/*disable not-null assertions*/false, false,
|
||||
/*generateClassFilter=*/generateClassFilter,
|
||||
/*disableInline=*/false,
|
||||
/*disableOptimization=*/false,
|
||||
/*useTypeTableInSerializer=*/false,
|
||||
forExtraDiagnostics)
|
||||
disableCallAssertions = false,
|
||||
disableParamAssertions = false,
|
||||
generateDeclaredClassFilter = generateClassFilter,
|
||||
disableInline = false,
|
||||
disableOptimization = false,
|
||||
useTypeTableInSerializer = false,
|
||||
diagnostics = forExtraDiagnostics)
|
||||
state.beforeCompile()
|
||||
|
||||
bindingContext = state.bindingContext
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.utils.StringsKt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -28,8 +29,6 @@ import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys;
|
||||
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||
import org.jetbrains.kotlin.resolve.AnalyzingUtils;
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext;
|
||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
@@ -58,7 +57,7 @@ public class CodegenTestUtil {
|
||||
analysisResult.throwIfError();
|
||||
AnalyzingUtils.throwExceptionOnErrors(analysisResult.getBindingContext());
|
||||
CompilerConfiguration configuration = environment.getConfiguration();
|
||||
BindingTraceContext forExtraDiagnostics = new BindingTraceContext();
|
||||
BindingTrace forExtraDiagnostics = new DelegatingBindingTrace(analysisResult.getBindingContext(), false, "For extra diagnostics in ${this.javaClass}");
|
||||
GenerationState state = new GenerationState(
|
||||
environment.getProject(), ClassBuilderFactories.TEST,
|
||||
analysisResult.getModuleDescriptor(), analysisResult.getBindingContext(), files.getPsiFiles(),
|
||||
|
||||
@@ -452,7 +452,8 @@ public class KotlinPositionManager(private val myDebugProcess: DebugProcess) : M
|
||||
val element = getElementToCreateTypeMapperForLibraryFile(notPositionedElement)
|
||||
val analysisResult = element!!.analyzeAndGetResult()
|
||||
|
||||
val state = GenerationState(file.project, ClassBuilderFactories.THROW_EXCEPTION, analysisResult.moduleDescriptor, analysisResult.bindingContext, listOf(file))
|
||||
val state = GenerationState(file.project, ClassBuilderFactories.THROW_EXCEPTION,
|
||||
analysisResult.moduleDescriptor, analysisResult.bindingContext, listOf(file))
|
||||
state.beforeCompile()
|
||||
return state.typeMapper
|
||||
}
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||
@@ -38,7 +38,7 @@ public class StubProducerExtension(val stubsOutputDir: File) : AnalysisCompleted
|
||||
bindingContext: BindingContext,
|
||||
files: Collection<KtFile>
|
||||
): AnalysisResult? {
|
||||
val forExtraDiagnostics = BindingTraceContext()
|
||||
val forExtraDiagnostics = DelegatingBindingTrace(bindingContext, false, "For extra diagnostics in ${this.javaClass}")
|
||||
|
||||
val generationState = GenerationState(
|
||||
project,
|
||||
|
||||
Reference in New Issue
Block a user