Moved SAM function creation to JavaFunctionResolver.
This commit is contained in:
+10
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -254,6 +255,15 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
return functionResolver.resolveFunctionGroup(methodName, scopeData, ownerDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
||||
@NotNull Name methodName,
|
||||
@NotNull PackagePsiDeclarationProvider scopeData,
|
||||
@NotNull NamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
return functionResolver.resolveFunctionGroup(methodName, scopeData, ownerDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<ClassDescriptor> resolveInnerClasses(@NotNull ClassPsiDeclarationProvider declarationProvider) {
|
||||
return innerClassResolver.resolveInnerClasses(declarationProvider);
|
||||
|
||||
+2
-1
@@ -106,7 +106,8 @@ public final class MembersCache {
|
||||
}
|
||||
|
||||
private void processFunctionalInterface(@NotNull PsiClass psiClass) {
|
||||
getOrCreateEmpty(Name.identifier(psiClass.getName()));
|
||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(psiClass.getName()));
|
||||
namedMembers.setFunctionalInterface(psiClass);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-3
@@ -17,7 +17,9 @@
|
||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PropertyPsiDataElement;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
@@ -39,6 +41,9 @@ public final class NamedMembers {
|
||||
@NotNull
|
||||
private final List<PropertyPsiDataElement> propertyPsiDataElements = Lists.newArrayList();
|
||||
|
||||
@Nullable
|
||||
private PsiClass functionalInterface;
|
||||
|
||||
void addMethod(@NotNull PsiMethodWrapper method) {
|
||||
methods.add(method);
|
||||
}
|
||||
@@ -47,9 +52,8 @@ public final class NamedMembers {
|
||||
propertyPsiDataElements.add(propertyPsiDataElement);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<PsiMethodWrapper> getMethods() {
|
||||
return methods;
|
||||
void setFunctionalInterface(@NotNull PsiClass functionalInterface) {
|
||||
this.functionalInterface = functionalInterface;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -57,8 +61,18 @@ public final class NamedMembers {
|
||||
return name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<PsiMethodWrapper> getMethods() {
|
||||
return methods;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<PropertyPsiDataElement> getPropertyPsiDataElements() {
|
||||
return propertyPsiDataElements;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiClass getFunctionalInterface() {
|
||||
return functionalInterface;
|
||||
}
|
||||
}
|
||||
|
||||
+28
@@ -35,7 +35,9 @@ import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagation
|
||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.*;
|
||||
@@ -326,6 +328,32 @@ public final class JavaFunctionResolver {
|
||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName, scopeData);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
||||
@NotNull Name functionName,
|
||||
@NotNull PackagePsiDeclarationProvider scopeData,
|
||||
@NotNull NamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
|
||||
NamedMembers namedMembers = scopeData.getMembersCache().get(functionName);
|
||||
if (namedMembers == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
PsiClass functionalInterface = namedMembers.getFunctionalInterface();
|
||||
if (functionalInterface != null) {
|
||||
ClassifierDescriptor classifier = ownerDescriptor.getMemberScope().getClassifier(functionName);
|
||||
if (classifier instanceof ClassDescriptor && SingleAbstractMethodUtils.isFunctionalInterface((ClassDescriptor) classifier)) {
|
||||
|
||||
SimpleFunctionDescriptor constructorFunction =
|
||||
SingleAbstractMethodUtils.createConstructorFunction((ClassDescriptor) classifier);
|
||||
return Collections.<FunctionDescriptor>singleton(constructorFunction);
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JetType makeReturnType(
|
||||
PsiType returnType, PsiMethodWrapper method,
|
||||
|
||||
+2
-11
@@ -18,12 +18,10 @@ package org.jetbrains.jet.lang.resolve.java.scope;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -44,15 +42,8 @@ public final class JavaPackageScopeWithoutMembers extends JavaPackageScope {
|
||||
@Override
|
||||
@NotNull
|
||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
||||
ClassifierDescriptor classifier = getClassifier(name);
|
||||
if (classifier instanceof ClassDescriptor && SingleAbstractMethodUtils.isFunctionalInterface((ClassDescriptor) classifier)) {
|
||||
|
||||
FunctionDescriptor constructorFunction = SingleAbstractMethodUtils.createConstructorFunction((ClassDescriptor) classifier);
|
||||
|
||||
return Collections.singleton(constructorFunction);
|
||||
}
|
||||
|
||||
return Collections.emptySet();
|
||||
return getResolver().resolveFunctionGroup(
|
||||
name, (PackagePsiDeclarationProvider) declarationProvider, (NamespaceDescriptor) descriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user