From 7a136eae5bd13e9c943a8dc9826d171832c036a5 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 21 Mar 2013 22:52:35 +0400 Subject: [PATCH] Extracted method. --- .../java/resolver/JavaFunctionResolver.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) 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 29fb1bebca5..1bf163e6779 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 @@ -313,6 +313,27 @@ public final class JavaFunctionResolver { return functions; } + @Nullable + private SimpleFunctionDescriptor resolveSamConstructor( + @NotNull NamespaceDescriptor ownerDescriptor, + @NotNull NamedMembers namedMembers + ) { + PsiClass functionalInterface = namedMembers.getFunctionalInterface(); + if (functionalInterface != null) { + ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(namedMembers.getName()); + if (classifier instanceof ClassDescriptor) { + ClassDescriptor klass = (ClassDescriptor) classifier; + + if (SingleAbstractMethodUtils.isFunctionalInterface(klass)) { + SimpleFunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createConstructorFunction(klass); + trace.record(BindingContext.SAM_CONSTRUCTOR_TO_TRAIT, constructorFunction, klass); + return constructorFunction; + } + } + } + return null; + } + @NotNull public Set resolveFunctionGroup( @NotNull Name methodName, @@ -340,21 +361,11 @@ public final class JavaFunctionResolver { return Collections.emptySet(); } - PsiClass functionalInterface = namedMembers.getFunctionalInterface(); - if (functionalInterface != null) { - ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(functionName); - if (classifier instanceof ClassDescriptor) { - ClassDescriptor klass = (ClassDescriptor) classifier; + SimpleFunctionDescriptor samConstructor = resolveSamConstructor(ownerDescriptor, namedMembers); - if (SingleAbstractMethodUtils.isFunctionalInterface(klass)) { - SimpleFunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createConstructorFunction(klass); - trace.record(BindingContext.SAM_CONSTRUCTOR_TO_TRAIT, constructorFunction, klass); - return Collections.singleton(constructorFunction); - } - } - } - - return Collections.emptySet(); + return samConstructor == null + ? Collections.emptySet() + : Collections.singleton(samConstructor); } @NotNull