Fix for EA-81477 : correct handling of a property without initializer (but with e.g. getter)

This commit is contained in:
Mikhail Glukhikh
2016-06-17 14:25:12 +03:00
parent 2ff53e67d9
commit 4e2d35ae8b
4 changed files with 17 additions and 1 deletions

View File

@@ -64,7 +64,9 @@ class ChangeFunctionLiteralReturnTypeFix(
val eventualFunctionLiteralType = TypeUtils.substituteParameters(functionClass, functionClassTypeParameters)
val correspondingProperty = PsiTreeUtil.getParentOfType(functionLiteralExpression, KtProperty::class.java)
if (correspondingProperty != null && QuickFixUtil.canEvaluateTo(correspondingProperty.initializer!!, functionLiteralExpression)) {
if (correspondingProperty != null &&
correspondingProperty.initializer?.let { QuickFixUtil.canEvaluateTo(it, functionLiteralExpression) } ?: true
) {
val correspondingPropertyTypeRef = correspondingProperty.typeReference
val propertyType = context.get(BindingContext.TYPE, correspondingPropertyTypeRef)
return if (propertyType != null && !KotlinTypeChecker.DEFAULT.isSubtypeOf(eventualFunctionLiteralType, propertyType))

View File

@@ -0,0 +1,4 @@
// "Change 'complex' type to '(Int) -> Long'" "true"
val complex: (Int) -> String
get() = { it.toLong()<caret> }

View File

@@ -0,0 +1,4 @@
// "Change 'complex' type to '(Int) -> Long'" "true"
val complex: (Int) -> Long
get() = { it.toLong() }

View File

@@ -8337,6 +8337,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("literalPropertyWithGetter.kt")
public void testLiteralPropertyWithGetter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/literalPropertyWithGetter.kt");
doTest(fileName);
}
@TestMetadata("multiFakeOverride.kt")
public void testMultiFakeOverride() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/multiFakeOverride.kt");