From fc5a0b6768b79e144de54763f894b4a68a93426d Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 8 Jun 2018 15:58:55 +0300 Subject: [PATCH] Misc: Fix compilation of KotlinAwareJavaGetterRenameProcessor in 172 --- ...otlinAwareJavaGetterRenameProcessor.kt.172 | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt.172 diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt.172 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt.172 new file mode 100644 index 00000000000..07df6e840a8 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt.172 @@ -0,0 +1,39 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.refactoring.rename + +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiReference +import com.intellij.psi.PsiType +import com.intellij.refactoring.rename.RenameJavaMethodProcessor +import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.idea.references.SyntheticPropertyAccessorReference +import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor +import org.jetbrains.kotlin.utils.ifEmpty + +class KotlinAwareJavaGetterRenameProcessor : RenameJavaMethodProcessor() { + override fun canProcessElement(element: PsiElement) = element is PsiMethod && element !is KtLightMethod && JvmAbi.isGetterName(element.name) + + override fun findReferences(element: PsiElement): MutableCollection { + val getterReferences = super.findReferences(element) + val getter = element as? PsiMethod ?: return getterReferences + val propertyName = SyntheticJavaPropertyDescriptor.propertyNameByGetMethodName(Name.identifier(getter.name)) ?: return getterReferences + val setterName = JvmAbi.setterName(propertyName.asString()) + val containingClass = getter.containingClass ?: return getterReferences + val setterReferences = containingClass + .findMethodsByName(setterName, true) + .filter { it.parameterList.parameters.size == 1 && it.returnType == PsiType.VOID } + .flatMap { super.findReferences(it).filterIsInstance() } + .ifEmpty { return getterReferences } + return ArrayList(getterReferences.size + setterReferences.size).apply { + addAll(getterReferences) + setterReferences.mapTo(this) { SyntheticPropertyAccessorReference.Getter(it.expression) } + } + } +} \ No newline at end of file