Refactoring: Move non-specific TypeSubstitutor factories to substitutionUtils.kt in compiler
Merge typeUtils.kt with changeSignatureUtils.kt
This commit is contained in:
+11
-23
@@ -14,17 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.refactoring.changeSignature
|
package org.jetbrains.kotlin.types.substitutions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JetCallableDefinitionUsage
|
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
||||||
import java.util.LinkedHashMap
|
import java.util.LinkedHashMap
|
||||||
|
|
||||||
private fun getTypeSubstitution(baseType: JetType, derivedType: JetType): LinkedHashMap<TypeConstructor, TypeProjection>? {
|
public fun getTypeSubstitution(baseType: JetType, derivedType: JetType): LinkedHashMap<TypeConstructor, TypeProjection>? {
|
||||||
val substitutedType = TypeCheckingProcedure.findCorrespondingSupertype(derivedType, baseType) ?: return null
|
val substitutedType = TypeCheckingProcedure.findCorrespondingSupertype(derivedType, baseType) ?: return null
|
||||||
|
|
||||||
val substitution = LinkedHashMap<TypeConstructor, TypeProjection>(substitutedType.getArguments().size())
|
val substitution = LinkedHashMap<TypeConstructor, TypeProjection>(substitutedType.getArguments().size())
|
||||||
@@ -35,7 +33,7 @@ private fun getTypeSubstitution(baseType: JetType, derivedType: JetType): Linked
|
|||||||
return substitution
|
return substitution
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCallableSubstitution(
|
public fun getCallableSubstitution(
|
||||||
baseCallable: CallableDescriptor,
|
baseCallable: CallableDescriptor,
|
||||||
derivedCallable: CallableDescriptor
|
derivedCallable: CallableDescriptor
|
||||||
): MutableMap<TypeConstructor, TypeProjection>? {
|
): MutableMap<TypeConstructor, TypeProjection>? {
|
||||||
@@ -50,23 +48,13 @@ private fun getCallableSubstitution(
|
|||||||
return substitution
|
return substitution
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTypeSubstitutor(baseType: JetType, derivedType: JetType): TypeSubstitutor? {
|
public fun getCallableSubstitutor(
|
||||||
|
baseCallable: CallableDescriptor,
|
||||||
|
derivedCallable: CallableDescriptor
|
||||||
|
): TypeSubstitutor? {
|
||||||
|
return getCallableSubstitution(baseCallable, derivedCallable)?.let { TypeSubstitutor.create(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun getTypeSubstitutor(baseType: JetType, derivedType: JetType): TypeSubstitutor? {
|
||||||
return getTypeSubstitution(baseType, derivedType)?.let { TypeSubstitutor.create(it) }
|
return getTypeSubstitution(baseType, derivedType)?.let { TypeSubstitutor.create(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCallableSubstitutor(
|
|
||||||
baseFunction: JetCallableDefinitionUsage<*>,
|
|
||||||
derivedCallable: JetCallableDefinitionUsage<*>
|
|
||||||
): TypeSubstitutor? {
|
|
||||||
val currentBaseFunction = baseFunction.getCurrentCallableDescriptor()
|
|
||||||
val currentDerivedFunction = derivedCallable.getCurrentCallableDescriptor()
|
|
||||||
if (currentBaseFunction == null || currentDerivedFunction == null) return null
|
|
||||||
|
|
||||||
return getCallableSubstitution(currentBaseFunction, currentDerivedFunction)?.let { TypeSubstitutor.create(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun JetType.renderTypeWithSubstitution(substitutor: TypeSubstitutor?, defaultText: String, inArgumentPosition: Boolean): String {
|
|
||||||
val newType = substitutor?.substitute(this, Variance.INVARIANT) ?: return defaultText
|
|
||||||
val renderer = if (inArgumentPosition) IdeDescriptorRenderers.SOURCE_CODE_FOR_TYPE_ARGUMENTS else IdeDescriptorRenderers.SOURCE_CODE
|
|
||||||
return renderer.renderType(newType)
|
|
||||||
}
|
|
||||||
+21
@@ -22,9 +22,15 @@ import com.intellij.refactoring.changeSignature.OverriderUsageInfo
|
|||||||
import com.intellij.usageView.UsageInfo
|
import com.intellij.usageView.UsageInfo
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.DeferredJavaMethodKotlinCallerUsage
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.DeferredJavaMethodKotlinCallerUsage
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JavaMethodKotlinUsageWithDelegate
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JavaMethodKotlinUsageWithDelegate
|
||||||
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JetCallableDefinitionUsage
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallerUsage
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallerUsage
|
||||||
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||||
|
import org.jetbrains.kotlin.types.JetType
|
||||||
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
import org.jetbrains.kotlin.types.substitutions.getCallableSubstitutor
|
||||||
|
|
||||||
private fun JetNamedDeclaration.getDeclarationBody(): JetElement? {
|
private fun JetNamedDeclaration.getDeclarationBody(): JetElement? {
|
||||||
return when {
|
return when {
|
||||||
@@ -56,4 +62,19 @@ public fun JetElement.isInsideOfCallerBody(allUsages: Array<out UsageInfo>): Boo
|
|||||||
} as? JetNamedDeclaration ?: return false
|
} as? JetNamedDeclaration ?: return false
|
||||||
val body = container.getDeclarationBody() ?: return false
|
val body = container.getDeclarationBody() ?: return false
|
||||||
return body.getTextRange().contains(getTextRange()) && container.isCaller(allUsages)
|
return body.getTextRange().contains(getTextRange()) && container.isCaller(allUsages)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getCallableSubstitutor(
|
||||||
|
baseFunction: JetCallableDefinitionUsage<*>,
|
||||||
|
derivedCallable: JetCallableDefinitionUsage<*>
|
||||||
|
): TypeSubstitutor? {
|
||||||
|
val currentBaseFunction = baseFunction.getCurrentCallableDescriptor() ?: return null
|
||||||
|
val currentDerivedFunction = derivedCallable.getCurrentCallableDescriptor() ?: return null
|
||||||
|
return getCallableSubstitutor(currentBaseFunction, currentDerivedFunction)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun JetType.renderTypeWithSubstitution(substitutor: TypeSubstitutor?, defaultText: String, inArgumentPosition: Boolean): String {
|
||||||
|
val newType = substitutor?.substitute(this, Variance.INVARIANT) ?: return defaultText
|
||||||
|
val renderer = if (inArgumentPosition) IdeDescriptorRenderers.SOURCE_CODE_FOR_TYPE_ARGUMENTS else IdeDescriptorRenderers.SOURCE_CODE
|
||||||
|
return renderer.renderType(newType)
|
||||||
}
|
}
|
||||||
+3
-3
@@ -26,7 +26,6 @@ import kotlin.KotlinPackage;
|
|||||||
import kotlin.Pair;
|
import kotlin.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||||
@@ -38,7 +37,6 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignaturePack
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeInfo;
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeInfo;
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo;
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo;
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar;
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar;
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers;
|
|
||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences;
|
import org.jetbrains.kotlin.idea.util.ShortenReferences;
|
||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences.Options;
|
import org.jetbrains.kotlin.idea.util.ShortenReferences.Options;
|
||||||
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
|
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
|
||||||
@@ -50,6 +48,8 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
||||||
|
import org.jetbrains.kotlin.types.TypesPackage;
|
||||||
|
import org.jetbrains.kotlin.types.substitutions.SubstitutionsPackage;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ public class JetCallableDefinitionUsage<T extends PsiElement> extends JetUsageIn
|
|||||||
|
|
||||||
if (!(classDescriptor instanceof ClassDescriptor)) return null;
|
if (!(classDescriptor instanceof ClassDescriptor)) return null;
|
||||||
|
|
||||||
typeSubstitutor = ChangeSignaturePackage.getTypeSubstitutor(
|
typeSubstitutor = SubstitutionsPackage.getTypeSubstitutor(
|
||||||
((ClassDescriptor) classDescriptor).getDefaultType(),
|
((ClassDescriptor) classDescriptor).getDefaultType(),
|
||||||
samCallType
|
samCallType
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user