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);
|
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")
|
@TestMetadata("ValInClass.kt")
|
||||||
public void testValInClass() throws Exception {
|
public void testValInClass() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/smart/propertyDelegate/ValInClass.kt");
|
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.callUtil.getCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.DelegatingCall
|
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.resolve.descriptorUtil.hasDefaultValue
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
@@ -611,7 +612,7 @@ class ExpectedInfos(
|
|||||||
val scope = expressionWithType.getResolutionScope(bindingContext, resolutionFacade)
|
val scope = expressionWithType.getResolutionScope(bindingContext, resolutionFacade)
|
||||||
val propertyOwnerType = property.fuzzyExtensionReceiverType()
|
val propertyOwnerType = property.fuzzyExtensionReceiverType()
|
||||||
?: property.dispatchReceiverParameter?.type?.let { FuzzyType(it, emptyList()) }
|
?: property.dispatchReceiverParameter?.type?.let { FuzzyType(it, emptyList()) }
|
||||||
?: return null
|
?: FuzzyType(property.builtIns.nullableNothingType, emptyList())
|
||||||
|
|
||||||
val explicitPropertyType = property.fuzzyReturnType()?.check { propertyDeclaration.typeReference != null }
|
val explicitPropertyType = property.fuzzyReturnType()?.check { propertyDeclaration.typeReference != null }
|
||||||
val typesWithGetDetector = TypesWithGetValueDetector(scope, indicesHelper, propertyOwnerType, explicitPropertyType)
|
val typesWithGetDetector = TypesWithGetValueDetector(scope, indicesHelper, propertyOwnerType, explicitPropertyType)
|
||||||
|
|||||||
Reference in New Issue
Block a user