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()
|
val enhancedReturnType = parts { it.getReturnType()!!.toReturnTypePart() }.enhance()
|
||||||
|
|
||||||
if (this is JavaMethodDescriptor) {
|
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")
|
@suppress("UNCHECKED_CAST")
|
||||||
return enhancedFunction as D
|
return this.enhance(enhancedReceiverType, enhancedValueParameters, enhancedReturnType) as D
|
||||||
}
|
}
|
||||||
|
|
||||||
return this
|
return this
|
||||||
|
|||||||
+25
-2
@@ -17,6 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.load.java.sam;
|
package org.jetbrains.kotlin.load.java.sam;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.JavaMethodDescriptor;
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
||||||
|
|
||||||
@@ -24,8 +28,17 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
|||||||
private final JavaMethodDescriptor declaration;
|
private final JavaMethodDescriptor declaration;
|
||||||
|
|
||||||
public SamAdapterFunctionDescriptor(@NotNull JavaMethodDescriptor declaration) {
|
public SamAdapterFunctionDescriptor(@NotNull JavaMethodDescriptor declaration) {
|
||||||
super(declaration.getContainingDeclaration(), null, declaration.getAnnotations(),
|
this(declaration.getContainingDeclaration(), null, Kind.SYNTHESIZED, declaration);
|
||||||
declaration.getName(), Kind.SYNTHESIZED, declaration.getSource());
|
}
|
||||||
|
|
||||||
|
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;
|
this.declaration = declaration;
|
||||||
setHasStableParameterNames(declaration.hasStableParameterNames());
|
setHasStableParameterNames(declaration.hasStableParameterNames());
|
||||||
setHasSynthesizedParameterNames(declaration.hasSynthesizedParameterNames());
|
setHasSynthesizedParameterNames(declaration.hasSynthesizedParameterNames());
|
||||||
@@ -36,4 +49,14 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
|
|||||||
public JavaMethodDescriptor getOriginForSam() {
|
public JavaMethodDescriptor getOriginForSam() {
|
||||||
return declaration;
|
return declaration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected JavaMethodDescriptor createSubstitutedCopy(
|
||||||
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
|
@Nullable FunctionDescriptor original,
|
||||||
|
@NotNull Kind kind
|
||||||
|
) {
|
||||||
|
return new SamAdapterFunctionDescriptor(newOwner, (SimpleFunctionDescriptor) original, kind, declaration);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-6
@@ -18,14 +18,13 @@ package org.jetbrains.kotlin.load.java.descriptors;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
|
||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor;
|
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl;
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor {
|
public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor {
|
||||||
private Boolean hasStableParameterNames = null;
|
private Boolean hasStableParameterNames = null;
|
||||||
@@ -74,7 +73,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected FunctionDescriptorImpl createSubstitutedCopy(
|
protected JavaMethodDescriptor createSubstitutedCopy(
|
||||||
@NotNull DeclarationDescriptor newOwner,
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
@Nullable FunctionDescriptor original,
|
@Nullable FunctionDescriptor original,
|
||||||
@NotNull Kind kind
|
@NotNull Kind kind
|
||||||
@@ -91,4 +90,27 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
|
|||||||
result.setHasSynthesizedParameterNames(hasSynthesizedParameterNames());
|
result.setHasSynthesizedParameterNames(hasSynthesizedParameterNames());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JavaMethodDescriptor enhance(
|
||||||
|
@Nullable JetType enhancedReceiverType,
|
||||||
|
@NotNull List<ValueParameterDescriptor> enhancedValueParameters,
|
||||||
|
@NotNull JetType enhancedReturnType
|
||||||
|
) {
|
||||||
|
JavaMethodDescriptor enhancedMethod = createSubstitutedCopy(getContainingDeclaration(), getOriginal(), getKind());
|
||||||
|
enhancedMethod.initialize(
|
||||||
|
enhancedReceiverType,
|
||||||
|
getDispatchReceiverParameter(),
|
||||||
|
getTypeParameters(),
|
||||||
|
enhancedValueParameters,
|
||||||
|
enhancedReturnType,
|
||||||
|
getModality(),
|
||||||
|
getVisibility()
|
||||||
|
);
|
||||||
|
for (FunctionDescriptor overridden : getOverriddenDescriptors()) {
|
||||||
|
enhancedMethod.addOverriddenDescriptor(overridden);
|
||||||
|
}
|
||||||
|
|
||||||
|
return enhancedMethod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user