minor ObjectIntrinsics refactoring
This commit is contained in:
committed by
Anton Bannykh
parent
60e487dcec
commit
2352dc3d1c
@@ -43,7 +43,7 @@ class Intrinsics {
|
|||||||
return functionIntrinsics.getIntrinsic(descriptor)
|
return functionIntrinsics.getIntrinsic(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getObjectIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic {
|
fun getObjectIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic? {
|
||||||
return objectIntrinsics.getIntrinsic(classDescriptor)
|
return objectIntrinsics.getIntrinsic(classDescriptor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+10
-12
@@ -30,15 +30,21 @@ class DefaultClassObjectIntrinsic( val fqName: FqName): ObjectIntrinsic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ObjectIntrinsics {
|
class ObjectIntrinsics {
|
||||||
private val cache = mutableMapOf<ClassDescriptor, ObjectIntrinsic>()
|
private val cache = mutableMapOf<ClassDescriptor, ObjectIntrinsic?>()
|
||||||
|
|
||||||
fun getIntrinsic(classDescriptor: ClassDescriptor) = cache.getOrPut(classDescriptor) { createIntrinsic(classDescriptor) }
|
fun getIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic? {
|
||||||
|
if (classDescriptor in cache) return cache[classDescriptor]
|
||||||
|
|
||||||
private fun createIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic {
|
return createIntrinsic(classDescriptor).also {
|
||||||
|
cache[classDescriptor] = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic? {
|
||||||
if (classDescriptor.fqNameUnsafe == KotlinBuiltIns.FQ_NAMES._enum ||
|
if (classDescriptor.fqNameUnsafe == KotlinBuiltIns.FQ_NAMES._enum ||
|
||||||
!CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor)
|
!CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor)
|
||||||
) {
|
) {
|
||||||
return NO_OBJECT_INTRINSIC
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val containingDeclaration = classDescriptor.containingDeclaration
|
val containingDeclaration = classDescriptor.containingDeclaration
|
||||||
@@ -50,12 +56,4 @@ class ObjectIntrinsics {
|
|||||||
|
|
||||||
interface ObjectIntrinsic {
|
interface ObjectIntrinsic {
|
||||||
fun apply(context: TranslationContext): JsExpression
|
fun apply(context: TranslationContext): JsExpression
|
||||||
fun exists(): Boolean = true
|
|
||||||
}
|
|
||||||
|
|
||||||
object NO_OBJECT_INTRINSIC : ObjectIntrinsic {
|
|
||||||
override fun apply(context: TranslationContext): JsExpression =
|
|
||||||
throw UnsupportedOperationException("ObjectIntrinsic#NO_OBJECT_INTRINSIC_#apply")
|
|
||||||
|
|
||||||
override fun exists(): Boolean = false
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ public class CompanionObjectIntrinsicAccessTranslator extends AbstractTranslator
|
|||||||
@NotNull TranslationContext context
|
@NotNull TranslationContext context
|
||||||
) {
|
) {
|
||||||
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression(context.bindingContext(), expression);
|
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression(context.bindingContext(), expression);
|
||||||
return descriptor instanceof ClassDescriptor && context.intrinsics().getObjectIntrinsic((ClassDescriptor) descriptor).exists();
|
return descriptor instanceof ClassDescriptor && context.intrinsics().getObjectIntrinsic((ClassDescriptor) descriptor) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user