Proper enhancement for SAM adapters
This commit is contained in:
committed by
Denis Zharkov
parent
9644eeb047
commit
a8b5698145
+1
-23
@@ -47,30 +47,8 @@ fun <D : CallableMemberDescriptor> D.enhance(): D {
|
||||
val enhancedReturnType = parts { it.getReturnType()!!.toReturnTypePart() }.enhance()
|
||||
|
||||
if (this is JavaMethodDescriptor) {
|
||||
val enhancedFunction = JavaMethodDescriptor.createJavaMethod(
|
||||
getContainingDeclaration()!!,
|
||||
getAnnotations(),
|
||||
getName(),
|
||||
getSource()
|
||||
)
|
||||
enhancedFunction.initialize(
|
||||
enhancedReceiverType,
|
||||
getDispatchReceiverParameter(),
|
||||
getTypeParameters(),
|
||||
enhancedValueParameters,
|
||||
enhancedReturnType,
|
||||
getModality(),
|
||||
getVisibility()
|
||||
)
|
||||
enhancedFunction.setHasStableParameterNames(hasStableParameterNames())
|
||||
enhancedFunction.setHasSynthesizedParameterNames(hasSynthesizedParameterNames())
|
||||
|
||||
for (overridden in getOverriddenDescriptors()) {
|
||||
enhancedFunction.addOverriddenDescriptor(overridden)
|
||||
}
|
||||
|
||||
@suppress("UNCHECKED_CAST")
|
||||
return enhancedFunction as D
|
||||
return this.enhance(enhancedReceiverType, enhancedValueParameters, enhancedReturnType) as D
|
||||
}
|
||||
|
||||
return this
|
||||
|
||||
+25
-2
@@ -17,6 +17,10 @@
|
||||
package org.jetbrains.kotlin.load.java.sam;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
||||
|
||||
@@ -24,8 +28,17 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
||||
private final JavaMethodDescriptor declaration;
|
||||
|
||||
public SamAdapterFunctionDescriptor(@NotNull JavaMethodDescriptor declaration) {
|
||||
super(declaration.getContainingDeclaration(), null, declaration.getAnnotations(),
|
||||
declaration.getName(), Kind.SYNTHESIZED, declaration.getSource());
|
||||
this(declaration.getContainingDeclaration(), null, Kind.SYNTHESIZED, declaration);
|
||||
}
|
||||
|
||||
private SamAdapterFunctionDescriptor(
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@Nullable SimpleFunctionDescriptor original,
|
||||
@NotNull Kind kind,
|
||||
@NotNull JavaMethodDescriptor declaration
|
||||
) {
|
||||
super(containingDeclaration, original, declaration.getAnnotations(),
|
||||
declaration.getName(), kind, declaration.getSource());
|
||||
this.declaration = declaration;
|
||||
setHasStableParameterNames(declaration.hasStableParameterNames());
|
||||
setHasSynthesizedParameterNames(declaration.hasSynthesizedParameterNames());
|
||||
@@ -36,4 +49,14 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
||||
public JavaMethodDescriptor getOriginForSam() {
|
||||
return declaration;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected JavaMethodDescriptor createSubstitutedCopy(
|
||||
@NotNull DeclarationDescriptor newOwner,
|
||||
@Nullable FunctionDescriptor original,
|
||||
@NotNull Kind kind
|
||||
) {
|
||||
return new SamAdapterFunctionDescriptor(newOwner, (SimpleFunctionDescriptor) original, kind, declaration);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user