Extracted SAM constructor and adapter recording methods.
This commit is contained in:
+7
-9
@@ -32,7 +32,6 @@ import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kt.JetConstructorAnnotation;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
@@ -42,6 +41,10 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver.recordSamAdapter;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.createSamAdapterConstructor;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.isSamAdapterNecessary;
|
||||
|
||||
public final class JavaConstructorResolver {
|
||||
private BindingTrace trace;
|
||||
private JavaTypeTransformer typeTransformer;
|
||||
@@ -224,13 +227,8 @@ public final class JavaConstructorResolver {
|
||||
|
||||
@Nullable
|
||||
private ConstructorDescriptor resolveSamAdapter(@NotNull ConstructorDescriptor original) {
|
||||
if (SingleAbstractMethodUtils.isSamAdapterNecessary(original)) {
|
||||
ConstructorDescriptor adapterFunction = SingleAbstractMethodUtils.createSamAdapterConstructor(original);
|
||||
|
||||
trace.record(BindingContext.SAM_ADAPTER_FUNCTION_TO_ORIGINAL, adapterFunction, original);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, adapterFunction, original);
|
||||
return adapterFunction;
|
||||
}
|
||||
return null;
|
||||
return isSamAdapterNecessary(original)
|
||||
? recordSamAdapter(original, createSamAdapterConstructor(original), trace)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
+17
-14
@@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSign
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -52,6 +51,7 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.jet.lang.resolve.OverridingUtil.*;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.*;
|
||||
|
||||
public final class JavaFunctionResolver {
|
||||
private static final Logger LOG = Logger.getInstance(JavaFunctionResolver.class);
|
||||
@@ -375,11 +375,7 @@ public final class JavaFunctionResolver {
|
||||
if (samInterface != null) {
|
||||
ClassDescriptor klass = findClassInNamespace(ownerDescriptor, namedMembers.getName());
|
||||
if (klass != null) {
|
||||
SimpleFunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createSamConstructorFunction(ownerDescriptor,
|
||||
klass);
|
||||
trace.record(BindingContext.SAM_CONSTRUCTOR_TO_INTERFACE, constructorFunction, klass);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, constructorFunction, klass);
|
||||
return constructorFunction;
|
||||
return recordSamConstructor(klass, createSamConstructorFunction(ownerDescriptor, klass), trace);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -387,14 +383,9 @@ public final class JavaFunctionResolver {
|
||||
|
||||
@Nullable
|
||||
private SimpleFunctionDescriptor resolveSamAdapter(@NotNull SimpleFunctionDescriptor original) {
|
||||
if (SingleAbstractMethodUtils.isSamAdapterNecessary(original)) {
|
||||
SimpleFunctionDescriptor adapterFunction = SingleAbstractMethodUtils.createSamAdapterFunction(original);
|
||||
|
||||
trace.record(BindingContext.SAM_ADAPTER_FUNCTION_TO_ORIGINAL, adapterFunction, original);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, adapterFunction, original);
|
||||
return adapterFunction;
|
||||
}
|
||||
return null;
|
||||
return isSamAdapterNecessary(original)
|
||||
? recordSamAdapter(original, createSamAdapterFunction(original), trace)
|
||||
: null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -500,4 +491,16 @@ public final class JavaFunctionResolver {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static SimpleFunctionDescriptor recordSamConstructor(ClassDescriptor klass, SimpleFunctionDescriptor constructorFunction, BindingTrace trace) {
|
||||
trace.record(BindingContext.SAM_CONSTRUCTOR_TO_INTERFACE, constructorFunction, klass);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, constructorFunction, klass);
|
||||
return constructorFunction;
|
||||
}
|
||||
|
||||
static <F extends FunctionDescriptor> F recordSamAdapter(F original, F adapterFunction, BindingTrace trace) {
|
||||
trace.record(BindingContext.SAM_ADAPTER_FUNCTION_TO_ORIGINAL, adapterFunction, original);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, adapterFunction, original);
|
||||
return adapterFunction;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user