Move utilities used in IDE from OverrideResolver to descriptorUtils.kt
This commit is contained in:
@@ -32,7 +32,6 @@ import kotlin.collections.CollectionsKt;
|
|||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.annotations.ReadOnly;
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2;
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2;
|
||||||
@@ -50,7 +49,8 @@ import org.jetbrains.kotlin.utils.HashSetUtil;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static kotlin.collections.CollectionsKt.sortedBy;
|
import static kotlin.collections.CollectionsKt.sortedBy;
|
||||||
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*;
|
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION;
|
||||||
|
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
||||||
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
||||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.classCanHaveAbstractMembers;
|
import static org.jetbrains.kotlin.resolve.DescriptorUtils.classCanHaveAbstractMembers;
|
||||||
import static org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
|
import static org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE;
|
||||||
@@ -135,7 +135,7 @@ public class OverrideResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static <D> Set<D> filterOutOverriding(@NotNull Set<D> candidateSet) {
|
public static <D> Set<D> filterOutOverriding(@NotNull Set<D> candidateSet) {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return filterOverrides(candidateSet, Function.ID, Filtering.RETAIN_OVERRIDDEN);
|
return filterOverrides(candidateSet, Function.ID, Filtering.RETAIN_OVERRIDDEN);
|
||||||
}
|
}
|
||||||
@@ -1216,37 +1216,4 @@ public class OverrideResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static <D extends CallableMemberDescriptor> Collection<D> getDirectlyOverriddenDeclarations(@NotNull D descriptor) {
|
|
||||||
Set<D> result = new LinkedHashSet<D>();
|
|
||||||
//noinspection unchecked
|
|
||||||
for (D overriddenDescriptor : (Collection<D>) descriptor.getOverriddenDescriptors()) {
|
|
||||||
CallableMemberDescriptor.Kind kind = overriddenDescriptor.getKind();
|
|
||||||
if (kind == DECLARATION) {
|
|
||||||
result.add(overriddenDescriptor);
|
|
||||||
}
|
|
||||||
else if (kind == FAKE_OVERRIDE || kind == DELEGATION) {
|
|
||||||
result.addAll(getDirectlyOverriddenDeclarations(overriddenDescriptor));
|
|
||||||
}
|
|
||||||
else if (kind == SYNTHESIZED) {
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new AssertionError("Unexpected callable kind " + kind);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return filterOutOverridden(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@ReadOnly
|
|
||||||
public static <D extends CallableMemberDescriptor> Set<D> getDeepestSuperDeclarations(@NotNull D functionDescriptor) {
|
|
||||||
Set<D> overriddenDeclarations = DescriptorUtils.getAllOverriddenDeclarations(functionDescriptor);
|
|
||||||
if (overriddenDeclarations.isEmpty()) {
|
|
||||||
return Collections.singleton(functionDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
return filterOutOverriding(overriddenDeclarations);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.core
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
@@ -27,11 +28,14 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
|||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.OverrideResolver
|
||||||
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
|
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy
|
import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
fun DeclarationDescriptorWithVisibility.isVisible(from: DeclarationDescriptor): Boolean {
|
fun DeclarationDescriptorWithVisibility.isVisible(from: DeclarationDescriptor): Boolean {
|
||||||
return isVisible(from, null)
|
return isVisible(from, null)
|
||||||
@@ -124,3 +128,28 @@ fun Visibility.toKeywordToken(): KtModifierKeywordToken {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <D : CallableMemberDescriptor> D.getDirectlyOverriddenDeclarations(): Collection<D> {
|
||||||
|
val result = LinkedHashSet<D>()
|
||||||
|
for (overriddenDescriptor in overriddenDescriptors) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
when (overriddenDescriptor.kind) {
|
||||||
|
DECLARATION -> result.add(overriddenDescriptor as D)
|
||||||
|
FAKE_OVERRIDE, DELEGATION -> result.addAll((overriddenDescriptor as D).getDirectlyOverriddenDeclarations())
|
||||||
|
SYNTHESIZED -> {
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
else -> throw AssertionError("Unexpected callable kind ${overriddenDescriptor.kind}: $overriddenDescriptor")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return OverrideResolver.filterOutOverridden(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <D : CallableMemberDescriptor> D.getDeepestSuperDeclarations(): Set<D> {
|
||||||
|
val overriddenDeclarations = DescriptorUtils.getAllOverriddenDeclarations(this)
|
||||||
|
if (overriddenDeclarations.isEmpty()) {
|
||||||
|
return setOf(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
return OverrideResolver.filterOutOverriding(overriddenDeclarations)
|
||||||
|
}
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle;
|
import org.jetbrains.kotlin.idea.KotlinBundle;
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
||||||
|
import org.jetbrains.kotlin.idea.core.DescriptorUtilsKt;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver;
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -119,10 +119,11 @@ public class GotoSuperActionHandler implements CodeInsightActionHandler {
|
|||||||
superDescriptors = superclasses;
|
superDescriptors = superclasses;
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof CallableMemberDescriptor) {
|
else if (descriptor instanceof CallableMemberDescriptor) {
|
||||||
superDescriptors = OverrideResolver.getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
|
superDescriptors = DescriptorUtilsKt.getDirectlyOverriddenDeclarations((CallableMemberDescriptor) descriptor);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return ContainerUtil.mapNotNull(superDescriptors, new Function<DeclarationDescriptor, PsiElement>() {
|
return ContainerUtil.mapNotNull(superDescriptors, new Function<DeclarationDescriptor, PsiElement>() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -30,12 +30,12 @@ import org.jetbrains.kotlin.idea.KotlinBundle
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.KtFunctionPsiElementCellRenderer
|
import org.jetbrains.kotlin.idea.codeInsight.KtFunctionPsiElementCellRenderer
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.propertyDescriptor
|
import org.jetbrains.kotlin.idea.search.usagesSearch.propertyDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.renderer.RenderingFormat
|
import org.jetbrains.kotlin.renderer.RenderingFormat
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
import java.awt.event.MouseEvent
|
import java.awt.event.MouseEvent
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -119,6 +119,5 @@ fun resolveDeclarationWithParents(element: KtDeclaration): ResolveWithParentsRes
|
|||||||
|
|
||||||
if (descriptor !is CallableMemberDescriptor) return ResolveWithParentsResult(null, listOf())
|
if (descriptor !is CallableMemberDescriptor) return ResolveWithParentsResult(null, listOf())
|
||||||
|
|
||||||
val overriddenMembers = OverrideResolver.getDirectlyOverriddenDeclarations(descriptor)
|
return ResolveWithParentsResult(descriptor, descriptor.getDirectlyOverriddenDeclarations())
|
||||||
return ResolveWithParentsResult(descriptor, overriddenMembers)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ import org.jetbrains.kotlin.idea.KotlinBundle
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
import org.jetbrains.kotlin.psi.KtBlockExpression
|
import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||||
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
|
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
|
||||||
@@ -40,7 +42,6 @@ import org.jetbrains.kotlin.psi.KtExpression
|
|||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -60,10 +61,10 @@ abstract class CallableRefactoring<out T: CallableDescriptor>(
|
|||||||
private fun getClosestModifiableDescriptors(): Collection<CallableDescriptor> {
|
private fun getClosestModifiableDescriptors(): Collection<CallableDescriptor> {
|
||||||
return when (kind) {
|
return when (kind) {
|
||||||
DECLARATION -> {
|
DECLARATION -> {
|
||||||
Collections.singleton(callableDescriptor)
|
setOf(callableDescriptor)
|
||||||
}
|
}
|
||||||
DELEGATION, FAKE_OVERRIDE -> {
|
DELEGATION, FAKE_OVERRIDE -> {
|
||||||
OverrideResolver.getDirectlyOverriddenDeclarations(callableDescriptor as CallableMemberDescriptor)
|
(callableDescriptor as CallableMemberDescriptor).getDirectlyOverriddenDeclarations()
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
throw IllegalStateException("Unexpected callable kind: $kind")
|
throw IllegalStateException("Unexpected callable kind: $kind")
|
||||||
@@ -141,8 +142,8 @@ abstract class CallableRefactoring<out T: CallableDescriptor>(
|
|||||||
|
|
||||||
assert(!closestModifiableDescriptors.isEmpty()) { "Should contain original declaration or some of its super declarations" }
|
assert(!closestModifiableDescriptors.isEmpty()) { "Should contain original declaration or some of its super declarations" }
|
||||||
val deepestSuperDeclarations =
|
val deepestSuperDeclarations =
|
||||||
(callableDescriptor as? CallableMemberDescriptor)?.let { OverrideResolver.getDeepestSuperDeclarations(it) }
|
(callableDescriptor as? CallableMemberDescriptor)?.let(CallableMemberDescriptor::getDeepestSuperDeclarations)
|
||||||
?: Collections.singletonList(callableDescriptor)
|
?: listOf(callableDescriptor)
|
||||||
if (ApplicationManager.getApplication()!!.isUnitTestMode) {
|
if (ApplicationManager.getApplication()!!.isUnitTestMode) {
|
||||||
performRefactoring(deepestSuperDeclarations)
|
performRefactoring(deepestSuperDeclarations)
|
||||||
return true
|
return true
|
||||||
|
|||||||
+5
-8
@@ -28,7 +28,6 @@ import com.intellij.psi.PsiType
|
|||||||
import com.intellij.refactoring.BaseRefactoringProcessor
|
import com.intellij.refactoring.BaseRefactoringProcessor
|
||||||
import com.intellij.refactoring.changeSignature.*
|
import com.intellij.refactoring.changeSignature.*
|
||||||
import com.intellij.refactoring.util.CanonicalTypes
|
import com.intellij.refactoring.util.CanonicalTypes
|
||||||
import com.intellij.testFramework.LightVirtualFile
|
|
||||||
import com.intellij.util.VisibilityUtil
|
import com.intellij.util.VisibilityUtil
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod
|
import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod
|
||||||
@@ -36,16 +35,14 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||||
import org.jetbrains.kotlin.idea.refactoring.createJavaMethod
|
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
|
||||||
import org.jetbrains.kotlin.idea.refactoring.toPsiFile
|
|
||||||
import org.jetbrains.kotlin.idea.refactoring.CallableRefactoring
|
import org.jetbrains.kotlin.idea.refactoring.CallableRefactoring
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangePropertySignatureDialog
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangePropertySignatureDialog
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog
|
||||||
|
import org.jetbrains.kotlin.idea.refactoring.createJavaMethod
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
|
|
||||||
interface KotlinChangeSignatureConfiguration {
|
interface KotlinChangeSignatureConfiguration {
|
||||||
fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor = originalDescriptor
|
fun configure(originalDescriptor: KotlinMethodDescriptor): KotlinMethodDescriptor = originalDescriptor
|
||||||
@@ -224,9 +221,9 @@ class KotlinChangeSignature(project: Project,
|
|||||||
defaultValueContext: PsiElement
|
defaultValueContext: PsiElement
|
||||||
): KotlinChangeInfo? {
|
): KotlinChangeInfo? {
|
||||||
val jetChangeSignature = KotlinChangeSignature(project, callableDescriptor, configuration, defaultValueContext, null)
|
val jetChangeSignature = KotlinChangeSignature(project, callableDescriptor, configuration, defaultValueContext, null)
|
||||||
val declarations = if (callableDescriptor is CallableMemberDescriptor) {
|
val declarations =
|
||||||
OverrideResolver.getDeepestSuperDeclarations(callableDescriptor)
|
if (callableDescriptor is CallableMemberDescriptor) callableDescriptor.getDeepestSuperDeclarations()
|
||||||
} else listOf(callableDescriptor)
|
else listOf(callableDescriptor)
|
||||||
|
|
||||||
val adjustedDescriptor = jetChangeSignature.adjustDescriptor(declarations) ?: return null
|
val adjustedDescriptor = jetChangeSignature.adjustDescriptor(declarations) ?: return null
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -27,13 +27,13 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement
|
|||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
|
||||||
import org.jetbrains.kotlin.idea.refactoring.canRefactor
|
import org.jetbrains.kotlin.idea.refactoring.canRefactor
|
||||||
import org.jetbrains.kotlin.idea.refactoring.getAffectedCallables
|
import org.jetbrains.kotlin.idea.refactoring.getAffectedCallables
|
||||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
|
class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
|
||||||
@@ -75,7 +75,7 @@ class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
|
|||||||
|
|
||||||
val function = element.ownerFunction ?: return
|
val function = element.ownerFunction ?: return
|
||||||
val originalDescriptor = function.resolveToDescriptor() as FunctionDescriptor
|
val originalDescriptor = function.resolveToDescriptor() as FunctionDescriptor
|
||||||
val affectedCallables = getAffectedCallables(element.project, OverrideResolver.getDeepestSuperDeclarations(originalDescriptor))
|
val affectedCallables = getAffectedCallables(element.project, originalDescriptor.getDeepestSuperDeclarations())
|
||||||
for (callable in affectedCallables) {
|
for (callable in affectedCallables) {
|
||||||
if (!callable.canRefactor()) continue
|
if (!callable.canRefactor()) continue
|
||||||
val parameter: PsiNamedElement? = when (callable) {
|
val parameter: PsiNamedElement? = when (callable) {
|
||||||
|
|||||||
+2
-2
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
|
||||||
import org.jetbrains.kotlin.idea.core.isEnumCompanionPropertyWithEntryConflict
|
import org.jetbrains.kotlin.idea.core.isEnumCompanionPropertyWithEntryConflict
|
||||||
import org.jetbrains.kotlin.idea.refactoring.dropOverrideKeywordIfNecessary
|
import org.jetbrains.kotlin.idea.refactoring.dropOverrideKeywordIfNecessary
|
||||||
import org.jetbrains.kotlin.idea.references.KtReference
|
import org.jetbrains.kotlin.idea.references.KtReference
|
||||||
@@ -53,7 +54,6 @@ import org.jetbrains.kotlin.psi.psiUtil.findPropertyByName
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike
|
import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
import org.jetbrains.kotlin.util.findCallableMemberBySignature
|
import org.jetbrains.kotlin.util.findCallableMemberBySignature
|
||||||
@@ -426,7 +426,7 @@ class RenameKotlinPropertyProcessor : RenameKotlinPsiProcessor() {
|
|||||||
if (descriptor != null) {
|
if (descriptor != null) {
|
||||||
assert(descriptor is PropertyDescriptor) { "Property descriptor is expected" }
|
assert(descriptor is PropertyDescriptor) { "Property descriptor is expected" }
|
||||||
|
|
||||||
val supers = OverrideResolver.getDeepestSuperDeclarations(descriptor as PropertyDescriptor)
|
val supers = (descriptor as PropertyDescriptor).getDeepestSuperDeclarations()
|
||||||
|
|
||||||
// Take one of supers for now - API doesn't support substitute to several elements (IDEA-48796)
|
// Take one of supers for now - API doesn't support substitute to several elements (IDEA-48796)
|
||||||
val deepest = supers.first()
|
val deepest = supers.first()
|
||||||
|
|||||||
+4
-5
@@ -28,18 +28,17 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
|
||||||
|
|
||||||
class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, OverridingMethodsSearch.SearchParameters> {
|
class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, OverridingMethodsSearch.SearchParameters> {
|
||||||
override fun execute(p: OverridingMethodsSearch.SearchParameters, consumer: Processor<PsiMethod>): Boolean {
|
override fun execute(p: OverridingMethodsSearch.SearchParameters, consumer: Processor<PsiMethod>): Boolean {
|
||||||
val method = p.method
|
val method = p.method
|
||||||
if (method !is KtLightMethod) return true
|
if (method !is KtLightMethod) return true
|
||||||
|
|
||||||
val declaration = method.kotlinOrigin as? KtCallableDeclaration
|
val declaration = method.kotlinOrigin as? KtCallableDeclaration ?: return true
|
||||||
if (declaration == null) return true
|
|
||||||
|
|
||||||
val callDescriptor = runReadAction { declaration.resolveToDescriptor() }
|
val callDescriptor = runReadAction { declaration.resolveToDescriptor() }
|
||||||
if (callDescriptor !is CallableDescriptor) return true
|
if (callDescriptor !is CallableDescriptor) return true
|
||||||
@@ -70,7 +69,7 @@ class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, Ove
|
|||||||
val candidateDescriptor = (lightMethodCandidate as? KtLightMethod)?.kotlinOrigin?.resolveToDescriptor() ?: continue
|
val candidateDescriptor = (lightMethodCandidate as? KtLightMethod)?.kotlinOrigin?.resolveToDescriptor() ?: continue
|
||||||
if (candidateDescriptor !is CallableMemberDescriptor) continue
|
if (candidateDescriptor !is CallableMemberDescriptor) continue
|
||||||
|
|
||||||
val overriddenDescriptors = OverrideResolver.getDirectlyOverriddenDeclarations(candidateDescriptor)
|
val overriddenDescriptors = candidateDescriptor.getDirectlyOverriddenDeclarations()
|
||||||
for (candidateSuper in overriddenDescriptors) {
|
for (candidateSuper in overriddenDescriptors) {
|
||||||
val candidateDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(candidateSuper)
|
val candidateDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(candidateSuper)
|
||||||
if (candidateDeclaration == callableDeclaration) {
|
if (candidateDeclaration == callableDeclaration) {
|
||||||
@@ -81,4 +80,4 @@ class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, Ove
|
|||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user