JavaClassDescriptor interface extracted
This commit is contained in:
+2
-1
@@ -31,7 +31,7 @@ import java.util.Collection;
|
||||
/**
|
||||
* @see org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
*/
|
||||
public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
|
||||
public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite implements JavaClassDescriptor {
|
||||
private JetType functionTypeForSamInterface;
|
||||
private JavaClassNonStaticMembersScope scopeForConstructorResolve;
|
||||
private ConstructorDescriptor primaryConstructor;
|
||||
@@ -77,6 +77,7 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
|
||||
this.scopeForConstructorResolve = scopeForConstructorResolve;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public JetType getFunctionTypeForSamInterface() {
|
||||
return functionTypeForSamInterface;
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.descriptor;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
|
||||
public interface JavaClassDescriptor extends ClassDescriptor {
|
||||
@Nullable
|
||||
JetType getFunctionTypeForSamInterface();
|
||||
}
|
||||
+4
-4
@@ -22,12 +22,12 @@ import org.jetbrains.jet.lang.descriptors.SynthesizedCallableMemberDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
|
||||
public class SamConstructorDescriptor extends SimpleFunctionDescriptorImpl
|
||||
implements SynthesizedCallableMemberDescriptor<ClassDescriptorFromJvmBytecode> {
|
||||
private final ClassDescriptorFromJvmBytecode samInterface;
|
||||
implements SynthesizedCallableMemberDescriptor<JavaClassDescriptor> {
|
||||
private final JavaClassDescriptor samInterface;
|
||||
|
||||
public SamConstructorDescriptor(
|
||||
@NotNull ClassOrNamespaceDescriptor containingDeclaration,
|
||||
@NotNull ClassDescriptorFromJvmBytecode samInterface
|
||||
@NotNull JavaClassDescriptor samInterface
|
||||
) {
|
||||
super(containingDeclaration, samInterface.getAnnotations(), samInterface.getName(), Kind.SYNTHESIZED);
|
||||
this.samInterface = samInterface;
|
||||
@@ -35,7 +35,7 @@ public class SamConstructorDescriptor extends SimpleFunctionDescriptorImpl
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ClassDescriptorFromJvmBytecode getBaseForSynthesized() {
|
||||
public JavaClassDescriptor getBaseForSynthesized() {
|
||||
return samInterface;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaEnumClassObjectDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||
@@ -237,7 +238,7 @@ public final class JavaClassResolver {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ClassDescriptorFromJvmBytecode doCreateClassDescriptor(
|
||||
private JavaClassDescriptor doCreateClassDescriptor(
|
||||
@NotNull FqName fqName,
|
||||
@NotNull JavaClass javaClass,
|
||||
@NotNull PostponedTasks taskList,
|
||||
@@ -313,7 +314,7 @@ public final class JavaClassResolver {
|
||||
@NotNull
|
||||
private SimpleFunctionDescriptor resolveFunctionOfSamInterface(
|
||||
@NotNull JavaMethod samInterfaceMethod,
|
||||
@NotNull ClassDescriptorFromJvmBytecode samInterface
|
||||
@NotNull JavaClassDescriptor samInterface
|
||||
) {
|
||||
JavaClass methodContainer = samInterfaceMethod.getContainingClass();
|
||||
FqName containerFqName = methodContainer.getFqName();
|
||||
|
||||
+7
-7
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers;
|
||||
@@ -229,10 +229,10 @@ public final class JavaFunctionResolver {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ClassDescriptorFromJvmBytecode findClassInScope(@NotNull JetScope memberScope, @NotNull Name name) {
|
||||
private static JavaClassDescriptor findClassInScope(@NotNull JetScope memberScope, @NotNull Name name) {
|
||||
ClassifierDescriptor classifier = memberScope.getClassifier(name);
|
||||
if (classifier instanceof ClassDescriptorFromJvmBytecode) {
|
||||
return (ClassDescriptorFromJvmBytecode) classifier;
|
||||
if (classifier instanceof JavaClassDescriptor) {
|
||||
return (JavaClassDescriptor) classifier;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -244,9 +244,9 @@ public final class JavaFunctionResolver {
|
||||
// +-- namespace Bar
|
||||
// We need to find class 'Baz' in namespace 'foo.Bar'.
|
||||
@Nullable
|
||||
private static ClassDescriptorFromJvmBytecode findClassInNamespace(@NotNull NamespaceDescriptor namespace, @NotNull Name name) {
|
||||
private static JavaClassDescriptor findClassInNamespace(@NotNull NamespaceDescriptor namespace, @NotNull Name name) {
|
||||
// First, try to find in namespace directly
|
||||
ClassDescriptorFromJvmBytecode found = findClassInScope(namespace.getMemberScope(), name);
|
||||
JavaClassDescriptor found = findClassInScope(namespace.getMemberScope(), name);
|
||||
if (found != null) {
|
||||
return found;
|
||||
}
|
||||
@@ -269,7 +269,7 @@ public final class JavaFunctionResolver {
|
||||
@Nullable
|
||||
public static SamConstructorDescriptor resolveSamConstructor(@NotNull NamespaceDescriptor owner, @NotNull NamedMembers namedMembers) {
|
||||
if (namedMembers.getSamInterface() != null) {
|
||||
ClassDescriptorFromJvmBytecode klass = findClassInNamespace(owner, namedMembers.getName());
|
||||
JavaClassDescriptor klass = findClassInNamespace(owner, namedMembers.getName());
|
||||
if (klass != null) {
|
||||
return createSamConstructorFunction(owner, klass);
|
||||
}
|
||||
|
||||
+4
-4
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
|
||||
@@ -89,9 +89,9 @@ public class SingleAbstractMethodUtils {
|
||||
// e.g. samType == Comparator<String>?
|
||||
|
||||
ClassifierDescriptor classifier = samType.getConstructor().getDeclarationDescriptor();
|
||||
if (classifier instanceof ClassDescriptorFromJvmBytecode) {
|
||||
if (classifier instanceof JavaClassDescriptor) {
|
||||
// Function2<T, T, Int>
|
||||
JetType functionTypeDefault = ((ClassDescriptorFromJvmBytecode) classifier).getFunctionTypeForSamInterface();
|
||||
JetType functionTypeDefault = ((JavaClassDescriptor) classifier).getFunctionTypeForSamInterface();
|
||||
|
||||
if (functionTypeDefault != null) {
|
||||
// Function2<String, String, Int>?
|
||||
@@ -134,7 +134,7 @@ public class SingleAbstractMethodUtils {
|
||||
@NotNull
|
||||
public static SamConstructorDescriptor createSamConstructorFunction(
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull ClassDescriptorFromJvmBytecode samInterface
|
||||
@NotNull JavaClassDescriptor samInterface
|
||||
) {
|
||||
assert isSamInterface(samInterface) : samInterface;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user