Remove JvmParameterMeaning abstraction
Some code enhancements included
This commit is contained in:
committed by
Alexander Udalov
parent
1843b7bbbe
commit
ba8732d10f
+12
-54
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user