From 8f34dea4c8046dd7e06ae1211d588d32164e5709 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 13 Mar 2013 20:47:15 +0400 Subject: [PATCH] Saving mapping from SAM constructor to trait. --- .../resolve/java/resolver/JavaFunctionResolver.java | 11 +++++++---- .../jetbrains/jet/lang/resolve/BindingContext.java | 1 + 2 files changed, 8 insertions(+), 4 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 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