Completion after "by" for top-level properties
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class X
|
||||
class Y
|
||||
class Z
|
||||
|
||||
operator fun X.getValue(thisRef: Nothing?, property: KProperty<*>): String = ""
|
||||
operator fun Y.getValue(thisRef: Any?, property: KProperty<*>): String = ""
|
||||
operator fun Z.getValue(thisRef: Any, property: KProperty<*>): String = ""
|
||||
|
||||
val property by <caret>
|
||||
|
||||
// EXIST: lazy
|
||||
// EXIST: X
|
||||
// EXIST: Y
|
||||
// ABSENT: Z
|
||||
+6
@@ -1540,6 +1540,12 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("TopLevelVal.kt")
|
||||
public void testTopLevelVal() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/smart/propertyDelegate/TopLevelVal.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ValInClass.kt")
|
||||
public void testValInClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/smart/propertyDelegate/ValInClass.kt");
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.allArgumentsMapped
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.util.DelegatingCall
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
@@ -611,7 +612,7 @@ class ExpectedInfos(
|
||||
val scope = expressionWithType.getResolutionScope(bindingContext, resolutionFacade)
|
||||
val propertyOwnerType = property.fuzzyExtensionReceiverType()
|
||||
?: property.dispatchReceiverParameter?.type?.let { FuzzyType(it, emptyList()) }
|
||||
?: return null
|
||||
?: FuzzyType(property.builtIns.nullableNothingType, emptyList())
|
||||
|
||||
val explicitPropertyType = property.fuzzyReturnType()?.check { propertyDeclaration.typeReference != null }
|
||||
val typesWithGetDetector = TypesWithGetValueDetector(scope, indicesHelper, propertyOwnerType, explicitPropertyType)
|
||||
|
||||
Reference in New Issue
Block a user