diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/diagnostics/DiagnosticsWithSuppression.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/diagnostics/DiagnosticsWithSuppression.java index d883492e715..f4d1107ac51 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/diagnostics/DiagnosticsWithSuppression.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/diagnostics/DiagnosticsWithSuppression.java @@ -25,6 +25,7 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.ModificationTracker; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.util.containers.ConcurrentWeakValueHashMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FilteringIterator; @@ -36,7 +37,9 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.diagnostics.Severity; import org.jetbrains.kotlin.psi.JetAnnotated; import org.jetbrains.kotlin.psi.JetAnnotationEntry; +import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.psi.JetStubbedPsiUtil; +import org.jetbrains.kotlin.psi.PsiPackage; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.constants.ArrayValue; import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant; @@ -143,6 +146,13 @@ public class DiagnosticsWithSuppression implements Diagnostics { private boolean isSuppressed(@NotNull Diagnostic diagnostic) { PsiElement element = diagnostic.getPsiElement(); + // If diagnostics are reported in a synthetic file generated by JetPsiFactory (dummy.kt), + // there's no point to present such diagnostics to the user, because the user didn't write this code + PsiFile file = element.getContainingFile(); + if (file instanceof JetFile) { + if (PsiPackage.getDoNotAnalyze((JetFile) file) != null) return true; + } + for (DiagnosticSuppressor suppressor : getDiagnosticSuppressors()) { if (suppressor.isSuppressed(diagnostic)) return true; } diff --git a/compiler/testData/cli/jvm/warningsInDummy.args b/compiler/testData/cli/jvm/warningsInDummy.args new file mode 100644 index 00000000000..85813db9adf --- /dev/null +++ b/compiler/testData/cli/jvm/warningsInDummy.args @@ -0,0 +1,3 @@ +$TESTDATA_DIR$/warningsInDummy.kt +-d +$TEMP_DIR$ diff --git a/compiler/testData/cli/jvm/warningsInDummy.kt b/compiler/testData/cli/jvm/warningsInDummy.kt new file mode 100644 index 00000000000..a9f9fb32eae --- /dev/null +++ b/compiler/testData/cli/jvm/warningsInDummy.kt @@ -0,0 +1,5 @@ +fun foo(s: String) { + if (s == "") { + + } +} \ No newline at end of file diff --git a/compiler/testData/cli/jvm/warningsInDummy.out b/compiler/testData/cli/jvm/warningsInDummy.out new file mode 100644 index 00000000000..d86bac9de59 --- /dev/null +++ b/compiler/testData/cli/jvm/warningsInDummy.out @@ -0,0 +1 @@ +OK diff --git a/compiler/tests/org/jetbrains/kotlin/cli/KotlincExecutableTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cli/KotlincExecutableTestGenerated.java index d9559e77a16..be4097915a0 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/KotlincExecutableTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/KotlincExecutableTestGenerated.java @@ -123,6 +123,12 @@ public class KotlincExecutableTestGenerated extends AbstractKotlincExecutableTes doJvmTest(fileName); } + @TestMetadata("warningsInDummy.args") + public void testWarningsInDummy() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/warningsInDummy.args"); + doJvmTest(fileName); + } + @TestMetadata("wrongAbiVersion.args") public void testWrongAbiVersion() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/wrongAbiVersion.args"); diff --git a/compiler/tests/org/jetbrains/kotlin/cli/jvm/K2JvmCliTest.java b/compiler/tests/org/jetbrains/kotlin/cli/jvm/K2JvmCliTest.java index 8e7c4f1297a..123a4bab9d2 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/jvm/K2JvmCliTest.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/jvm/K2JvmCliTest.java @@ -61,4 +61,9 @@ public class K2JvmCliTest extends CliBaseTest { public void conflictingOverloads() throws Exception { executeCompilerCompareOutputJVM(); } + + @Test + public void warningsInDummy() throws Exception { + executeCompilerCompareOutputJVM(); + } } diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/MutableDiagnosticsTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/MutableDiagnosticsTest.kt index 6b0bdf37e98..2ad30b7b673 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/MutableDiagnosticsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/MutableDiagnosticsTest.kt @@ -18,13 +18,13 @@ package org.jetbrains.kotlin.resolve import org.junit.Assert import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment import org.jetbrains.kotlin.resolve.lazy.KotlinTestWithEnvironment import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.resolve.diagnostics.MutableDiagnosticsWithSuppression import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.psi.* class MutableDiagnosticsTest : KotlinTestWithEnvironment() { override fun createEnvironment(): JetCoreEnvironment? { @@ -132,6 +132,10 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() { private inner class DummyDiagnostic : Diagnostic { val dummyElement = JetPsiFactory(getEnvironment().getProject()).createType("Int") + ;{ + dummyElement.getContainingJetFile().doNotAnalyze = null + } + override fun getFactory() = unimplemented() override fun getSeverity() = unimplemented() override fun getPsiElement() = dummyElement diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/typeApproximation/CapturedTypeApproximationTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/typeApproximation/CapturedTypeApproximationTest.kt index 3471dd2a92b..763a3610b55 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/typeApproximation/CapturedTypeApproximationTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/typeApproximation/CapturedTypeApproximationTest.kt @@ -98,7 +98,7 @@ public class CapturedTypeApproximationTest() : JetLiteFixture() { appendln(testType) - if (bindingContext.getDiagnostics().any { it.getSeverity() == Severity.ERROR }) { + if (bindingContext.getDiagnostics().noSuppression().any { it.getSeverity() == Severity.ERROR }) { appendln(" compiler error\n") continue }