[FIR JS] Reuse declarations from JsStandardClassIds in both frontends
This commit is contained in:
committed by
Space Team
parent
5817155616
commit
e6efde76dc
@@ -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
|
||||
|
||||
+2
-2
@@ -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() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user