fix more compilation errors and some tests
This commit is contained in:
@@ -33,7 +33,7 @@ public fun PsiElement.getKotlinFqName(): FqName? {
|
|||||||
return when (element) {
|
return when (element) {
|
||||||
is PsiPackage -> FqName(element.getQualifiedName())
|
is PsiPackage -> FqName(element.getQualifiedName())
|
||||||
is PsiClass -> element.getQualifiedName()?.let { FqName(it) }
|
is PsiClass -> element.getQualifiedName()?.let { FqName(it) }
|
||||||
is PsiMember -> (element : PsiMember).getName()?.let { name ->
|
is PsiMember -> (element as PsiMember).getName()?.let { name ->
|
||||||
val prefix = element.getContainingClass()?.getQualifiedName()
|
val prefix = element.getContainingClass()?.getQualifiedName()
|
||||||
FqName(if (prefix != null) "$prefix.$name" else name)
|
FqName(if (prefix != null) "$prefix.$name" else name)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class JetElementDescriptionProvider : ElementDescriptionProvider {
|
|||||||
|
|
||||||
if (targetElement !is PsiNamedElement || targetElement !is JetElement) return null
|
if (targetElement !is PsiNamedElement || targetElement !is JetElement) return null
|
||||||
|
|
||||||
val name = (targetElement : PsiNamedElement).getName()
|
val name = (targetElement as PsiNamedElement).getName()
|
||||||
|
|
||||||
return when(location) {
|
return when(location) {
|
||||||
is UsageViewLongNameLocation ->
|
is UsageViewLongNameLocation ->
|
||||||
|
|||||||
+6
-5
@@ -52,7 +52,7 @@ internal fun getTargetParentByQualifier(
|
|||||||
isQualified: Boolean,
|
isQualified: Boolean,
|
||||||
qualifierDescriptor: DeclarationDescriptor?): PsiElement? {
|
qualifierDescriptor: DeclarationDescriptor?): PsiElement? {
|
||||||
val project = file.getProject()
|
val project = file.getProject()
|
||||||
val targetParent = when {
|
val targetParent: PsiElement = when {
|
||||||
!isQualified ->
|
!isQualified ->
|
||||||
file
|
file
|
||||||
qualifierDescriptor is ClassDescriptor ->
|
qualifierDescriptor is ClassDescriptor ->
|
||||||
@@ -61,7 +61,7 @@ internal fun getTargetParentByQualifier(
|
|||||||
if (qualifierDescriptor.fqName != file.getPackageFqName()) {
|
if (qualifierDescriptor.fqName != file.getPackageFqName()) {
|
||||||
JavaPsiFacade.getInstance(project).findPackage(qualifierDescriptor.fqName.asString())
|
JavaPsiFacade.getInstance(project).findPackage(qualifierDescriptor.fqName.asString())
|
||||||
}
|
}
|
||||||
else file : PsiElement
|
else file as PsiElement
|
||||||
else ->
|
else ->
|
||||||
null
|
null
|
||||||
} ?: return null
|
} ?: return null
|
||||||
@@ -112,11 +112,12 @@ internal fun JetSimpleNameExpression.getCreatePackageFixIfApplicable(targetParen
|
|||||||
val name = getReferencedName()
|
val name = getReferencedName()
|
||||||
if (!name.checkPackageName()) return null
|
if (!name.checkPackageName()) return null
|
||||||
|
|
||||||
val basePackage: PsiPackage = when (targetParent) {
|
val basePackage: PsiPackage? = when (targetParent) {
|
||||||
is JetFile -> JavaPsiFacade.getInstance(targetParent.getProject()).findPackage(targetParent.getPackageFqName().asString())
|
is JetFile -> JavaPsiFacade.getInstance(targetParent.getProject()).findPackage(targetParent.getPackageFqName().asString())
|
||||||
is PsiPackage -> targetParent : PsiPackage
|
is PsiPackage -> targetParent
|
||||||
else -> null
|
else -> null
|
||||||
} ?: return null
|
}
|
||||||
|
if (basePackage == null) return null
|
||||||
|
|
||||||
val baseName = basePackage.getQualifiedName()
|
val baseName = basePackage.getQualifiedName()
|
||||||
val fullName = if (baseName.isNotEmpty()) "$baseName.$name" else name
|
val fullName = if (baseName.isNotEmpty()) "$baseName.$name" else name
|
||||||
|
|||||||
+16
-12
@@ -29,6 +29,7 @@ import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer
|
|||||||
import com.intellij.refactoring.listeners.RefactoringEventListener
|
import com.intellij.refactoring.listeners.RefactoringEventListener
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
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
|
||||||
@@ -222,12 +223,7 @@ public open class KotlinIntroduceParameterHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, targetParent]
|
val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, targetParent]
|
||||||
val functionDescriptor: FunctionDescriptor =
|
val functionDescriptor = descriptor.toFunctionDescriptor(targetParent)
|
||||||
when (descriptor) {
|
|
||||||
is FunctionDescriptor -> descriptor : FunctionDescriptor
|
|
||||||
is ClassDescriptor -> descriptor.getUnsubstitutedPrimaryConstructor()
|
|
||||||
else -> null
|
|
||||||
} ?: throw AssertionError("Unexpected element type: ${targetParent.getElementTextWithContext()}")
|
|
||||||
val replacementType = expressionType.approximateWithResolvableType(targetParent.getResolutionScope(context, targetParent.getResolutionFacade()), false)
|
val replacementType = expressionType.approximateWithResolvableType(targetParent.getResolutionScope(context, targetParent.getResolutionFacade()), false)
|
||||||
|
|
||||||
val body = when (targetParent) {
|
val body = when (targetParent) {
|
||||||
@@ -354,6 +350,19 @@ public open class KotlinIntroduceParameterHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun DeclarationDescriptor?.toFunctionDescriptor(targetParent: JetNamedDeclaration): FunctionDescriptor {
|
||||||
|
val functionDescriptor: FunctionDescriptor? =
|
||||||
|
when (this) {
|
||||||
|
is FunctionDescriptor -> this
|
||||||
|
is ClassDescriptor -> this.getUnsubstitutedPrimaryConstructor()
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
if (functionDescriptor == null) {
|
||||||
|
throw AssertionError("Unexpected element type: ${targetParent.getElementTextWithContext()}")
|
||||||
|
}
|
||||||
|
return functionDescriptor
|
||||||
|
}
|
||||||
|
|
||||||
private fun findInternalUsagesOfParametersAndReceiver(
|
private fun findInternalUsagesOfParametersAndReceiver(
|
||||||
targetParent: JetNamedDeclaration,
|
targetParent: JetNamedDeclaration,
|
||||||
targetDescriptor: FunctionDescriptor
|
targetDescriptor: FunctionDescriptor
|
||||||
@@ -413,12 +422,7 @@ public open class KotlinIntroduceLambdaParameterHandler(
|
|||||||
): KotlinIntroduceParameterDialog {
|
): KotlinIntroduceParameterDialog {
|
||||||
val callable = lambdaExtractionDescriptor.extractionData.targetSibling as JetNamedDeclaration
|
val callable = lambdaExtractionDescriptor.extractionData.targetSibling as JetNamedDeclaration
|
||||||
val descriptor = callable.resolveToDescriptor()
|
val descriptor = callable.resolveToDescriptor()
|
||||||
val callableDescriptor: FunctionDescriptor =
|
val callableDescriptor = descriptor.toFunctionDescriptor(callable)
|
||||||
when (descriptor) {
|
|
||||||
is FunctionDescriptor -> descriptor : FunctionDescriptor
|
|
||||||
is ClassDescriptor -> descriptor.getUnsubstitutedPrimaryConstructor()
|
|
||||||
else -> null
|
|
||||||
} ?: throw AssertionError("Unexpected element type: ${callable.getElementTextWithContext()}")
|
|
||||||
val originalRange = lambdaExtractionDescriptor.extractionData.originalRange
|
val originalRange = lambdaExtractionDescriptor.extractionData.originalRange
|
||||||
val introduceParameterDescriptor = IntroduceParameterDescriptor(
|
val introduceParameterDescriptor = IntroduceParameterDescriptor(
|
||||||
originalRange = originalRange,
|
originalRange = originalRange,
|
||||||
|
|||||||
@@ -462,7 +462,7 @@ private fun copyTypeParameters<T>(
|
|||||||
to: T,
|
to: T,
|
||||||
inserter: (T, PsiTypeParameterList) -> Unit
|
inserter: (T, PsiTypeParameterList) -> Unit
|
||||||
) where T : PsiTypeParameterListOwner, T : PsiNameIdentifierOwner {
|
) where T : PsiTypeParameterListOwner, T : PsiNameIdentifierOwner {
|
||||||
val factory = PsiElementFactory.SERVICE.getInstance((from : PsiElement).getProject())
|
val factory = PsiElementFactory.SERVICE.getInstance((from as PsiElement).getProject())
|
||||||
val templateTypeParams = from.getTypeParameterList()?.getTypeParameters() ?: PsiTypeParameter.EMPTY_ARRAY
|
val templateTypeParams = from.getTypeParameterList()?.getTypeParameters() ?: PsiTypeParameter.EMPTY_ARRAY
|
||||||
if (templateTypeParams.isNotEmpty()) {
|
if (templateTypeParams.isNotEmpty()) {
|
||||||
inserter(to, factory.createTypeParameterList())
|
inserter(to, factory.createTypeParameterList())
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
@Suppress("REDUNDANT_NULLABLE")
|
@Suppress("REDUNDANT_NULLABLE")
|
||||||
call("": String?<caret>?)
|
call("" as String??)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun call(s: String?) {}
|
fun call(s: String?) {}
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
// "class org.jetbrains.kotlin.idea.quickfix.ChangeParameterTypeFix" "false"
|
|
||||||
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>kotlin.Int</td></tr><tr><td>Found:</td><td>kotlin.String</td></tr></table></html>
|
|
||||||
fun foo(y: Int = 0, z: (Int) -> String = {""}) {
|
|
||||||
foo(""<caret>: Int)
|
|
||||||
}
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
// "class org.jetbrains.kotlin.idea.quickfix.ChangeFunctionReturnTypeFix" "false"
|
|
||||||
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>kotlin.Int</td></tr><tr><td>Found:</td><td>kotlin.String</td></tr></table></html>
|
|
||||||
fun foo(): Int = if (true) ""<caret>: Int else 4
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
fun f() {
|
|
||||||
val v = 2..3
|
|
||||||
println(<caret>v: IntRange)
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
fun f() {
|
|
||||||
println((2..3): IntRange)
|
|
||||||
}
|
|
||||||
@@ -6413,12 +6413,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("changeFunctionParameterType5.kt")
|
|
||||||
public void testChangeFunctionParameterType5() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeFunctionParameterType5.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("changeParameterTypeLongNameRuntime.kt")
|
@TestMetadata("changeParameterTypeLongNameRuntime.kt")
|
||||||
public void testChangeParameterTypeLongNameRuntime() throws Exception {
|
public void testChangeParameterTypeLongNameRuntime() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeParameterTypeLongNameRuntime.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeParameterTypeLongNameRuntime.kt");
|
||||||
@@ -6500,12 +6494,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt")
|
|
||||||
public void testReturnedExpresionCantEvaluateToExpresionThatTypeMismatch() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("returnedExpressionTypeMismatchFunctionParameterType.kt")
|
@TestMetadata("returnedExpressionTypeMismatchFunctionParameterType.kt")
|
||||||
public void testReturnedExpressionTypeMismatchFunctionParameterType() throws Exception {
|
public void testReturnedExpressionTypeMismatchFunctionParameterType() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpressionTypeMismatchFunctionParameterType.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpressionTypeMismatchFunctionParameterType.kt");
|
||||||
|
|||||||
@@ -169,12 +169,6 @@ public class InlineTestGenerated extends AbstractInlineTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("Colon.kt")
|
|
||||||
public void testColon() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/Colon.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("ColonDontAdd.kt")
|
@TestMetadata("ColonDontAdd.kt")
|
||||||
public void testColonDontAdd() throws Exception {
|
public void testColonDontAdd() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/ColonDontAdd.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/ColonDontAdd.kt");
|
||||||
|
|||||||
+3
-2
@@ -116,13 +116,14 @@ public class DelegationTranslator(
|
|||||||
val delegateRefName = context().getScopeForDescriptor(getterDescriptor).declareName(delegateName)
|
val delegateRefName = context().getScopeForDescriptor(getterDescriptor).declareName(delegateName)
|
||||||
val delegateRef = JsNameRef(delegateRefName, JsLiteral.THIS)
|
val delegateRef = JsNameRef(delegateRefName, JsLiteral.THIS)
|
||||||
|
|
||||||
val returnExpression: JsExpression = if (DescriptorUtils.isExtension(descriptor)) { // TODO remove explicit type specification after resolving KT-5569
|
val returnExpression: JsExpression = if (DescriptorUtils.isExtension(descriptor)) {
|
||||||
val getterName = context().getNameForDescriptor(getterDescriptor)
|
val getterName = context().getNameForDescriptor(getterDescriptor)
|
||||||
val receiver = Namer.getReceiverParameterName()
|
val receiver = Namer.getReceiverParameterName()
|
||||||
JsInvocation(JsNameRef(getterName, delegateRef), JsNameRef(receiver))
|
JsInvocation(JsNameRef(getterName, delegateRef), JsNameRef(receiver))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
JsNameRef(propertyName, delegateRef)
|
@Suppress("USELESS_CAST")
|
||||||
|
(JsNameRef(propertyName, delegateRef) as JsExpression) // TODO remove explicit type specification after resolving KT-5569
|
||||||
}
|
}
|
||||||
|
|
||||||
val jsFunction = simpleReturnFunction(context().getScopeForDescriptor(getterDescriptor.getContainingDeclaration()), returnExpression)
|
val jsFunction = simpleReturnFunction(context().getScopeForDescriptor(getterDescriptor.getContainingDeclaration()), returnExpression)
|
||||||
|
|||||||
Reference in New Issue
Block a user