JS frontend: suppress warnings from stdlib.

This commit is contained in:
Zalim Bashorov
2014-10-23 21:18:18 +04:00
parent c8556ec1f7
commit cd20301283
5 changed files with 36 additions and 2 deletions
@@ -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<K2JSCompilerArguments> {
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<JetFile> sourcesFiles = environmentForJS.getSourceFiles();
@@ -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) {
@@ -55,9 +55,16 @@ public class DiagnosticsWithSuppression implements Diagnostics {
List<String> get(@NotNull AnnotationDescriptor annotationDescriptor);
}
public interface DiagnosticSuppressor {
ExtensionPointName<DiagnosticSuppressor> 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<Diagnostic> 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);
+2
View File
@@ -810,11 +810,13 @@
<extensionPoint name="updater" beanClass="com.intellij.openapi.fileTypes.FileTypeExtensionPoint"/>
<extensionPoint name="projectConfigurator" interface="org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator"/>
<extensionPoint name="suppressStringProvider" interface="org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression$SuppressStringProvider"/>
<extensionPoint name="diagnosticSuppressor" interface="org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression$DiagnosticSuppressor"/>
</extensionPoints>
<extensions defaultExtensionNs="org.jetbrains.kotlin">
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJavaModuleConfigurator"/>
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJsModuleConfigurator"/>
<suppressStringProvider implementation="org.jetbrains.k2js.analyze.SuppressUnusedParameterForJsNative"/>
<diagnosticSuppressor implementation="org.jetbrains.k2js.analyze.SuppressWarningsFromExternalModules"/>
</extensions>
</idea-plugin>
@@ -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<String> {
@@ -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
}
}