Force OOB in accessors for properties without explicit type (KT-19062)

#KT-19062 Fixed
This commit is contained in:
Nikolay Krasko
2017-07-17 22:14:24 +03:00
parent bcbff98382
commit 4e76975a52
3 changed files with 24 additions and 4 deletions
@@ -89,10 +89,12 @@ class KotlinCodeBlockModificationListener(
}
is KtProperty -> {
for (accessor in blockDeclaration.accessors) {
(accessor.initializer ?: accessor.bodyExpression)
?.takeIf { it.isAncestor(element) }
?.let { return it }
if (blockDeclaration.typeReference != null) {
for (accessor in blockDeclaration.accessors) {
(accessor.initializer ?: accessor.bodyExpression)
?.takeIf { it.isAncestor(element) }
?.let { return it }
}
}
}
@@ -0,0 +1,12 @@
// TRUE
class A {
fun foo(): Int = 12
}
class B(val a: A) {
val prop1 get() = a.fo<caret>o()
}
// TODO
// SKIP_ANALYZE_CHECK
@@ -180,6 +180,12 @@ public class OutOfBlockModificationTestGenerated extends AbstractOutOfBlockModif
doTest(fileName);
}
@TestMetadata("InPropertyAccessorWithInferenceInClass.kt")
public void testInPropertyAccessorWithInferenceInClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/outOfBlock/InPropertyAccessorWithInferenceInClass.kt");
doTest(fileName);
}
@TestMetadata("InPropertyWithFunctionLiteral.kt")
public void testInPropertyWithFunctionLiteral() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/outOfBlock/InPropertyWithFunctionLiteral.kt");