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 30342d33eda..29fb1bebca5 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 @@ -343,11 +343,14 @@ public final class JavaFunctionResolver { PsiClass functionalInterface = namedMembers.getFunctionalInterface(); if (functionalInterface != null) { ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(functionName); - if (classifier instanceof ClassDescriptor && SingleAbstractMethodUtils.isFunctionalInterface((ClassDescriptor) classifier)) { + if (classifier instanceof ClassDescriptor) { + ClassDescriptor klass = (ClassDescriptor) classifier; - SimpleFunctionDescriptor constructorFunction = - SingleAbstractMethodUtils.createConstructorFunction((ClassDescriptor) classifier); - return Collections.singleton(constructorFunction); + if (SingleAbstractMethodUtils.isFunctionalInterface(klass)) { + SimpleFunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createConstructorFunction(klass); + trace.record(BindingContext.SAM_CONSTRUCTOR_TO_TRAIT, constructorFunction, klass); + return Collections.singleton(constructorFunction); + } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java index 05cafa70730..5e14109b930 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -255,6 +255,7 @@ public interface BindingContext { new BasicWritableSlice>(Slices.ONLY_REWRITE_TO_EQUAL, true); WritableSlice IS_DECLARED_IN_JAVA = Slices.createSimpleSlice(); + WritableSlice SAM_CONSTRUCTOR_TO_TRAIT = Slices.createSimpleSlice(); @SuppressWarnings("UnusedDeclaration") @Deprecated // This field is needed only for the side effects of its initializer