KT-6810 Don't report warnings in dummy.kt

#KT-6810 Fixed
This commit is contained in:
Andrey Breslav
2015-02-17 15:22:09 +03:00
parent 95675176df
commit e47a156e36
8 changed files with 36 additions and 2 deletions
@@ -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;
}
@@ -0,0 +1,3 @@
$TESTDATA_DIR$/warningsInDummy.kt
-d
$TEMP_DIR$
@@ -0,0 +1,5 @@
fun foo(s: String) {
if (s == "") {
}
}
@@ -0,0 +1 @@
OK
@@ -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");
@@ -61,4 +61,9 @@ public class K2JvmCliTest extends CliBaseTest {
public void conflictingOverloads() throws Exception {
executeCompilerCompareOutputJVM();
}
@Test
public void warningsInDummy() throws Exception {
executeCompilerCompareOutputJVM();
}
}
@@ -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
@@ -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
}