Saving mapping from SAM constructor to trait.

This commit is contained in:
Evgeny Gerashchenko
2013-03-13 20:47:15 +04:00
parent a96a461e61
commit 8f34dea4c8
2 changed files with 8 additions and 4 deletions
@@ -343,11 +343,14 @@ public final class JavaFunctionResolver {
PsiClass functionalInterface = namedMembers.getFunctionalInterface(); PsiClass functionalInterface = namedMembers.getFunctionalInterface();
if (functionalInterface != null) { if (functionalInterface != null) {
ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(functionName); ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(functionName);
if (classifier instanceof ClassDescriptor && SingleAbstractMethodUtils.isFunctionalInterface((ClassDescriptor) classifier)) { if (classifier instanceof ClassDescriptor) {
ClassDescriptor klass = (ClassDescriptor) classifier;
SimpleFunctionDescriptor constructorFunction = if (SingleAbstractMethodUtils.isFunctionalInterface(klass)) {
SingleAbstractMethodUtils.createConstructorFunction((ClassDescriptor) classifier); SimpleFunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createConstructorFunction(klass);
return Collections.<FunctionDescriptor>singleton(constructorFunction); trace.record(BindingContext.SAM_CONSTRUCTOR_TO_TRAIT, constructorFunction, klass);
return Collections.<FunctionDescriptor>singleton(constructorFunction);
}
} }
} }
@@ -255,6 +255,7 @@ public interface BindingContext {
new BasicWritableSlice<DeclarationDescriptor, List<String>>(Slices.ONLY_REWRITE_TO_EQUAL, true); new BasicWritableSlice<DeclarationDescriptor, List<String>>(Slices.ONLY_REWRITE_TO_EQUAL, true);
WritableSlice<CallableDescriptor, Boolean> IS_DECLARED_IN_JAVA = Slices.createSimpleSlice(); WritableSlice<CallableDescriptor, Boolean> IS_DECLARED_IN_JAVA = Slices.createSimpleSlice();
WritableSlice<SimpleFunctionDescriptor, ClassDescriptor> SAM_CONSTRUCTOR_TO_TRAIT = Slices.createSimpleSlice();
@SuppressWarnings("UnusedDeclaration") @SuppressWarnings("UnusedDeclaration")
@Deprecated // This field is needed only for the side effects of its initializer @Deprecated // This field is needed only for the side effects of its initializer