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