From eef380a5c353018e011b2cf7e15c1d72138a973a Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Sat, 22 Jun 2013 14:18:34 +0400 Subject: [PATCH] Extracted SAM constructor and adapter recording methods. --- .../resolver/JavaConstructorResolver.java | 16 +++++----- .../java/resolver/JavaFunctionResolver.java | 31 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaConstructorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaConstructorResolver.java index 03943e0f754..eb9d0d20bf8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaConstructorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaConstructorResolver.java @@ -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; } } \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index da206954492..d2541fe1f5b 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -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 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; + } } \ No newline at end of file