Find Usages on "override val" in constructor asks about base usages

Also fix long-standing bug with "title" parameter being ignored when
displaying messages

 #KT-17845 Fixed
This commit is contained in:
Dmitry Jemerov
2017-05-16 15:46:52 +02:00
parent 8f38d03b48
commit 2cbb8d03c0
3 changed files with 7 additions and 4 deletions
@@ -25,7 +25,7 @@ import javax.swing.Icon
fun showYesNoCancelDialog(key: String, project: Project, message: String, title: String, icon: Icon, default: Int?): Int {
return if (!ApplicationManager.getApplication().isUnitTestMode) {
Messages.showYesNoCancelDialog(project, message, message, icon)
Messages.showYesNoCancelDialog(project, message, title, icon)
}
else {
callInTestMode(key, default)
@@ -29,7 +29,6 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.search.searches.OverridingMethodsSearch
import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.findUsages.handlers.DelegatingFindMemberUsagesHandler
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindMemberUsagesHandler
@@ -80,6 +79,10 @@ class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactor
is KtParameter -> {
if (canAsk) {
if (element.hasValOrVar()) {
val declarationsToSearch = checkSuperMethods(element, null, "find usages of")
return handlerForMultiple(element, declarationsToSearch)
}
val function = element.ownerFunction
if (function != null && function.isOverridable()) {
val psiMethod = function.toLightMethods().singleOrNull()
@@ -848,7 +848,7 @@ fun checkSuperMethods(
return overriddenElementsToDescriptor.entries.map { entry ->
val (element, descriptor) = entry
val description = when (element) {
is KtNamedFunction, is KtProperty -> formatClassDescriptor(descriptor.containingDeclaration)
is KtNamedFunction, is KtProperty, is KtParameter -> formatClassDescriptor(descriptor.containingDeclaration)
is PsiMethod -> {
val psiClass = element.containingClass ?: error("Invalid element: ${element.getText()}")
formatPsiClass(psiClass, true, false)
@@ -891,7 +891,7 @@ fun checkSuperMethods(
val overriddenElementsToDescriptor = HashMap<PsiElement, CallableDescriptor>()
for (overriddenDescriptor in DescriptorUtils.getAllOverriddenDescriptors(declarationDescriptor)) {
val overriddenDeclaration = DescriptorToSourceUtilsIde.getAnyDeclaration(project, overriddenDescriptor) ?: continue
if (overriddenDeclaration is KtNamedFunction || overriddenDeclaration is KtProperty || overriddenDeclaration is PsiMethod) {
if (overriddenDeclaration is KtNamedFunction || overriddenDeclaration is KtProperty || overriddenDeclaration is PsiMethod || overriddenDeclaration is KtParameter) {
overriddenElementsToDescriptor[overriddenDeclaration] = overriddenDescriptor
}
}