diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java index 58e8677184e..7186730e057 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java @@ -20,6 +20,7 @@ import com.google.common.base.Joiner; import com.google.common.base.Predicates; import com.intellij.openapi.Disposable; import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.extensions.ExtensionsArea; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -49,6 +50,7 @@ import org.jetbrains.jet.config.Services; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression; import org.jetbrains.k2js.analyze.SuppressUnusedParameterForJsNative; +import org.jetbrains.k2js.analyze.SuppressWarningsFromExternalModules; import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS; import org.jetbrains.k2js.config.*; import org.jetbrains.k2js.facade.MainCallParameters; @@ -93,10 +95,14 @@ public class K2JSCompiler extends CLICompiler { CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs); JetCoreEnvironment environmentForJS = JetCoreEnvironment.createForProduction(rootDisposable, configuration); - Extensions.getRootArea() - .getExtensionPoint(DiagnosticsWithSuppression.SuppressStringProvider.EP_NAME) + + ExtensionsArea rootArea = Extensions.getRootArea(); + rootArea.getExtensionPoint(DiagnosticsWithSuppression.SuppressStringProvider.EP_NAME) .registerExtension(new SuppressUnusedParameterForJsNative()); + rootArea.getExtensionPoint(DiagnosticsWithSuppression.DiagnosticSuppressor.EP_NAME) + .registerExtension(new SuppressWarningsFromExternalModules()); + Project project = environmentForJS.getProject(); List sourcesFiles = environmentForJS.getSourceFiles(); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java index c49fca931e5..3ba7eb2485b 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/JetCoreEnvironment.java @@ -152,6 +152,9 @@ public class JetCoreEnvironment { private static void registerApplicationExtensionPointsForCLI() { registerApplicationExtensionPoint(DiagnosticsWithSuppression.SuppressStringProvider.EP_NAME, DiagnosticsWithSuppression.SuppressStringProvider.class); + + registerApplicationExtensionPoint(DiagnosticsWithSuppression.DiagnosticSuppressor.EP_NAME, + DiagnosticsWithSuppression.DiagnosticSuppressor.class); } private static void registerApplicationServicesForCLI(@NotNull JavaCoreApplicationEnvironment applicationEnvironment) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java index 0e699ec0e72..8674715122d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java @@ -55,9 +55,16 @@ public class DiagnosticsWithSuppression implements Diagnostics { List get(@NotNull AnnotationDescriptor annotationDescriptor); } + public interface DiagnosticSuppressor { + ExtensionPointName EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.diagnosticSuppressor"); + + boolean isSuppressed(@NotNull Diagnostic diagnostic); + } + private static final Logger LOG = Logger.getInstance(DiagnosticsWithSuppression.class); private static final SuppressStringProvider[] ADDITIONAL_SUPPRESS_STRING_PROVIDERS = Extensions.getExtensions(SuppressStringProvider.EP_NAME); + private static final DiagnosticSuppressor[] DIAGNOSTIC_SUPPRESSORS = Extensions.getExtensions(DiagnosticSuppressor.EP_NAME); private final BindingContext context; private final Collection diagnostics; @@ -110,6 +117,10 @@ public class DiagnosticsWithSuppression implements Diagnostics { private boolean isSuppressed(@NotNull Diagnostic diagnostic) { PsiElement element = diagnostic.getPsiElement(); + for (DiagnosticSuppressor suppressor : DIAGNOSTIC_SUPPRESSORS) { + if (suppressor.isSuppressed(diagnostic)) return true; + } + if (isSuppressedForDebugger(diagnostic, element)) return true; JetAnnotated annotated = JetStubbedPsiUtil.getPsiOrStubParent(element, JetAnnotated.class, false); diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 39884dafd0c..89cf653cc5a 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -810,11 +810,13 @@ + + diff --git a/js/js.frontend/src/org/jetbrains/k2js/analyze/SuppressUnusedParameterForJsNative.kt b/js/js.frontend/src/org/jetbrains/k2js/analyze/suppressWarnings.kt similarity index 71% rename from js/js.frontend/src/org/jetbrains/k2js/analyze/SuppressUnusedParameterForJsNative.kt rename to js/js.frontend/src/org/jetbrains/k2js/analyze/suppressWarnings.kt index 7bbd6fa67ff..0bcb34e467f 100644 --- a/js/js.frontend/src/org/jetbrains/k2js/analyze/SuppressUnusedParameterForJsNative.kt +++ b/js/js.frontend/src/org/jetbrains/k2js/analyze/suppressWarnings.kt @@ -22,6 +22,10 @@ import org.jetbrains.jet.lang.diagnostics.Errors import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe import org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression import org.jetbrains.k2js.PredefinedAnnotation +import org.jetbrains.jet.lang.diagnostics.Diagnostic +import org.jetbrains.jet.lang.diagnostics.Severity +import org.jetbrains.jet.lang.psi.JetFile +import org.jetbrains.k2js.config.LibrarySourcesConfig class SuppressUnusedParameterForJsNative : DiagnosticsWithSuppression.SuppressStringProvider { override fun get(annotationDescriptor: AnnotationDescriptor): List { @@ -32,4 +36,12 @@ class SuppressUnusedParameterForJsNative : DiagnosticsWithSuppression.SuppressSt return listOf() } +} + +class SuppressWarningsFromExternalModules : DiagnosticsWithSuppression.DiagnosticSuppressor { + override fun isSuppressed(diagnostic: Diagnostic): Boolean { + val file = diagnostic.getPsiFile() + return diagnostic.getSeverity() == Severity.WARNING && + file is JetFile && file.getUserData(LibrarySourcesConfig.EXTERNAL_MODULE_NAME) != null + } } \ No newline at end of file