Allow suppress additional diagnostics for JVM target

Suppression doesn't work without resolved annotation in binding context.
This commit is contained in:
Nikolay Krasko
2015-11-23 21:53:47 +03:00
parent 5bb141381b
commit 652eeca872
7 changed files with 28 additions and 22 deletions
@@ -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) {
@@ -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
}
@@ -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,