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