ReadKotlinBinaryClassTest: nullability
This commit is contained in:
+26
-14
@@ -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,
|
||||
|
||||
+11
-10
@@ -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);
|
||||
|
||||
+2
-4
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user