JS frontend: suppress UNUSED_PARAM for native declarations.
#KT-2141 Fixed
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.jet.cli.js;
|
|||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
|
import com.intellij.openapi.extensions.Extensions;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
@@ -43,10 +44,11 @@ import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
|||||||
import org.jetbrains.jet.cli.common.output.outputUtils.OutputUtilsPackage;
|
import org.jetbrains.jet.cli.common.output.outputUtils.OutputUtilsPackage;
|
||||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||||
import org.jetbrains.jet.config.CommonConfigurationKeys;
|
|
||||||
import org.jetbrains.jet.config.CompilerConfiguration;
|
import org.jetbrains.jet.config.CompilerConfiguration;
|
||||||
import org.jetbrains.jet.config.Services;
|
import org.jetbrains.jet.config.Services;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
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.TopDownAnalyzerFacadeForJS;
|
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS;
|
||||||
import org.jetbrains.k2js.config.*;
|
import org.jetbrains.k2js.config.*;
|
||||||
import org.jetbrains.k2js.facade.MainCallParameters;
|
import org.jetbrains.k2js.facade.MainCallParameters;
|
||||||
@@ -91,6 +93,9 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
|
|
||||||
CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs);
|
CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs);
|
||||||
JetCoreEnvironment environmentForJS = JetCoreEnvironment.createForProduction(rootDisposable, configuration);
|
JetCoreEnvironment environmentForJS = JetCoreEnvironment.createForProduction(rootDisposable, configuration);
|
||||||
|
Extensions.getRootArea()
|
||||||
|
.getExtensionPoint(DiagnosticsWithSuppression.SuppressStringProvider.EP_NAME)
|
||||||
|
.registerExtension(new SuppressUnusedParameterForJsNative());
|
||||||
|
|
||||||
Project project = environmentForJS.getProject();
|
Project project = environmentForJS.getProject();
|
||||||
List<JetFile> sourcesFiles = environmentForJS.getSourceFiles();
|
List<JetFile> sourcesFiles = environmentForJS.getSourceFiles();
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import org.jetbrains.jet.config.CompilerConfiguration;
|
|||||||
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
||||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache;
|
import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory;
|
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.CliDeclarationProviderFactoryService;
|
import org.jetbrains.jet.lang.resolve.lazy.declarations.CliDeclarationProviderFactoryService;
|
||||||
@@ -64,6 +65,7 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.intellij.core.CoreApplicationEnvironment.registerApplicationExtensionPoint;
|
||||||
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERROR;
|
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERROR;
|
||||||
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.WARNING;
|
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.WARNING;
|
||||||
|
|
||||||
@@ -139,12 +141,19 @@ public class JetCoreEnvironment {
|
|||||||
private static JavaCoreApplicationEnvironment createApplicationEnvironment(@NotNull Disposable parentDisposable) {
|
private static JavaCoreApplicationEnvironment createApplicationEnvironment(@NotNull Disposable parentDisposable) {
|
||||||
JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable);
|
JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable);
|
||||||
|
|
||||||
|
registerApplicationExtensionPointsForCLI();
|
||||||
|
|
||||||
registerApplicationServicesForCLI(applicationEnvironment);
|
registerApplicationServicesForCLI(applicationEnvironment);
|
||||||
registerApplicationServices(applicationEnvironment);
|
registerApplicationServices(applicationEnvironment);
|
||||||
|
|
||||||
return applicationEnvironment;
|
return applicationEnvironment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void registerApplicationExtensionPointsForCLI() {
|
||||||
|
registerApplicationExtensionPoint(DiagnosticsWithSuppression.SuppressStringProvider.EP_NAME,
|
||||||
|
DiagnosticsWithSuppression.SuppressStringProvider.class);
|
||||||
|
}
|
||||||
|
|
||||||
private static void registerApplicationServicesForCLI(@NotNull JavaCoreApplicationEnvironment applicationEnvironment) {
|
private static void registerApplicationServicesForCLI(@NotNull JavaCoreApplicationEnvironment applicationEnvironment) {
|
||||||
// ability to get text from annotations xml files
|
// ability to get text from annotations xml files
|
||||||
applicationEnvironment.registerFileType(PlainTextFileType.INSTANCE, "xml");
|
applicationEnvironment.registerFileType(PlainTextFileType.INSTANCE, "xml");
|
||||||
|
|||||||
+17
-5
@@ -18,6 +18,8 @@ package org.jetbrains.jet.lang.resolve;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
|
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||||
|
import com.intellij.openapi.extensions.Extensions;
|
||||||
import com.intellij.openapi.util.Condition;
|
import com.intellij.openapi.util.Condition;
|
||||||
import com.intellij.openapi.util.ModificationTracker;
|
import com.intellij.openapi.util.ModificationTracker;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
@@ -34,23 +36,29 @@ import org.jetbrains.jet.lang.diagnostics.Errors;
|
|||||||
import org.jetbrains.jet.lang.diagnostics.Severity;
|
import org.jetbrains.jet.lang.diagnostics.Severity;
|
||||||
import org.jetbrains.jet.lang.psi.JetAnnotated;
|
import org.jetbrains.jet.lang.psi.JetAnnotated;
|
||||||
import org.jetbrains.jet.lang.psi.JetAnnotationEntry;
|
import org.jetbrains.jet.lang.psi.JetAnnotationEntry;
|
||||||
import org.jetbrains.jet.lang.psi.JetStubbedPsiUtil;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetStubbedPsiUtil;
|
||||||
import org.jetbrains.jet.lang.psi.codeFragmentUtil.CodeFragmentUtilPackage;
|
import org.jetbrains.jet.lang.psi.codeFragmentUtil.CodeFragmentUtilPackage;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.ArrayValue;
|
import org.jetbrains.jet.lang.resolve.constants.ArrayValue;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class DiagnosticsWithSuppression implements Diagnostics {
|
public class DiagnosticsWithSuppression implements Diagnostics {
|
||||||
|
|
||||||
|
public interface SuppressStringProvider {
|
||||||
|
ExtensionPointName<SuppressStringProvider> EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.suppressStringProvider");
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
List<String> get(@NotNull AnnotationDescriptor annotationDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getInstance(DiagnosticsWithSuppression.class);
|
private static final Logger LOG = Logger.getInstance(DiagnosticsWithSuppression.class);
|
||||||
|
|
||||||
|
private static final SuppressStringProvider[] ADDITIONAL_SUPPRESS_STRING_PROVIDERS = Extensions.getExtensions(SuppressStringProvider.EP_NAME);
|
||||||
|
|
||||||
private final BindingContext context;
|
private final BindingContext context;
|
||||||
private final Collection<Diagnostic> diagnostics;
|
private final Collection<Diagnostic> diagnostics;
|
||||||
|
|
||||||
@@ -197,6 +205,10 @@ public class DiagnosticsWithSuppression implements Diagnostics {
|
|||||||
AnnotationDescriptor annotationDescriptor = context.get(BindingContext.ANNOTATION, annotationEntry);
|
AnnotationDescriptor annotationDescriptor = context.get(BindingContext.ANNOTATION, annotationEntry);
|
||||||
if (annotationDescriptor == null) continue;
|
if (annotationDescriptor == null) continue;
|
||||||
|
|
||||||
|
for (SuppressStringProvider suppressStringProvider : ADDITIONAL_SUPPRESS_STRING_PROVIDERS) {
|
||||||
|
builder.addAll(suppressStringProvider.get(annotationDescriptor));
|
||||||
|
}
|
||||||
|
|
||||||
if (!KotlinBuiltIns.getInstance().isSuppressAnnotation(annotationDescriptor)) continue;
|
if (!KotlinBuiltIns.getInstance().isSuppressAnnotation(annotationDescriptor)) continue;
|
||||||
|
|
||||||
// We only add strings and skip other values to facilitate recovery in presence of erroneous code
|
// We only add strings and skip other values to facilitate recovery in presence of erroneous code
|
||||||
|
|||||||
@@ -806,13 +806,15 @@
|
|||||||
|
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|
||||||
<extensionPoints>
|
<extensionPoints>
|
||||||
<extensionPoint name="updater" beanClass="com.intellij.openapi.fileTypes.FileTypeExtensionPoint"/>
|
<extensionPoint name="updater" beanClass="com.intellij.openapi.fileTypes.FileTypeExtensionPoint"/>
|
||||||
<extensionPoint name="projectConfigurator" interface="org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator"/>
|
<extensionPoint name="projectConfigurator" interface="org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator"/>
|
||||||
</extensionPoints>
|
<extensionPoint name="suppressStringProvider" interface="org.jetbrains.jet.lang.resolve.DiagnosticsWithSuppression$SuppressStringProvider"/>
|
||||||
|
</extensionPoints>
|
||||||
|
|
||||||
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
||||||
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJavaModuleConfigurator"/>
|
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJavaModuleConfigurator"/>
|
||||||
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJsModuleConfigurator"/>
|
<projectConfigurator implementation="org.jetbrains.jet.plugin.configuration.KotlinJsModuleConfigurator"/>
|
||||||
</extensions>
|
<suppressStringProvider implementation="org.jetbrains.k2js.analyze.SuppressUnusedParameterForJsNative"/>
|
||||||
|
</extensions>
|
||||||
</idea-plugin>
|
</idea-plugin>
|
||||||
|
|||||||
+5
-19
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
* Copyright 2010-2014 JetBrains s.r.o.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -14,23 +14,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.k2js.translate.utils;
|
package org.jetbrains.k2js
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
public enum class PredefinedAnnotation(public val fqName: String) {
|
||||||
|
LIBRARY : PredefinedAnnotation("kotlin.js.library")
|
||||||
public enum PredefinedAnnotation {
|
NATIVE : PredefinedAnnotation("kotlin.js.native")
|
||||||
LIBRARY("kotlin.js.library"),
|
|
||||||
NATIVE("kotlin.js.native");
|
|
||||||
|
|
||||||
PredefinedAnnotation(@NotNull String fqName) {
|
|
||||||
this.fqName = fqName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final String fqName;
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public String getFQName() {
|
|
||||||
return fqName;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2014 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.k2js.analyze
|
||||||
|
|
||||||
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
|
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
|
||||||
|
|
||||||
|
class SuppressUnusedParameterForJsNative : DiagnosticsWithSuppression.SuppressStringProvider {
|
||||||
|
override fun get(annotationDescriptor: AnnotationDescriptor): List<String> {
|
||||||
|
val descriptor = DescriptorUtils.getClassDescriptorForType(annotationDescriptor.getType())
|
||||||
|
if (PredefinedAnnotation.NATIVE.fqName == DescriptorUtils.getFqName(descriptor).asString()) {
|
||||||
|
return listOf(Errors.UNUSED_PARAMETER.getName().toLowerCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
return listOf()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
import org.jetbrains.k2js.PredefinedAnnotation;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -108,7 +109,7 @@ public final class AnnotationsUtils {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private static AnnotationDescriptor getAnnotationByName(@NotNull DeclarationDescriptor descriptor,
|
private static AnnotationDescriptor getAnnotationByName(@NotNull DeclarationDescriptor descriptor,
|
||||||
@NotNull PredefinedAnnotation annotation) {
|
@NotNull PredefinedAnnotation annotation) {
|
||||||
return getAnnotationByName(descriptor, annotation.getFQName());
|
return getAnnotationByName(descriptor, annotation.getFqName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -135,7 +136,7 @@ public final class AnnotationsUtils {
|
|||||||
|
|
||||||
public static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor,
|
public static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor,
|
||||||
@NotNull PredefinedAnnotation annotation) {
|
@NotNull PredefinedAnnotation annotation) {
|
||||||
return hasAnnotationOrInsideAnnotatedClass(descriptor, annotation.getFQName());
|
return hasAnnotationOrInsideAnnotatedClass(descriptor, annotation.getFqName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor, @NotNull String fqn) {
|
private static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor, @NotNull String fqn) {
|
||||||
|
|||||||
Reference in New Issue
Block a user