Move and rename JDR.ValueParameterDescriptors

This commit is contained in:
Alexander Udalov
2013-08-01 21:50:24 +04:00
parent cc45cf2a4e
commit f1892372eb
6 changed files with 61 additions and 68 deletions
@@ -19,24 +19,21 @@ package org.jetbrains.jet.lang.resolve.java;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers;
import org.jetbrains.jet.lang.resolve.java.resolver.*; import org.jetbrains.jet.lang.resolve.java.resolver.*;
import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers;
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
import org.jetbrains.jet.lang.types.JetType;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver { public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver {
public static final Name JAVA_ROOT = Name.special("<java_root>"); public static final Name JAVA_ROOT = Name.special("<java_root>");
private JavaPropertyResolver propertiesResolver; private JavaPropertyResolver propertiesResolver;
@@ -100,26 +97,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return propertiesResolver.resolveFieldGroup(members, ownerDescriptor); return propertiesResolver.resolveFieldGroup(members, ownerDescriptor);
} }
public static class ValueParameterDescriptors {
private final JetType receiverType;
private final List<ValueParameterDescriptor> descriptors;
public ValueParameterDescriptors(@Nullable JetType receiverType, @NotNull List<ValueParameterDescriptor> descriptors) {
this.receiverType = receiverType;
this.descriptors = descriptors;
}
@Nullable
public JetType getReceiverType() {
return receiverType;
}
@NotNull
public List<ValueParameterDescriptor> getDescriptors() {
return descriptors;
}
}
@NotNull @NotNull
public Set<FunctionDescriptor> resolveFunctionGroupForClass(@NotNull NamedMembers members, @NotNull ClassOrNamespaceDescriptor owner) { public Set<FunctionDescriptor> resolveFunctionGroupForClass(@NotNull NamedMembers members, @NotNull ClassOrNamespaceDescriptor owner) {
return functionResolver.resolveFunctionGroupForClass(members, owner); return functionResolver.resolveFunctionGroupForClass(members, owner);
@@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -46,7 +46,7 @@ import static org.jetbrains.jet.lang.resolve.java.TypeUsage.UPPER_BOUND;
public class AlternativeMethodSignatureData extends ElementAlternativeSignatureData { public class AlternativeMethodSignatureData extends ElementAlternativeSignatureData {
private final JetNamedFunction altFunDeclaration; private final JetNamedFunction altFunDeclaration;
private JavaDescriptorResolver.ValueParameterDescriptors altValueParameters; private JavaValueParameterResolver.ValueParameters altValueParameters;
private JetType altReturnType; private JetType altReturnType;
private List<TypeParameterDescriptor> altTypeParameters; private List<TypeParameterDescriptor> altTypeParameters;
@@ -54,7 +54,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
public AlternativeMethodSignatureData( public AlternativeMethodSignatureData(
@NotNull JavaMethod method, @NotNull JavaMethod method,
@NotNull JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors, @NotNull JavaValueParameterResolver.ValueParameters valueParameters,
@Nullable JetType originalReturnType, @Nullable JetType originalReturnType,
@NotNull List<TypeParameterDescriptor> methodTypeParameters, @NotNull List<TypeParameterDescriptor> methodTypeParameters,
boolean hasSuperMethods boolean hasSuperMethods
@@ -78,14 +78,14 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
checkEqualFunctionNames(altFunDeclaration, method); checkEqualFunctionNames(altFunDeclaration, method);
computeTypeParameters(methodTypeParameters); computeTypeParameters(methodTypeParameters);
computeValueParameters(valueParameterDescriptors); computeValueParameters(valueParameters);
if (originalReturnType != null) { if (originalReturnType != null) {
altReturnType = computeReturnType(originalReturnType, altFunDeclaration.getReturnTypeRef(), originalToAltTypeParameters); altReturnType = computeReturnType(originalReturnType, altFunDeclaration.getReturnTypeRef(), originalToAltTypeParameters);
} }
if (hasSuperMethods) { if (hasSuperMethods) {
checkParameterAndReturnTypesForOverridingMethods(valueParameterDescriptors, methodTypeParameters, originalReturnType); checkParameterAndReturnTypesForOverridingMethods(valueParameters, methodTypeParameters, originalReturnType);
} }
} }
catch (AlternativeSignatureMismatchException e) { catch (AlternativeSignatureMismatchException e) {
@@ -94,13 +94,13 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
} }
private void checkParameterAndReturnTypesForOverridingMethods( private void checkParameterAndReturnTypesForOverridingMethods(
@NotNull JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors, @NotNull JavaValueParameterResolver.ValueParameters valueParameters,
@NotNull List<TypeParameterDescriptor> methodTypeParameters, @NotNull List<TypeParameterDescriptor> methodTypeParameters,
@Nullable JetType returnType @Nullable JetType returnType
) { ) {
TypeSubstitutor substitutor = SignaturesUtil.createSubstitutorForTypeParameters(originalToAltTypeParameters); TypeSubstitutor substitutor = SignaturesUtil.createSubstitutorForTypeParameters(originalToAltTypeParameters);
for (ValueParameterDescriptor parameter : valueParameterDescriptors.getDescriptors()) { for (ValueParameterDescriptor parameter : valueParameters.getDescriptors()) {
int index = parameter.getIndex(); int index = parameter.getIndex();
ValueParameterDescriptor altParameter = altValueParameters.getDescriptors().get(index); ValueParameterDescriptor altParameter = altValueParameters.getDescriptors().get(index);
@@ -141,7 +141,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
} }
@NotNull @NotNull
public JavaDescriptorResolver.ValueParameterDescriptors getValueParameters() { public JavaValueParameterResolver.ValueParameters getValueParameters() {
checkForErrors(); checkForErrors();
return altValueParameters; return altValueParameters;
} }
@@ -158,8 +158,8 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
return altTypeParameters; return altTypeParameters;
} }
private void computeValueParameters(JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors) { private void computeValueParameters(JavaValueParameterResolver.ValueParameters valueParameters) {
List<ValueParameterDescriptor> parameterDescriptors = valueParameterDescriptors.getDescriptors(); List<ValueParameterDescriptor> parameterDescriptors = valueParameters.getDescriptors();
if (parameterDescriptors.size() != altFunDeclaration.getValueParameters().size()) { if (parameterDescriptors.size() != altFunDeclaration.getValueParameters().size()) {
throw new AlternativeSignatureMismatchException("Method signature has %d value parameters, but alternative signature has %d", throw new AlternativeSignatureMismatchException("Method signature has %d value parameters, but alternative signature has %d",
@@ -207,11 +207,11 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
alternativeVarargElementType)); alternativeVarargElementType));
} }
if (valueParameterDescriptors.getReceiverType() != null) { if (valueParameters.getReceiverType() != null) {
throw new UnsupportedOperationException("Alternative annotations for extension functions are not supported yet"); throw new UnsupportedOperationException("Alternative annotations for extension functions are not supported yet");
} }
altValueParameters = new JavaDescriptorResolver.ValueParameterDescriptors(null, altParamDescriptors); altValueParameters = new JavaValueParameterResolver.ValueParameters(null, altParamDescriptors);
} }
private void computeTypeParameters(List<TypeParameterDescriptor> typeParameters) { private void computeTypeParameters(List<TypeParameterDescriptor> typeParameters) {
@@ -36,10 +36,10 @@ import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetClsMethod;
import org.jetbrains.jet.lang.resolve.java.TypeUsage; import org.jetbrains.jet.lang.resolve.java.TypeUsage;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetClsMethod;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
@@ -58,7 +58,7 @@ public class SignaturesPropagationData {
private static final Logger LOG = Logger.getInstance(SignaturesPropagationData.class); private static final Logger LOG = Logger.getInstance(SignaturesPropagationData.class);
private final List<TypeParameterDescriptor> modifiedTypeParameters; private final List<TypeParameterDescriptor> modifiedTypeParameters;
private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters; private final JavaValueParameterResolver.ValueParameters modifiedValueParameters;
private final JetType modifiedReturnType; private final JetType modifiedReturnType;
private final List<String> signatureErrors = Lists.newArrayList(); private final List<String> signatureErrors = Lists.newArrayList();
@@ -69,7 +69,7 @@ public class SignaturesPropagationData {
public SignaturesPropagationData( public SignaturesPropagationData(
@NotNull ClassDescriptor containingClass, @NotNull ClassDescriptor containingClass,
@NotNull JetType autoReturnType, // type built by JavaTypeTransformer from Java signature and @NotNull annotations @NotNull JetType autoReturnType, // type built by JavaTypeTransformer from Java signature and @NotNull annotations
@NotNull JavaDescriptorResolver.ValueParameterDescriptors autoValueParameters, // descriptors built by parameters resolver @NotNull JavaValueParameterResolver.ValueParameters autoValueParameters, // descriptors built by parameters resolver
@NotNull List<TypeParameterDescriptor> autoTypeParameters, // descriptors built by signature resolver @NotNull List<TypeParameterDescriptor> autoTypeParameters, // descriptors built by signature resolver
@NotNull JavaMethod method, @NotNull JavaMethod method,
@NotNull BindingTrace trace @NotNull BindingTrace trace
@@ -88,7 +88,7 @@ public class SignaturesPropagationData {
return modifiedTypeParameters; return modifiedTypeParameters;
} }
public JavaDescriptorResolver.ValueParameterDescriptors getModifiedValueParameters() { public JavaValueParameterResolver.ValueParameters getModifiedValueParameters() {
return modifiedValueParameters; return modifiedValueParameters;
} }
@@ -157,8 +157,8 @@ public class SignaturesPropagationData {
return result; return result;
} }
private JavaDescriptorResolver.ValueParameterDescriptors modifyValueParametersAccordingToSuperMethods( private JavaValueParameterResolver.ValueParameters modifyValueParametersAccordingToSuperMethods(
@NotNull JavaDescriptorResolver.ValueParameterDescriptors parameters // descriptors built by parameters resolver @NotNull JavaValueParameterResolver.ValueParameters parameters // descriptors built by parameters resolver
) { ) {
assert parameters.getReceiverType() == null : "Parameters before propagation have receiver type," + assert parameters.getReceiverType() == null : "Parameters before propagation have receiver type," +
" but propagation should be disabled for functions compiled from Kotlin in class: " + " but propagation should be disabled for functions compiled from Kotlin in class: " +
@@ -205,7 +205,7 @@ public class SignaturesPropagationData {
} }
} }
return new JavaDescriptorResolver.ValueParameterDescriptors(receiverType, resultParameters); return new JavaValueParameterResolver.ValueParameters(receiverType, resultParameters);
} }
private static List<FunctionDescriptor> getSuperFunctionsForMethod( private static List<FunctionDescriptor> getSuperFunctionsForMethod(
@@ -28,7 +28,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaBindingContext; import org.jetbrains.jet.lang.resolve.java.JavaBindingContext;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaVisibilities; import org.jetbrains.jet.lang.resolve.java.JavaVisibilities;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData; 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.JavaArrayType;
@@ -198,30 +197,28 @@ public final class JavaConstructorResolver {
List<TypeParameterDescriptor> typeParameters = classDescriptor.getTypeConstructor().getParameters(); List<TypeParameterDescriptor> typeParameters = classDescriptor.getTypeConstructor().getParameters();
JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors = valueParameterResolver.resolveParameterDescriptors( JavaValueParameterResolver.ValueParameters valueParameters = valueParameterResolver.resolveValueParameters(
constructorDescriptor, constructor, constructorDescriptor, constructor,
new TypeVariableResolver(typeParameters, classDescriptor) new TypeVariableResolver(typeParameters, classDescriptor)
); );
if (valueParameterDescriptors.getReceiverType() != null) { if (valueParameters.getReceiverType() != null) {
throw new IllegalStateException(); throw new IllegalStateException();
} }
AlternativeMethodSignatureData alternativeMethodSignatureData = AlternativeMethodSignatureData alternativeMethodSignatureData =
new AlternativeMethodSignatureData(constructor, valueParameterDescriptors, null, new AlternativeMethodSignatureData(constructor, valueParameters, null,
Collections.<TypeParameterDescriptor>emptyList(), false); Collections.<TypeParameterDescriptor>emptyList(), false);
if (alternativeMethodSignatureData.isAnnotated() && !alternativeMethodSignatureData.hasErrors()) { if (alternativeMethodSignatureData.isAnnotated() && !alternativeMethodSignatureData.hasErrors()) {
valueParameterDescriptors = alternativeMethodSignatureData.getValueParameters(); valueParameters = alternativeMethodSignatureData.getValueParameters();
} }
else if (alternativeMethodSignatureData.hasErrors()) { else if (alternativeMethodSignatureData.hasErrors()) {
trace.record(JavaBindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, constructorDescriptor, trace.record(JavaBindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, constructorDescriptor,
Collections.singletonList(alternativeMethodSignatureData.getError())); Collections.singletonList(alternativeMethodSignatureData.getError()));
} }
constructorDescriptor.initialize(typeParameters, constructorDescriptor.initialize(typeParameters, valueParameters.getDescriptors(), constructor.getVisibility(), isStaticClass);
valueParameterDescriptors.getDescriptors(),
constructor.getVisibility(),
isStaticClass);
trace.record(BindingContext.CONSTRUCTOR, constructor.getPsi(), constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, constructor.getPsi(), constructorDescriptor);
return constructorDescriptor; return constructorDescriptor;
} }
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.JavaBindingContext; import org.jetbrains.jet.lang.resolve.java.JavaBindingContext;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.TypeUsage; 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.ClassDescriptorFromJvmBytecode;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
@@ -132,8 +131,8 @@ public final class JavaFunctionResolver {
TypeVariableResolver typeVariableResolver = new TypeVariableResolver(methodTypeParameters, functionDescriptorImpl); TypeVariableResolver typeVariableResolver = new TypeVariableResolver(methodTypeParameters, functionDescriptorImpl);
JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors = valueParameterResolver JavaValueParameterResolver.ValueParameters valueParameters = valueParameterResolver
.resolveParameterDescriptors(functionDescriptorImpl, method, typeVariableResolver); .resolveValueParameters(functionDescriptorImpl, method, typeVariableResolver);
JetType returnType = makeReturnType(returnJavaType, method, typeVariableResolver); JetType returnType = makeReturnType(returnJavaType, method, typeVariableResolver);
List<String> signatureErrors = Lists.newArrayList(); List<String> signatureErrors = Lists.newArrayList();
@@ -141,11 +140,11 @@ public final class JavaFunctionResolver {
List<FunctionDescriptor> superFunctions; List<FunctionDescriptor> superFunctions;
if (ownerDescriptor instanceof ClassDescriptor) { if (ownerDescriptor instanceof ClassDescriptor) {
SignaturesPropagationData signaturesPropagationData = new SignaturesPropagationData( SignaturesPropagationData signaturesPropagationData = new SignaturesPropagationData(
(ClassDescriptor) ownerDescriptor, returnType, valueParameterDescriptors, methodTypeParameters, method, trace); (ClassDescriptor) ownerDescriptor, returnType, valueParameters, methodTypeParameters, method, trace);
superFunctions = signaturesPropagationData.getSuperFunctions(); superFunctions = signaturesPropagationData.getSuperFunctions();
returnType = signaturesPropagationData.getModifiedReturnType(); returnType = signaturesPropagationData.getModifiedReturnType();
valueParameterDescriptors = signaturesPropagationData.getModifiedValueParameters(); valueParameters = signaturesPropagationData.getModifiedValueParameters();
methodTypeParameters = signaturesPropagationData.getModifiedTypeParameters(); methodTypeParameters = signaturesPropagationData.getModifiedTypeParameters();
signatureErrors.addAll(signaturesPropagationData.getSignatureErrors()); signatureErrors.addAll(signaturesPropagationData.getSignatureErrors());
@@ -155,10 +154,10 @@ public final class JavaFunctionResolver {
} }
AlternativeMethodSignatureData alternativeMethodSignatureData = AlternativeMethodSignatureData alternativeMethodSignatureData =
new AlternativeMethodSignatureData(method, valueParameterDescriptors, returnType, methodTypeParameters, new AlternativeMethodSignatureData(method, valueParameters, returnType, methodTypeParameters,
!superFunctions.isEmpty()); !superFunctions.isEmpty());
if (alternativeMethodSignatureData.isAnnotated() && !alternativeMethodSignatureData.hasErrors()) { if (alternativeMethodSignatureData.isAnnotated() && !alternativeMethodSignatureData.hasErrors()) {
valueParameterDescriptors = alternativeMethodSignatureData.getValueParameters(); valueParameters = alternativeMethodSignatureData.getValueParameters();
returnType = alternativeMethodSignatureData.getReturnType(); returnType = alternativeMethodSignatureData.getReturnType();
methodTypeParameters = alternativeMethodSignatureData.getTypeParameters(); methodTypeParameters = alternativeMethodSignatureData.getTypeParameters();
} }
@@ -167,10 +166,10 @@ public final class JavaFunctionResolver {
} }
functionDescriptorImpl.initialize( functionDescriptorImpl.initialize(
valueParameterDescriptors.getReceiverType(), valueParameters.getReceiverType(),
DescriptorUtils.getExpectedThisObjectIfNeeded(ownerDescriptor), DescriptorUtils.getExpectedThisObjectIfNeeded(ownerDescriptor),
methodTypeParameters, methodTypeParameters,
valueParameterDescriptors.getDescriptors(), valueParameters.getDescriptors(),
returnType, returnType,
Modality.convertFromFlags(method.isAbstract(), !method.isFinal()), Modality.convertFromFlags(method.isAbstract(), !method.isFinal()),
method.getVisibility(), method.getVisibility(),
@@ -17,11 +17,11 @@
package org.jetbrains.jet.lang.resolve.java.resolver; package org.jetbrains.jet.lang.resolve.java.resolver;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.TypeUsage; import org.jetbrains.jet.lang.resolve.java.TypeUsage;
import org.jetbrains.jet.lang.resolve.java.structure.JavaArrayType; import org.jetbrains.jet.lang.resolve.java.structure.JavaArrayType;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
@@ -39,7 +39,7 @@ public final class JavaValueParameterResolver {
private JavaTypeTransformer typeTransformer; private JavaTypeTransformer typeTransformer;
@NotNull @NotNull
private ValueParameterDescriptor resolveParameterDescriptor( private ValueParameterDescriptor resolveValueParameter(
@NotNull DeclarationDescriptor containingDeclaration, @NotNull DeclarationDescriptor containingDeclaration,
int i, int i,
@NotNull JavaValueParameter parameter, @NotNull JavaValueParameter parameter,
@@ -95,7 +95,7 @@ public final class JavaValueParameterResolver {
} }
@NotNull @NotNull
public JavaDescriptorResolver.ValueParameterDescriptors resolveParameterDescriptors( public ValueParameters resolveValueParameters(
@NotNull DeclarationDescriptor container, @NotNull DeclarationDescriptor container,
@NotNull JavaMethod method, @NotNull JavaMethod method,
@NotNull TypeVariableResolver typeVariableResolver @NotNull TypeVariableResolver typeVariableResolver
@@ -107,10 +107,30 @@ public final class JavaValueParameterResolver {
JavaValueParameter parameter = iterator.next(); JavaValueParameter parameter = iterator.next();
boolean isVararg = method.isVararg() && !iterator.hasNext(); boolean isVararg = method.isVararg() && !iterator.hasNext();
ValueParameterDescriptor descriptor = resolveParameterDescriptor(container, index, parameter, typeVariableResolver, isVararg); ValueParameterDescriptor descriptor = resolveValueParameter(container, index, parameter, typeVariableResolver, isVararg);
result.add(descriptor); result.add(descriptor);
index++; index++;
} }
return new JavaDescriptorResolver.ValueParameterDescriptors(null, result); return new ValueParameters(null, result);
}
public static class ValueParameters {
private final JetType receiverType;
private final List<ValueParameterDescriptor> descriptors;
public ValueParameters(@Nullable JetType receiverType, @NotNull List<ValueParameterDescriptor> descriptors) {
this.receiverType = receiverType;
this.descriptors = descriptors;
}
@Nullable
public JetType getReceiverType() {
return receiverType;
}
@NotNull
public List<ValueParameterDescriptor> getDescriptors() {
return descriptors;
}
} }
} }