diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt index ebd478420c7..aaf9d7d8442 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.utils.KotlinVfsUtil import org.jetbrains.kotlin.utils.rethrow import java.io.File @@ -129,15 +130,14 @@ public object LightClassUtil { return LightClassGenerationSupport.getInstance(classOrObject.project).getPsiClass(classOrObject) } - public fun getLightClassAccessorMethod(accessor: JetPropertyAccessor): PsiMethod? { - val property = PsiTreeUtil.getParentOfType(accessor, JetProperty::class.java) ?: return null + public fun getLightClassAccessorMethod(accessor: JetPropertyAccessor): PsiMethod? = + getLightClassAccessorMethods(accessor).firstOrNull() + + public fun getLightClassAccessorMethods(accessor: JetPropertyAccessor): Collection { + val property = accessor.getNonStrictParentOfType() ?: return emptyList() val wrappers = getPsiMethodWrappers(property, true) - for (wrapper in wrappers) { - if ((accessor.isGetter && !wrapper.name.startsWith(JvmAbi.SETTER_PREFIX)) || (accessor.isSetter && wrapper.name.startsWith(JvmAbi.SETTER_PREFIX))) { - return wrapper - } - } - return null + return wrappers.filter { wrapper -> (accessor.isGetter && !wrapper.name.startsWith(JvmAbi.SETTER_PREFIX)) || + (accessor.isSetter && wrapper.name.startsWith(JvmAbi.SETTER_PREFIX)) } } public fun getLightFieldForCompanionObject(companionObject: JetClassOrObject): PsiField? { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt index 1e258f1033a..5ec26ede415 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt @@ -34,7 +34,7 @@ public fun JetDeclaration.toLightElements(): List = is JetProperty -> LightClassUtil.getLightClassPropertyMethods(this).toList() is JetPropertyAccessor -> LightClassUtil.getLightClassAccessorMethod(this).singletonOrEmptyList() is JetParameter -> ArrayList().let { elements -> - toPsiParameter()?.let { psiParameter -> elements.add(psiParameter) } + toPsiParameters().toCollection(elements) LightClassUtil.getLightClassPropertyMethods(this).toCollection(elements) elements @@ -64,21 +64,21 @@ public fun PsiElement.getRepresentativeLightMethod(): PsiMethod? = else -> null } -public fun JetParameter.toPsiParameter(): PsiParameter? { - val paramList = getNonStrictParentOfType() ?: return null +public fun JetParameter.toPsiParameters(): Collection { + val paramList = getNonStrictParentOfType() ?: return emptyList() val paramIndex = paramList.getParameters().indexOf(this) val owner = paramList.getParent() val lightParamIndex = if (owner is JetDeclaration && owner.isExtensionDeclaration()) paramIndex + 1 else paramIndex - val method: PsiMethod = + val methods: Collection = when (owner) { - is JetFunction -> LightClassUtil.getLightClassMethod(owner) - is JetPropertyAccessor -> LightClassUtil.getLightClassAccessorMethod(owner) + is JetFunction -> LightClassUtil.getLightClassMethods(owner) + is JetPropertyAccessor -> LightClassUtil.getLightClassAccessorMethods(owner) else -> null - } ?: return null + } ?: return emptyList() - return method.getParameterList().getParameters()[lightParamIndex] + return methods.map { it.getParameterList().getParameters()[lightParamIndex] } } public fun JetTypeParameter.toPsiTypeParameters(): List { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index 7680ac69e23..591cc79c422 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -45,6 +45,7 @@ import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.utils.ifEmpty import java.util.* public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { @@ -306,9 +307,9 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { ): Collection? { when (element) { is JetParameter -> - return element.toPsiParameter()?.let { psiParameter -> - JetRefactoringUtil.checkParametersInMethodHierarchy(psiParameter) - } ?: Collections.singletonList(element) + return element.toPsiParameters().flatMap { psiParameter -> + JetRefactoringUtil.checkParametersInMethodHierarchy(psiParameter) ?: emptyList() + }.ifEmpty { listOf(element) } is PsiParameter -> return JetRefactoringUtil.checkParametersInMethodHierarchy(element)