From e6efde76dc68b4442f2650cfccdd5d78cae7738b Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 5 Jan 2023 15:36:09 +0200 Subject: [PATCH] [FIR JS] Reuse declarations from JsStandardClassIds in both frontends --- .../kotlin/name/JsStandardClassIds.kt | 28 +++++++++++++++++++ .../kotlin/js/analyze/suppressWarnings.kt | 6 ++-- .../resolve/diagnostics/JsQualifierChecker.kt | 4 +-- .../js/translate/utils/AnnotationsUtils.java | 14 +++++----- 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/core/compiler.common.js/src/org/jetbrains/kotlin/name/JsStandardClassIds.kt b/core/compiler.common.js/src/org/jetbrains/kotlin/name/JsStandardClassIds.kt index f39c8d27b0b..dccd6c246cc 100644 --- a/core/compiler.common.js/src/org/jetbrains/kotlin/name/JsStandardClassIds.kt +++ b/core/compiler.common.js/src/org/jetbrains/kotlin/name/JsStandardClassIds.kt @@ -11,26 +11,54 @@ object JsStandardClassIds { val BASE_JS_PACKAGE = BASE_KOTLIN_PACKAGE.child(Name.identifier("js")) object Annotations { + @JvmField val JsQualifier = "JsQualifier".jsId() + + @JvmField val JsModule = "JsModule".jsId() + + @JvmField val JsNonModule = "JsNonModule".jsId() + @JvmField val JsNative = "native".jsId() + + @JvmField val JsLibrary = "library".jsId() + + @JvmField val JsNativeInvoke = "nativeInvoke".jsId() + + @JvmField val JsNativeGetter = "nativeGetter".jsId() + + @JvmField val JsNativeSetter = "nativeSetter".jsId() + + @JvmField val JsName = "JsName".jsId() + @JvmField + val JsExport = "JsExport".jsId() + + @JvmField + val JsExportIgnore = ClassId(JsExport.asSingleFqName(), Name.identifier("Ignore")) + + @JvmField val annotationsRequiringExternal = setOf(JsModule, JsQualifier) + @JvmField val nativeAnnotations = setOf(JsNative, JsNativeInvoke, JsNativeGetter, JsNativeSetter) } object Callables { + @JvmField val JsDefinedExternally = "definedExternally".callableId(BASE_JS_PACKAGE) + + @JvmField val JsNoImpl = "noImpl".callableId(BASE_JS_PACKAGE) + @JvmField val definedExternallyPropertyNames = setOf(JsNoImpl, JsDefinedExternally) } } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/suppressWarnings.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/suppressWarnings.kt index 8b394cfb058..1aa32971b0f 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/suppressWarnings.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/suppressWarnings.kt @@ -19,16 +19,16 @@ package org.jetbrains.kotlin.js.analyze import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor -import org.jetbrains.kotlin.js.PredefinedAnnotation.* +import org.jetbrains.kotlin.name.JsStandardClassIds import org.jetbrains.kotlin.resolve.checkers.PlatformDiagnosticSuppressor -private val NATIVE_ANNOTATIONS = arrayOf(NATIVE.fqName, NATIVE_INVOKE.fqName, NATIVE_GETTER.fqName, NATIVE_SETTER.fqName) +private val nativeAnnotations = JsStandardClassIds.Annotations.nativeAnnotations.map { it.asSingleFqName() } private fun DeclarationDescriptor.isLexicallyInsideJsNative(): Boolean { var descriptor: DeclarationDescriptor = this while (true) { val annotations = descriptor.annotations - if (!annotations.isEmpty() && NATIVE_ANNOTATIONS.any(annotations::hasAnnotation)) return true + if (!annotations.isEmpty() && nativeAnnotations.any(annotations::hasAnnotation)) return true descriptor = descriptor.containingDeclaration ?: break } return false diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsQualifierChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsQualifierChecker.kt index feb2cc238a7..9715ab74822 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsQualifierChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsQualifierChecker.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.js.resolve.diagnostics import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget -import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils +import org.jetbrains.kotlin.name.JsStandardClassIds import org.jetbrains.kotlin.js.validateQualifier import org.jetbrains.kotlin.psi.KtAnnotated import org.jetbrains.kotlin.psi.KtAnnotationEntry @@ -37,7 +37,7 @@ object JsQualifierChecker : AdditionalAnnotationChecker { val bindingContext = trace.bindingContext for (entry in entries) { val annotation = bindingContext[BindingContext.ANNOTATION, entry] ?: continue - if (annotation.fqName != AnnotationsUtils.JS_QUALIFIER_ANNOTATION) continue + if (annotation.fqName != JsStandardClassIds.Annotations.JsQualifier.asSingleFqName()) continue val argument = annotation.allValueArguments.values.singleOrNull()?.value as? String ?: continue if (!validateQualifier(argument)) { val argumentPsi = entry.valueArgumentList!!.arguments[0] diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java index b0ce258db89..f4e35a304e5 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java @@ -22,9 +22,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.js.PredefinedAnnotation; import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations; import org.jetbrains.kotlin.psi.KtAnnotationEntry; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.BindingContext; @@ -40,12 +40,12 @@ import java.util.List; import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.isEffectivelyExternal; public final class AnnotationsUtils { - public static final FqName JS_NAME = new FqName("kotlin.js.JsName"); - private static final FqName JS_EXPORT = new FqName("kotlin.js.JsExport"); - private static final FqName JS_EXPORT_IGNORE = new FqName("kotlin.js.JsExport.Ignore"); - public static final FqName JS_MODULE_ANNOTATION = new FqName("kotlin.js.JsModule"); - private static final FqName JS_NON_MODULE_ANNOTATION = new FqName("kotlin.js.JsNonModule"); - public static final FqName JS_QUALIFIER_ANNOTATION = new FqName("kotlin.js.JsQualifier"); + private static final FqName JS_NAME = Annotations.JsName.asSingleFqName(); + private static final FqName JS_EXPORT = Annotations.JsExport.asSingleFqName(); + private static final FqName JS_EXPORT_IGNORE = Annotations.JsExportIgnore.asSingleFqName(); + private static final FqName JS_MODULE_ANNOTATION = Annotations.JsModule.asSingleFqName(); + private static final FqName JS_NON_MODULE_ANNOTATION = Annotations.JsNonModule.asSingleFqName(); + private static final FqName JS_QUALIFIER_ANNOTATION = Annotations.JsQualifier.asSingleFqName(); private AnnotationsUtils() { }