From 5848bc9a44ef521767970019a05356e163882a50 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 20 Feb 2018 17:55:30 +0300 Subject: [PATCH] Introduce KtClassOrObject.resolveToDescriptorIfAny() --- .../jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt | 8 +++++--- .../idea/caches/resolve/lightClasses/KtFakeLightClass.kt | 5 ++--- .../structureView/KotlinInheritedMembersNodeProvider.kt | 3 +-- .../android/intention/KotlinAndroidAddStringResource.kt | 2 +- .../core/overrideImplement/ImplementMembersHandler.kt | 2 +- .../overrideImplement/OverrideImplementMembersHandler.kt | 2 +- .../jetbrains/kotlin/idea/core/psiModificationUtils.kt | 2 +- .../idea/debugger/stepping/KotlinBasicStepMethodFilter.kt | 2 +- .../kotlin/idea/KotlinQuickDocumentationProvider.kt | 2 +- .../kotlin/idea/inspections/EqualsOrHashCodeInspection.kt | 5 ++--- .../idea/intentions/ConvertSealedClassToEnumIntention.kt | 3 +-- .../idea/intentions/ImplementAbstractMemberIntention.kt | 4 ++-- .../intentions/MoveMemberOutOfCompanionObjectIntention.kt | 2 +- .../kotlin/idea/quickfix/SuperClassNotInitialized.kt | 3 +-- .../createFromUsage/callableBuilder/CallableBuilder.kt | 2 +- .../CreateConstructorFromDelegationCallActionFactory.kt | 3 +-- .../createVariable/CreateParameterFromUsageFix.kt | 2 +- .../parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt | 2 +- 18 files changed, 25 insertions(+), 29 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index 5ef2968d80d..32a329e9606 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -20,9 +20,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.caches.resolve.KotlinCacheService -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* @@ -67,6 +65,10 @@ fun KtDeclaration.resolveToDescriptorIfAny(bodyResolveMode: BodyResolveMode = Bo } } +fun KtClassOrObject.resolveToDescriptorIfAny(bodyResolveMode: BodyResolveMode = BodyResolveMode.PARTIAL): ClassDescriptor? { + return (this as KtDeclaration).resolveToDescriptorIfAny(bodyResolveMode) as? ClassDescriptor +} + fun KtParameter.resolveToParameterDescriptorIfAny(bodyResolveMode: BodyResolveMode = BodyResolveMode.PARTIAL): ValueParameterDescriptor? { val context = analyze(bodyResolveMode) return context.get(BindingContext.VALUE_PARAMETER, this) as? ValueParameterDescriptor diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/KtFakeLightClass.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/KtFakeLightClass.kt index 916ab84948d..c232a8cd5a1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/KtFakeLightClass.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/KtFakeLightClass.kt @@ -25,7 +25,6 @@ import com.intellij.psi.impl.light.LightMethod import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.LightClassInheritanceHelper import org.jetbrains.kotlin.asJava.elements.KtLightElement -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind @@ -61,8 +60,8 @@ class KtFakeLightClass(override val kotlinOrigin: KtClassOrObject) : LightClassInheritanceHelper.getService(project).isInheritor(this, baseClass, checkDeep).ifSure { return it } val baseKtClass = (baseClass as? KtLightClass)?.kotlinOrigin ?: return false - val baseDescriptor = baseKtClass.resolveToDescriptorIfAny() as? ClassDescriptor ?: return false - val thisDescriptor = kotlinOrigin.resolveToDescriptorIfAny() as? ClassDescriptor ?: return false + val baseDescriptor = baseKtClass.resolveToDescriptorIfAny() ?: return false + val thisDescriptor = kotlinOrigin.resolveToDescriptorIfAny() ?: return false return if (checkDeep) DescriptorUtils.isSubclass(thisDescriptor, baseDescriptor) else DescriptorUtils.isDirectSubclass(thisDescriptor, baseDescriptor) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinInheritedMembersNodeProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinInheritedMembersNodeProvider.kt index 88e2f0d5fbc..caefdf72570 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinInheritedMembersNodeProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinInheritedMembersNodeProvider.kt @@ -20,7 +20,6 @@ import com.intellij.ide.util.InheritedMembersNodeProvider import com.intellij.ide.util.treeView.smartTree.TreeElement import com.intellij.psi.NavigatablePsiElement import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.psi.KtClassOrObject @@ -35,7 +34,7 @@ class KotlinInheritedMembersNodeProvider: InheritedMembersNodeProvider() diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt index 3534080f634..b64001e7c9c 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt @@ -232,7 +232,7 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention): Boolean { - val declarationDescriptor = resolveToDescriptorIfAny() as? ClassDescriptor + val declarationDescriptor = resolveToDescriptorIfAny() return baseClasses.any { declarationDescriptor?.isSubclassOf(it) ?: false } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt index 83de9886b45..daf0f9006f8 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt @@ -50,7 +50,7 @@ class ImplementAsConstructorParameter : ImplementMembersHandler() { override fun isValidForClass(classOrObject: KtClassOrObject): Boolean { if (classOrObject !is KtClass || classOrObject is KtEnumEntry || classOrObject.isInterface()) return false - val classDescriptor = classOrObject.resolveToDescriptorIfAny() as? ClassDescriptor ?: return false + val classDescriptor = classOrObject.resolveToDescriptorIfAny() ?: return false return OverrideResolver.getMissingImplementations(classDescriptor).any { it is PropertyDescriptor } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt index 0c032dfb83e..df4a03bf6e6 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt @@ -36,7 +36,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType abstract class OverrideImplementMembersHandler : LanguageCodeInsightActionHandler { fun collectMembersToGenerate(classOrObject: KtClassOrObject): Collection { - val descriptor = classOrObject.resolveToDescriptorIfAny() as? ClassDescriptor ?: return emptySet() + val descriptor = classOrObject.resolveToDescriptorIfAny() ?: return emptySet() return collectMembersToGenerate(descriptor, classOrObject.project) } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 220e67cbef9..8367fc42d37 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -214,7 +214,7 @@ fun KtDeclaration.toDescriptor(): DeclarationDescriptor? { val bindingContext = analyze() // TODO: temporary code if (this is KtPrimaryConstructor) { - return (this.getContainingClassOrObject().resolveToDescriptorIfAny() as? ClassDescriptor)?.unsubstitutedPrimaryConstructor + return this.getContainingClassOrObject().resolveToDescriptorIfAny()?.unsubstitutedPrimaryConstructor } val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, this] diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt index da4c50f090d..fbd2e9d1fa7 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt @@ -69,7 +69,7 @@ class KotlinBasicStepMethodFilter( } if (declaration is KtClass && method.name() == "") { - (declaration.resolveToDescriptorIfAny() as? ClassDescriptor)?.unsubstitutedPrimaryConstructor + declaration.resolveToDescriptorIfAny()?.unsubstitutedPrimaryConstructor } else { declaration?.resolveToDescriptorIfAny() } diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index 2b9ee306831..2d0f22d544c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -132,7 +132,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { if (quickNavigation) return renderedDecl val declarationDescriptor = element.resolveToDescriptorIfAny() - val enumDescriptor = (declarationDescriptor as? ClassDescriptor)?.getSuperClassNotAny() ?: return renderedDecl + val enumDescriptor = declarationDescriptor?.getSuperClassNotAny() ?: return renderedDecl val enumDeclaration = DescriptorToSourceUtilsIde.getAnyDeclaration(element.project, enumDescriptor) as? KtDeclaration ?: return renderedDecl diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/EqualsOrHashCodeInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/EqualsOrHashCodeInspection.kt index 2bcbad05df3..e6ba6fcc4e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/EqualsOrHashCodeInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/EqualsOrHashCodeInspection.kt @@ -12,7 +12,6 @@ import com.intellij.codeInspection.ProblemDescriptor import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementVisitor -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.idea.actions.generate.KotlinGenerateEqualsAndHashcodeAction import org.jetbrains.kotlin.idea.actions.generate.findDeclaredEquals @@ -30,7 +29,7 @@ object DeleteEqualsAndHashCodeFix : LocalQuickFix { override fun applyFix(project: Project, descriptor: ProblemDescriptor) { if (!FileModificationService.getInstance().preparePsiElementForWrite(descriptor.psiElement)) return val objectDeclaration = descriptor.psiElement.getStrictParentOfType() ?: return - val classDescriptor = objectDeclaration.resolveToDescriptorIfAny() as? ClassDescriptor ?: return + val classDescriptor = objectDeclaration.resolveToDescriptorIfAny() ?: return classDescriptor.findDeclaredEquals(false)?.source?.getPsi()?.delete() classDescriptor.findDeclaredHashCode(false)?.source?.getPsi()?.delete() } @@ -59,7 +58,7 @@ class EqualsOrHashCodeInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { return classOrObjectVisitor(fun(classOrObject) { val nameIdentifier = classOrObject.nameIdentifier ?: return - val classDescriptor = classOrObject.resolveToDescriptorIfAny() as? ClassDescriptor ?: return + val classDescriptor = classOrObject.resolveToDescriptorIfAny() ?: return val hasEquals = classDescriptor.findDeclaredEquals(false) != null val hasHashCode = classDescriptor.findDeclaredHashCode(false) != null if (!hasEquals && !hasHashCode) return diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt index 201c29b497c..cb5e8d005c9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt @@ -25,7 +25,6 @@ import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.refactoring.util.CommonRefactoringUtil import com.intellij.refactoring.util.RefactoringDescriptionLocation import org.jetbrains.kotlin.asJava.unwrapped -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress @@ -46,7 +45,7 @@ class ConvertSealedClassToEnumIntention : SelfTargetingRangeIntention(K val nameIdentifier = element.nameIdentifier ?: return null val sealedKeyword = element.modifierList?.getModifier(KtTokens.SEALED_KEYWORD) ?: return null - val classDescriptor = element.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null + val classDescriptor = element.resolveToDescriptorIfAny() ?: return null if (classDescriptor.getSuperClassNotAny() != null) return null return TextRange(sealedKeyword.startOffset, nameIdentifier.endOffset) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ImplementAbstractMemberIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ImplementAbstractMemberIntention.kt index bf3d53832a4..2a4629694fe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ImplementAbstractMemberIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ImplementAbstractMemberIntention.kt @@ -85,7 +85,7 @@ abstract class ImplementAbstractMemberIntentionBase : is KtEnumEntry -> subClass.resolveToDescriptorIfAny() is PsiClass -> subClass.getJavaClassDescriptor() else -> null - } as? ClassDescriptor ?: return false + } ?: return false return acceptSubClass(classDescriptor, memberDescriptor) } @@ -117,7 +117,7 @@ abstract class ImplementAbstractMemberIntentionBase : protected abstract val preferConstructorParameters: Boolean private fun implementInKotlinClass(editor: Editor?, member: KtNamedDeclaration, targetClass: KtClassOrObject) { - val subClassDescriptor = targetClass.resolveToDescriptorIfAny() as? ClassDescriptor ?: return + val subClassDescriptor = targetClass.resolveToDescriptorIfAny() ?: return val superMemberDescriptor = member.resolveToDescriptorIfAny() as? CallableMemberDescriptor ?: return val superClassDescriptor = superMemberDescriptor.containingDeclaration as? ClassDescriptor ?: return val substitutor = getTypeSubstitutor(superClassDescriptor.defaultType, subClassDescriptor.defaultType) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt index 250f97d4527..af3a0edc8a2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt @@ -57,7 +57,7 @@ class MoveMemberOutOfCompanionObjectIntention : MoveMemberOutOfObjectIntention(" it.parents .filterIsInstance() .none { - val classDescriptor = it.resolveToDescriptorIfAny() as? ClassDescriptor + val classDescriptor = it.resolveToDescriptorIfAny() if (classDescriptor != null && classDescriptor.isSubclassOf(targetClassDescriptor)) return@none true if (it.isTopLevel() || it is KtObjectDeclaration || (it is KtClass && !it.isInner())) return@filter true false diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt index c0409c361d9..04c739a41a3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt @@ -60,8 +60,7 @@ object SuperClassNotInitialized : KotlinIntentionActionsFactory() { if (type.isError) return emptyList() val superClass = (type.constructor.declarationDescriptor as? ClassDescriptor) ?: return emptyList() - val classDescriptor = classOrObjectDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ClassDescriptor - ?: return emptyList() + val classDescriptor = classOrObjectDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) ?: return emptyList() val constructors = superClass.constructors.filter { it.isVisible(classDescriptor) } if (constructors.isEmpty()) return emptyList() // no accessible constructor diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index ff835a985ce..44375e86038 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -483,7 +483,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { } val isExpectClassMember by lazy { - containingElement is KtClassOrObject && (containingElement.resolveToDescriptorIfAny() as? ClassDescriptor)?.isExpect ?: false + containingElement is KtClassOrObject && containingElement.resolveToDescriptorIfAny()?.isExpect ?: false } val declaration: KtNamedDeclaration = when (callableInfo.kind) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt index 4b5b77db364..a5d927135f0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable import com.intellij.psi.PsiClass -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny @@ -45,7 +44,7 @@ object CreateConstructorFromDelegationCallActionFactory : CreateCallableMemberFr val project = currentClass.project - val classDescriptor = currentClass.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null + val classDescriptor = currentClass.resolveToDescriptorIfAny() ?: return null val targetClass = if (calleeExpression.isThis) { currentClass diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt index 36289564f0c..c29696e125d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt @@ -86,7 +86,7 @@ open class CreateParameterFromUsageFix( if (element !is KtSimpleNameExpression) return null val classOrObject = element.getStrictParentOfType() ?: return null - receiverClassDescriptor = classOrObject.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null + receiverClassDescriptor = classOrObject.resolveToDescriptorIfAny() ?: return null val paramInfo = CreateParameterByRefActionFactory.extractFixData(element)?.parameterInfo if (paramInfo?.callableDescriptor == receiverClassDescriptor.unsubstitutedPrimaryConstructor) return null diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt index 522282b8ed0..69ed5579949 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt @@ -55,7 +55,7 @@ class ParcelMigrateToParcelizeQuickFix(function: KtClass) : AbstractParcelableQu private fun KtClass.findParcelerCompanionObject(): Pair? { for (obj in companionObjects) { - val objDescriptor = obj.resolveToDescriptorIfAny() as? ClassDescriptor ?: continue + val objDescriptor = obj.resolveToDescriptorIfAny() ?: continue for (superClassifier in objDescriptor.getAllSuperClassifiers()) { val superClass = superClassifier as? ClassDescriptor ?: continue if (superClass.fqNameSafe == PARCELER_FQNAME) return Pair(obj, objDescriptor)