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)
|
||||
}
|
||||
|
||||
fun getObjectIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic {
|
||||
fun getObjectIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic? {
|
||||
return objectIntrinsics.getIntrinsic(classDescriptor)
|
||||
}
|
||||
}
|
||||
+10
-12
@@ -30,15 +30,21 @@ class DefaultClassObjectIntrinsic( val fqName: FqName): ObjectIntrinsic {
|
||||
}
|
||||
|
||||
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 ||
|
||||
!CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor)
|
||||
) {
|
||||
return NO_OBJECT_INTRINSIC
|
||||
return null
|
||||
}
|
||||
|
||||
val containingDeclaration = classDescriptor.containingDeclaration
|
||||
@@ -50,12 +56,4 @@ class ObjectIntrinsics {
|
||||
|
||||
interface ObjectIntrinsic {
|
||||
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
|
||||
) {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user