[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"))
|
val BASE_JS_PACKAGE = BASE_KOTLIN_PACKAGE.child(Name.identifier("js"))
|
||||||
|
|
||||||
object Annotations {
|
object Annotations {
|
||||||
|
@JvmField
|
||||||
val JsQualifier = "JsQualifier".jsId()
|
val JsQualifier = "JsQualifier".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsModule = "JsModule".jsId()
|
val JsModule = "JsModule".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNonModule = "JsNonModule".jsId()
|
val JsNonModule = "JsNonModule".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNative = "native".jsId()
|
val JsNative = "native".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsLibrary = "library".jsId()
|
val JsLibrary = "library".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNativeInvoke = "nativeInvoke".jsId()
|
val JsNativeInvoke = "nativeInvoke".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNativeGetter = "nativeGetter".jsId()
|
val JsNativeGetter = "nativeGetter".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNativeSetter = "nativeSetter".jsId()
|
val JsNativeSetter = "nativeSetter".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsName = "JsName".jsId()
|
val JsName = "JsName".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
val JsExport = "JsExport".jsId()
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
val JsExportIgnore = ClassId(JsExport.asSingleFqName(), Name.identifier("Ignore"))
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val annotationsRequiringExternal = setOf(JsModule, JsQualifier)
|
val annotationsRequiringExternal = setOf(JsModule, JsQualifier)
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val nativeAnnotations = setOf(JsNative, JsNativeInvoke, JsNativeGetter, JsNativeSetter)
|
val nativeAnnotations = setOf(JsNative, JsNativeInvoke, JsNativeGetter, JsNativeSetter)
|
||||||
}
|
}
|
||||||
|
|
||||||
object Callables {
|
object Callables {
|
||||||
|
@JvmField
|
||||||
val JsDefinedExternally = "definedExternally".callableId(BASE_JS_PACKAGE)
|
val JsDefinedExternally = "definedExternally".callableId(BASE_JS_PACKAGE)
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val JsNoImpl = "noImpl".callableId(BASE_JS_PACKAGE)
|
val JsNoImpl = "noImpl".callableId(BASE_JS_PACKAGE)
|
||||||
|
|
||||||
|
@JvmField
|
||||||
val definedExternallyPropertyNames = setOf(JsNoImpl, JsDefinedExternally)
|
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.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
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
|
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 {
|
private fun DeclarationDescriptor.isLexicallyInsideJsNative(): Boolean {
|
||||||
var descriptor: DeclarationDescriptor = this
|
var descriptor: DeclarationDescriptor = this
|
||||||
while (true) {
|
while (true) {
|
||||||
val annotations = descriptor.annotations
|
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
|
descriptor = descriptor.containingDeclaration ?: break
|
||||||
}
|
}
|
||||||
return false
|
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.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
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.js.validateQualifier
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotated
|
import org.jetbrains.kotlin.psi.KtAnnotated
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||||
@@ -37,7 +37,7 @@ object JsQualifierChecker : AdditionalAnnotationChecker {
|
|||||||
val bindingContext = trace.bindingContext
|
val bindingContext = trace.bindingContext
|
||||||
for (entry in entries) {
|
for (entry in entries) {
|
||||||
val annotation = bindingContext[BindingContext.ANNOTATION, entry] ?: continue
|
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
|
val argument = annotation.allValueArguments.values.singleOrNull()?.value as? String ?: continue
|
||||||
if (!validateQualifier(argument)) {
|
if (!validateQualifier(argument)) {
|
||||||
val argumentPsi = entry.valueArgumentList!!.arguments[0]
|
val argumentPsi = entry.valueArgumentList!!.arguments[0]
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
|
||||||
import org.jetbrains.kotlin.js.PredefinedAnnotation;
|
import org.jetbrains.kotlin.js.PredefinedAnnotation;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
|
import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations;
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry;
|
import org.jetbrains.kotlin.psi.KtAnnotationEntry;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
@@ -40,12 +40,12 @@ import java.util.List;
|
|||||||
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.isEffectivelyExternal;
|
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.isEffectivelyExternal;
|
||||||
|
|
||||||
public final class AnnotationsUtils {
|
public final class AnnotationsUtils {
|
||||||
public static final FqName JS_NAME = new FqName("kotlin.js.JsName");
|
private static final FqName JS_NAME = Annotations.JsName.asSingleFqName();
|
||||||
private static final FqName JS_EXPORT = new FqName("kotlin.js.JsExport");
|
private static final FqName JS_EXPORT = Annotations.JsExport.asSingleFqName();
|
||||||
private static final FqName JS_EXPORT_IGNORE = new FqName("kotlin.js.JsExport.Ignore");
|
private static final FqName JS_EXPORT_IGNORE = Annotations.JsExportIgnore.asSingleFqName();
|
||||||
public static final FqName JS_MODULE_ANNOTATION = new FqName("kotlin.js.JsModule");
|
private static final FqName JS_MODULE_ANNOTATION = Annotations.JsModule.asSingleFqName();
|
||||||
private static final FqName JS_NON_MODULE_ANNOTATION = new FqName("kotlin.js.JsNonModule");
|
private static final FqName JS_NON_MODULE_ANNOTATION = Annotations.JsNonModule.asSingleFqName();
|
||||||
public static final FqName JS_QUALIFIER_ANNOTATION = new FqName("kotlin.js.JsQualifier");
|
private static final FqName JS_QUALIFIER_ANNOTATION = Annotations.JsQualifier.asSingleFqName();
|
||||||
|
|
||||||
private AnnotationsUtils() {
|
private AnnotationsUtils() {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user