ReadKotlinBinaryClassTest: nullability

This commit is contained in:
Stepan Koltsov
2012-01-18 12:03:58 +04:00
parent 6ceb6816be
commit 106846e868
7 changed files with 94 additions and 28 deletions
@@ -735,15 +735,6 @@ public class JavaDescriptorResolver {
PsiType psiType = parameter.getPsiParameter().getType();
JetType varargElementType;
if (psiType instanceof PsiEllipsisType) {
PsiEllipsisType psiEllipsisType = (PsiEllipsisType) psiType;
varargElementType = semanticServices.getTypeTransformer().transformToType(psiEllipsisType.getComponentType());
}
else {
varargElementType = null;
}
boolean nullable = parameter.getJetValueParameter().nullable();
// TODO: must be very slow, make it lazy?
@@ -763,6 +754,14 @@ public class JavaDescriptorResolver {
} else {
outType = semanticServices.getTypeTransformer().transformToType(psiType);
}
JetType varargElementType;
if (psiType instanceof PsiEllipsisType) {
varargElementType = semanticServices.getJetSemanticServices().getStandardLibrary().getArrayElementType(outType);
} else {
varargElementType = null;
}
if (receiver) {
return JvmMethodParameterMeaning.receiver(outType);
} else {
@@ -823,8 +822,8 @@ public class JavaDescriptorResolver {
return;
}
PsiType propertyType = namedMembers.properties.type;
PsiType receiverType = namedMembers.properties.receiverType;
TypeSource propertyType = namedMembers.properties.type;
TypeSource receiver = namedMembers.properties.receiverType;
MembersForProperty members = namedMembers.properties;
boolean isFinal;
@@ -894,15 +893,28 @@ public class JavaDescriptorResolver {
// call ugly code with side effects
typeParameters = resolveMethodTypeParameters(members.getter, propertyDescriptor.getGetter(), typeVariableResolver);
}
List<TypeParameterDescriptor> typeParametersForReceiver = new ArrayList<TypeParameterDescriptor>();
typeParametersForReceiver.addAll(classTypeParameters);
typeParametersForReceiver.addAll(typeParameters);
TypeParameterListTypeVariableResolver typeVariableResolverForPropertyInternals = new TypeParameterListTypeVariableResolver(typeParametersForReceiver);
JetType receiverJetType;
if (receiverType == null) {
if (receiver == null) {
receiverJetType = null;
} else if (receiver.getTypeString().length() > 0) {
receiverJetType = semanticServices.getTypeTransformer().transformToType(receiver.getTypeString(), typeVariableResolverForPropertyInternals);
} else {
receiverJetType = semanticServices.getTypeTransformer().transformToType(receiverType);
receiverJetType = semanticServices.getTypeTransformer().transformToType(receiver.getPsiType());
}
JetType type = semanticServices.getTypeTransformer().transformToType(propertyType);
JetType type;
if (propertyType.getTypeString().length() > 0) {
type = semanticServices.getTypeTransformer().transformToType(propertyType.getTypeString(), typeVariableResolverForPropertyInternals);
} else {
type = semanticServices.getTypeTransformer().transformToType(propertyType.getPsiType());
}
propertyDescriptor.setType(
type,
@@ -2,7 +2,6 @@ package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.HierarchicalMethodSignature;
import com.intellij.psi.PsiType;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
@@ -12,8 +11,8 @@ import java.util.Map;
* @author Stepan Koltsov
*/
class JavaDescriptorResolverHelper {
private static class Builder {
private final PsiClassWrapper psiClass;
private final boolean staticMembers;
@@ -57,7 +56,7 @@ class JavaDescriptorResolverHelper {
MembersForProperty members = new MembersForProperty();
members.field = field;
members.type = field.getType();
members.type = new TypeSource("", field.getType());
namedMembers.properties = members;
}
@@ -90,9 +89,10 @@ class JavaDescriptorResolverHelper {
int i = 0;
PsiType receiverType;
TypeSource receiverType;
if (i < method.getParameters().size() && method.getParameter(i).getJetValueParameter().receiver()) {
receiverType = method.getParameter(i).getPsiParameter().getType();
PsiParameterWrapper receiverParameter = method.getParameter(i);
receiverType = new TypeSource(receiverParameter.getJetValueParameter().type(), receiverParameter.getPsiParameter().getType());
++i;
} else {
receiverType = null;
@@ -114,7 +114,7 @@ class JavaDescriptorResolverHelper {
// TODO: check conflicts with setter
// TODO: what if returnType == null?
members.getForProperty().type = method.getReturnType();
members.getForProperty().type = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType());
members.getForProperty().receiverType = receiverType;
}
} else if (method.getName().startsWith(JvmAbi.SETTER_PREFIX)) {
@@ -127,10 +127,10 @@ class JavaDescriptorResolverHelper {
int i = 0;
PsiType receiverType = null;
TypeSource receiverType = null;
PsiParameterWrapper p1 = method.getParameter(0);
if (p1.getJetValueParameter().receiver()) {
receiverType = p1.getPsiParameter().getType();
receiverType = new TypeSource(p1.getJetValueParameter().type(), p1.getPsiParameter().getType());
++i;
}
@@ -142,7 +142,8 @@ class JavaDescriptorResolverHelper {
throw new IllegalStateException();
}
PsiType propertyType = method.getParameter(i).getPsiParameter().getType();
PsiParameterWrapper propertyTypeParameter = method.getParameter(i);
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), propertyTypeParameter.getPsiParameter().getType());
String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.SETTER_PREFIX.length()));
NamedMembers members = getNamedMembers(propertyName);
@@ -1,7 +1,5 @@
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.psi.PsiType;
/**
* @author Stepan Koltsov
*/
@@ -10,6 +8,6 @@ class MembersForProperty {
PsiMethodWrapper setter;
PsiMethodWrapper getter;
PsiType type;
PsiType receiverType;
TypeSource type;
TypeSource receiverType;
}
@@ -0,0 +1,30 @@
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.psi.PsiType;
import org.jetbrains.annotations.NotNull;
/**
* @author Stepan Koltsov
*/
class TypeSource {
@NotNull
private final String typeString;
@NotNull
private final PsiType psiType;
TypeSource(@NotNull String typeString, @NotNull PsiType psiType) {
this.typeString = typeString;
this.psiType = psiType;
}
@NotNull
public String getTypeString() {
return typeString;
}
@NotNull
public PsiType getPsiType() {
return psiType;
}
}