[NI] Do not rely on a key that returns non-substituted types
This commit is contained in:
@@ -32,7 +32,10 @@ import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor;
|
|||||||
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
|
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping;
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.KtCodeFragment;
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
|
import org.jetbrains.kotlin.psi.KtFunction;
|
||||||
|
import org.jetbrains.kotlin.psi.KtSuperTypeListEntry;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
@@ -53,8 +56,9 @@ import static org.jetbrains.kotlin.codegen.coroutines.CoroutineCodegenUtilKt.SUS
|
|||||||
import static org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS;
|
import static org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS;
|
||||||
import static org.jetbrains.kotlin.descriptors.ClassKind.INTERFACE;
|
import static org.jetbrains.kotlin.descriptors.ClassKind.INTERFACE;
|
||||||
import static org.jetbrains.kotlin.descriptors.Modality.FINAL;
|
import static org.jetbrains.kotlin.descriptors.Modality.FINAL;
|
||||||
import static org.jetbrains.kotlin.resolve.BindingContext.DELEGATED_PROPERTY_CALL;
|
import static org.jetbrains.kotlin.resolve.BindingContext.DELEGATED_PROPERTY_RESOLVED_CALL;
|
||||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject;
|
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject;
|
||||||
|
import static org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.NO_EXPLICIT_RECEIVER;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmDefaultAnnotation;
|
import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmDefaultAnnotation;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmFieldAnnotation;
|
import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmFieldAnnotation;
|
||||||
|
|
||||||
@@ -296,10 +300,16 @@ public class JvmCodegenUtil {
|
|||||||
) {
|
) {
|
||||||
VariableAccessorDescriptor getter = descriptor.getGetter();
|
VariableAccessorDescriptor getter = descriptor.getGetter();
|
||||||
if (getter != null) {
|
if (getter != null) {
|
||||||
Call call = bindingContext.get(DELEGATED_PROPERTY_CALL, getter);
|
ResolvedCall<FunctionDescriptor> call = bindingContext.get(DELEGATED_PROPERTY_RESOLVED_CALL, getter);
|
||||||
if (call != null) {
|
if (call != null) {
|
||||||
assert call.getExplicitReceiver() != null : "No explicit receiver for call:" + call;
|
assert call.getExplicitReceiverKind() != NO_EXPLICIT_RECEIVER : "No explicit receiver for call:" + call;
|
||||||
return ((ReceiverValue) call.getExplicitReceiver()).getType();
|
ReceiverValue extensionReceiver = call.getExtensionReceiver();
|
||||||
|
if (extensionReceiver != null) return extensionReceiver.getType();
|
||||||
|
|
||||||
|
ReceiverValue dispatchReceiver = call.getDispatchReceiver();
|
||||||
|
if (dispatchReceiver != null) return dispatchReceiver.getType();
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ public interface BindingContext {
|
|||||||
WritableSlice<Call, FunctionDescriptor> ENCLOSING_SUSPEND_FUNCTION_FOR_SUSPEND_FUNCTION_CALL = Slices.createSimpleSlice();
|
WritableSlice<Call, FunctionDescriptor> ENCLOSING_SUSPEND_FUNCTION_FOR_SUSPEND_FUNCTION_CALL = Slices.createSimpleSlice();
|
||||||
|
|
||||||
WritableSlice<VariableAccessorDescriptor, ResolvedCall<FunctionDescriptor>> DELEGATED_PROPERTY_RESOLVED_CALL = Slices.createSimpleSlice();
|
WritableSlice<VariableAccessorDescriptor, ResolvedCall<FunctionDescriptor>> DELEGATED_PROPERTY_RESOLVED_CALL = Slices.createSimpleSlice();
|
||||||
|
|
||||||
|
// Please consider using DELEGATED_PROPERTY_RESOLVED_CALL as it contains fully substituted types
|
||||||
WritableSlice<VariableAccessorDescriptor, Call> DELEGATED_PROPERTY_CALL = Slices.createSimpleSlice();
|
WritableSlice<VariableAccessorDescriptor, Call> DELEGATED_PROPERTY_CALL = Slices.createSimpleSlice();
|
||||||
WritableSlice<VariableDescriptorWithAccessors, ResolvedCall<FunctionDescriptor>> PROVIDE_DELEGATE_RESOLVED_CALL = Slices.createSimpleSlice();
|
WritableSlice<VariableDescriptorWithAccessors, ResolvedCall<FunctionDescriptor>> PROVIDE_DELEGATE_RESOLVED_CALL = Slices.createSimpleSlice();
|
||||||
WritableSlice<VariableDescriptorWithAccessors, Call> PROVIDE_DELEGATE_CALL = Slices.createSimpleSlice();
|
WritableSlice<VariableDescriptorWithAccessors, Call> PROVIDE_DELEGATE_CALL = Slices.createSimpleSlice();
|
||||||
|
|||||||
Reference in New Issue
Block a user