[FIR JS] Reuse declarations from JsStandardClassIds in both frontends

This commit is contained in:
Nikolay Lunyak
2023-01-05 15:36:09 +02:00
committed by Space Team
parent 5817155616
commit e6efde76dc
4 changed files with 40 additions and 12 deletions
@@ -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)
}
}
@@ -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
@@ -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]
@@ -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() {
}