diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt index d6dbb57f6a4..b813f1c6935 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectedMarker.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,8 @@ import org.jetbrains.kotlin.idea.caches.resolve.ModuleTestSourceInfo import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.toDescriptor +import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor +import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier @@ -31,6 +33,7 @@ import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.getMultiTargetPlatform +import org.jetbrains.kotlin.utils.addToStdlib.safeAs val ModuleDescriptor.sourceKind: SourceKind get() = when (getCapability(ModuleInfo.Capability)) { @@ -76,8 +79,17 @@ internal fun KtDeclaration.expectedDeclarationIfAny(): KtDeclaration? { return DescriptorToSourceUtils.descriptorToDeclaration(expectedDescriptor) as? KtDeclaration } -internal fun KtDeclaration.isExpectedOrExpectedClassMember() = - hasExpectModifier() || (containingClassOrObject?.hasExpectModifier() ?: false) +internal fun KtDeclaration.isExpectedOrExpectedClassMember(): Boolean { + if (hasExpectModifier()) return true + if (this is KtClassOrObject) return this.isExpected() + + return containingClassOrObject?.isExpected() == true +} + +internal fun KtClassOrObject.isExpected(): Boolean { + return this.hasExpectModifier() || + this.descriptor.safeAs()?.isExpect == true +} internal fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? { if (this is MemberDescriptor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt index 77922a38d44..b25bf61aa8f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveEmptyPrimaryConstructorIntention.kt @@ -19,14 +19,10 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInspection.CleanupLocalInspectionTool import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.idea.highlighter.markers.isExpectedOrExpectedClassMember import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection -import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.psiUtil.containingClass -import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier -import org.jetbrains.kotlin.utils.addToStdlib.safeAs class RemoveEmptyPrimaryConstructorInspection : IntentionBasedInspection( RemoveEmptyPrimaryConstructorIntention::class @@ -44,14 +40,7 @@ class RemoveEmptyPrimaryConstructorIntention : SelfTargetingOffsetIndependentInt element.annotations.isNotEmpty() -> false element.modifierList?.text?.isBlank() == false -> false element.containingClass()?.secondaryConstructors?.isNotEmpty() == true -> false - element.isConstructorOfExpectClass() -> false + element.isExpectedOrExpectedClassMember() -> false else -> true } - - private fun KtPrimaryConstructor.isConstructorOfExpectClass(): Boolean { - val containingClass = containingClassOrObject ?: return false - if (containingClass.hasExpectModifier()) return true - - return containingClass.descriptor.safeAs()?.isExpect ?: false - } }