Get rid of SAM_CONSTRUCTOR_TO_INTERFACE
use SamConstructorDescriptor instead
This commit is contained in:
+9
@@ -24,6 +24,7 @@ import com.intellij.psi.util.PsiFormatUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||
@@ -160,4 +161,12 @@ public final class DescriptorResolverUtils {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void recordSourceDescriptorForSynthesized(
|
||||
@NotNull FunctionDescriptor synthesized,
|
||||
@NotNull DeclarationDescriptor original,
|
||||
@NotNull BindingTrace trace
|
||||
) {
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, synthesized, original);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,7 @@ package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.util.slicedmap.BasicWritableSlice;
|
||||
import org.jetbrains.jet.util.slicedmap.Slices;
|
||||
import org.jetbrains.jet.util.slicedmap.WritableSlice;
|
||||
@@ -41,8 +39,6 @@ public class JavaBindingContext {
|
||||
public static final WritableSlice<DeclarationDescriptor, List<String>> LOAD_FROM_JAVA_SIGNATURE_ERRORS =
|
||||
new BasicWritableSlice<DeclarationDescriptor, List<String>>(Slices.ONLY_REWRITE_TO_EQUAL, true);
|
||||
|
||||
public static final WritableSlice<SimpleFunctionDescriptor, ClassDescriptorFromJvmBytecode> SAM_CONSTRUCTOR_TO_INTERFACE = Slices.createSimpleSlice();
|
||||
|
||||
private JavaBindingContext() {
|
||||
}
|
||||
}
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
|
||||
public class SamConstructorDescriptor extends SimpleFunctionDescriptorImpl {
|
||||
private final ClassDescriptorFromJvmBytecode samInterface;
|
||||
|
||||
public SamConstructorDescriptor(
|
||||
@NotNull ClassOrNamespaceDescriptor containingDeclaration,
|
||||
@NotNull ClassDescriptorFromJvmBytecode samInterface
|
||||
) {
|
||||
super(containingDeclaration, samInterface.getAnnotations(), samInterface.getName(), Kind.SYNTHESIZED);
|
||||
this.samInterface = samInterface;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ClassDescriptorFromJvmBytecode getSamInterface() {
|
||||
return samInterface;
|
||||
}
|
||||
}
|
||||
+7
-4
@@ -27,8 +27,10 @@ import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaBindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaVisibilities;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaArrayType;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||
@@ -42,7 +44,6 @@ import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver.recordSamAdapter;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.createSamAdapterConstructor;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.isSamAdapterNecessary;
|
||||
|
||||
@@ -225,8 +226,10 @@ public final class JavaConstructorResolver {
|
||||
|
||||
@Nullable
|
||||
private ConstructorDescriptor resolveSamAdapter(@NotNull ConstructorDescriptor original) {
|
||||
return isSamAdapterNecessary(original)
|
||||
? (ConstructorDescriptor) recordSamAdapter(original, createSamAdapterConstructor(original), trace)
|
||||
: null;
|
||||
if (!isSamAdapterNecessary(original)) return null;
|
||||
|
||||
SamAdapterDescriptor<ConstructorDescriptor> adapter = createSamAdapterConstructor(original);
|
||||
DescriptorResolverUtils.recordSourceDescriptorForSynthesized(adapter, original, trace);
|
||||
return (ConstructorDescriptor) adapter;
|
||||
}
|
||||
}
|
||||
+12
-27
@@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.java.TypeUsage;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor;
|
||||
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.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesUtil;
|
||||
@@ -309,11 +310,13 @@ public final class JavaFunctionResolver {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private SimpleFunctionDescriptor resolveSamConstructor(@NotNull NamespaceDescriptor owner, @NotNull NamedMembers namedMembers) {
|
||||
private SamConstructorDescriptor resolveSamConstructor(@NotNull NamespaceDescriptor owner, @NotNull NamedMembers namedMembers) {
|
||||
if (namedMembers.getSamInterface() != null) {
|
||||
ClassDescriptorFromJvmBytecode klass = findClassInNamespace(owner, namedMembers.getName());
|
||||
if (klass != null) {
|
||||
return recordSamConstructor(klass, createSamConstructorFunction(owner, klass), trace);
|
||||
SamConstructorDescriptor constructor = createSamConstructorFunction(owner, klass);
|
||||
DescriptorResolverUtils.recordSourceDescriptorForSynthesized(constructor, klass, trace);
|
||||
return constructor;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -321,14 +324,16 @@ public final class JavaFunctionResolver {
|
||||
|
||||
@Nullable
|
||||
private SimpleFunctionDescriptor resolveSamAdapter(@NotNull SimpleFunctionDescriptor original) {
|
||||
return isSamAdapterNecessary(original)
|
||||
? (SimpleFunctionDescriptor) recordSamAdapter(original, createSamAdapterFunction(original), trace)
|
||||
: null;
|
||||
if (!isSamAdapterNecessary(original)) return null;
|
||||
|
||||
SamAdapterDescriptor<SimpleFunctionDescriptor> adapter = createSamAdapterFunction(original);
|
||||
DescriptorResolverUtils.recordSourceDescriptorForSynthesized(adapter, original, trace);
|
||||
return (SimpleFunctionDescriptor) adapter;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(@NotNull NamedMembers members, @NotNull NamespaceDescriptor owner) {
|
||||
SimpleFunctionDescriptor samConstructor = resolveSamConstructor(owner, members);
|
||||
SamConstructorDescriptor samConstructor = resolveSamConstructor(owner, members);
|
||||
if (samConstructor != null) {
|
||||
return Collections.<FunctionDescriptor>singleton(samConstructor);
|
||||
}
|
||||
@@ -378,24 +383,4 @@ public final class JavaFunctionResolver {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static SimpleFunctionDescriptor recordSamConstructor(
|
||||
ClassDescriptorFromJvmBytecode klass,
|
||||
SimpleFunctionDescriptor constructorFunction,
|
||||
BindingTrace trace
|
||||
) {
|
||||
trace.record(JavaBindingContext.SAM_CONSTRUCTOR_TO_INTERFACE, constructorFunction, klass);
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, constructorFunction, klass);
|
||||
return constructorFunction;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
/* package */ static <F extends FunctionDescriptor> SamAdapterDescriptor<F> recordSamAdapter(
|
||||
@NotNull F original,
|
||||
@NotNull SamAdapterDescriptor<F> adapter,
|
||||
@NotNull BindingTrace trace
|
||||
) {
|
||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, adapter, original);
|
||||
return adapter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-9
@@ -22,12 +22,12 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
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.kotlinSignature.SignaturesUtil;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.*;
|
||||
@@ -133,18 +133,13 @@ public class SingleAbstractMethodUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static SimpleFunctionDescriptor createSamConstructorFunction(
|
||||
public static SamConstructorDescriptor createSamConstructorFunction(
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull ClassDescriptor samInterface
|
||||
@NotNull ClassDescriptorFromJvmBytecode samInterface
|
||||
) {
|
||||
assert isSamInterface(samInterface) : samInterface;
|
||||
|
||||
SimpleFunctionDescriptorImpl result = new SimpleFunctionDescriptorImpl(
|
||||
owner,
|
||||
samInterface.getAnnotations(),
|
||||
samInterface.getName(),
|
||||
CallableMemberDescriptor.Kind.SYNTHESIZED
|
||||
);
|
||||
SamConstructorDescriptor result = new SamConstructorDescriptor(owner, samInterface);
|
||||
|
||||
TypeParameters typeParameters = recreateAndInitializeTypeParameters(samInterface.getTypeConstructor().getParameters(), result);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user