Remove JvmParameterMeaning abstraction

Some code enhancements included
This commit is contained in:
Pavel V. Talanov
2013-07-08 13:34:42 +04:00
committed by Alexander Udalov
parent 1843b7bbbe
commit ba8732d10f
@@ -16,10 +16,10 @@
package org.jetbrains.jet.lang.resolve.java.resolver; package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiEllipsisType; import com.intellij.psi.PsiEllipsisType;
import com.intellij.psi.PsiType; import com.intellij.psi.PsiType;
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;
@@ -36,6 +36,8 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver.findAnnotationWithExternal;
public final class JavaValueParameterResolver { public final class JavaValueParameterResolver {
private JavaTypeTransformer typeTransformer; private JavaTypeTransformer typeTransformer;
@@ -44,7 +46,7 @@ public final class JavaValueParameterResolver {
} }
@NotNull @NotNull
private JvmMethodParameterMeaning resolveParameterDescriptor( private ValueParameterDescriptor resolveParameterDescriptor(
DeclarationDescriptor containingDeclaration, int i, DeclarationDescriptor containingDeclaration, int i,
PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver
) { ) {
@@ -68,15 +70,15 @@ public final class JavaValueParameterResolver {
} }
JetType transformedType; JetType transformedType;
if (JavaAnnotationResolver PsiAnnotation notNullAnnotation = findAnnotationWithExternal(parameter.getPsiParameter(),
.findAnnotationWithExternal(parameter.getPsiParameter(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) != JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString());
null) { if (notNullAnnotation != null) {
transformedType = TypeUtils.makeNullableAsSpecified(outType, false); transformedType = TypeUtils.makeNullableAsSpecified(outType, false);
} }
else { else {
transformedType = outType; transformedType = outType;
} }
return JvmMethodParameterMeaning.regular(new ValueParameterDescriptorImpl( return new ValueParameterDescriptorImpl(
containingDeclaration, containingDeclaration,
i, i,
Collections.<AnnotationDescriptor>emptyList(), // TODO Collections.<AnnotationDescriptor>emptyList(), // TODO
@@ -84,7 +86,7 @@ public final class JavaValueParameterResolver {
transformedType, transformedType,
false, false,
varargElementType varargElementType
)); );
} }
@NotNull @NotNull
@@ -108,57 +110,13 @@ public final class JavaValueParameterResolver {
List<PsiParameterWrapper> parameters, TypeVariableResolver typeVariableResolver List<PsiParameterWrapper> parameters, TypeVariableResolver typeVariableResolver
) { ) {
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(); List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>();
JetType receiverType = null;
int indexDelta = 0; int indexDelta = 0;
for (int i = 0, parametersLength = parameters.size(); i < parametersLength; i++) { for (int i = 0, parametersLength = parameters.size(); i < parametersLength; i++) {
PsiParameterWrapper parameter = parameters.get(i); PsiParameterWrapper parameter = parameters.get(i);
JvmMethodParameterMeaning meaning = ValueParameterDescriptor parameterDescriptor =
resolveParameterDescriptor(containingDeclaration, i + indexDelta, parameter, typeVariableResolver); resolveParameterDescriptor(containingDeclaration, i + indexDelta, parameter, typeVariableResolver);
if (meaning.kind == JvmMethodParameterKind.TYPE_INFO) { result.add(parameterDescriptor);
// TODO
--indexDelta;
}
else if (meaning.kind == JvmMethodParameterKind.REGULAR) {
result.add(meaning.valueParameterDescriptor);
}
else if (meaning.kind == JvmMethodParameterKind.RECEIVER) {
if (receiverType != null) {
throw new IllegalStateException("more than one receiver");
}
--indexDelta;
receiverType = meaning.receiverType;
}
}
return new JavaDescriptorResolver.ValueParameterDescriptors(receiverType, result);
}
public enum JvmMethodParameterKind {
REGULAR,
RECEIVER,
TYPE_INFO,
}
public static class JvmMethodParameterMeaning {
public final JvmMethodParameterKind kind;
private final JetType receiverType;
private final ValueParameterDescriptor valueParameterDescriptor;
private JvmMethodParameterMeaning(
JvmMethodParameterKind kind,
@Nullable JetType receiverType,
@Nullable ValueParameterDescriptor valueParameterDescriptor
) {
this.kind = kind;
this.receiverType = receiverType;
this.valueParameterDescriptor = valueParameterDescriptor;
}
public static JvmMethodParameterMeaning receiver(@NotNull JetType receiverType) {
return new JvmMethodParameterMeaning(JvmMethodParameterKind.RECEIVER, receiverType, null);
}
public static JvmMethodParameterMeaning regular(@NotNull ValueParameterDescriptor valueParameterDescriptor) {
return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor);
} }
return new JavaDescriptorResolver.ValueParameterDescriptors(null, result);
} }
} }