+15
-3
@@ -879,8 +879,6 @@ public class JavaDescriptorResolver {
|
||||
|
||||
PsiType psiType = parameter.getPsiParameter().getType();
|
||||
|
||||
boolean nullable = parameter.getJetValueParameter().nullable();
|
||||
|
||||
// TODO: must be very slow, make it lazy?
|
||||
String name = parameter.getPsiParameter().getName() != null ? parameter.getPsiParameter().getName() : "p" + i;
|
||||
|
||||
@@ -909,13 +907,22 @@ public class JavaDescriptorResolver {
|
||||
if (receiver) {
|
||||
return JvmMethodParameterMeaning.receiver(outType);
|
||||
} else {
|
||||
|
||||
JetType transformedType;
|
||||
if (parameter.getJetValueParameter().nullable()) {
|
||||
transformedType = TypeUtils.makeNullableAsSpecified(outType, parameter.getJetValueParameter().nullable());
|
||||
} else if (parameter.getPsiParameter().getModifierList().findAnnotation(JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName()) != null) {
|
||||
transformedType = TypeUtils.makeNullableAsSpecified(outType, false);
|
||||
} else {
|
||||
transformedType = outType;
|
||||
}
|
||||
return JvmMethodParameterMeaning.regular(new ValueParameterDescriptorImpl(
|
||||
containingDeclaration,
|
||||
i,
|
||||
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
||||
name,
|
||||
false,
|
||||
nullable ? TypeUtils.makeNullableAsSpecified(outType, nullable) : outType,
|
||||
transformedType,
|
||||
hasDefaultValue,
|
||||
varargElementType
|
||||
));
|
||||
@@ -1142,6 +1149,9 @@ public class JavaDescriptorResolver {
|
||||
propertyType = semanticServices.getTypeTransformer().transformToType(anyMember.getType().getTypeString(), typeVariableResolverForPropertyInternals);
|
||||
} else {
|
||||
propertyType = semanticServices.getTypeTransformer().transformToType(anyMember.getType().getPsiType(), typeVariableResolverForPropertyInternals);
|
||||
if (anyMember.getType().getPsiNotNullOwner().getModifierList().findAnnotation(JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName()) != null) {
|
||||
propertyType = TypeUtils.makeNullableAsSpecified(propertyType, false);
|
||||
}
|
||||
}
|
||||
|
||||
JetType receiverType;
|
||||
@@ -1491,6 +1501,8 @@ public class JavaDescriptorResolver {
|
||||
}
|
||||
if (method.getJetMethod().returnTypeNullable()) {
|
||||
return TypeUtils.makeNullableAsSpecified(transformedType, true);
|
||||
} else if (method.getPsiMethod().getModifierList().findAnnotation(JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName()) != null) {
|
||||
return TypeUtils.makeNullableAsSpecified(transformedType, false);
|
||||
} else {
|
||||
return transformedType;
|
||||
}
|
||||
|
||||
+5
-5
@@ -88,7 +88,7 @@ class JavaDescriptorResolverHelper {
|
||||
|
||||
NamedMembers namedMembers = getNamedMembers(field.getName());
|
||||
|
||||
TypeSource type = new TypeSource("", field.getType());
|
||||
TypeSource type = new TypeSource("", field.getType(), field0);
|
||||
namedMembers.addPropertyAccessor(new PropertyAccessorData(field, type, null));
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ class JavaDescriptorResolverHelper {
|
||||
TypeSource receiverType;
|
||||
if (i < method.getParameters().size() && method.getParameter(i).getJetValueParameter().receiver()) {
|
||||
PsiParameterWrapper receiverParameter = method.getParameter(i);
|
||||
receiverType = new TypeSource(receiverParameter.getJetValueParameter().type(), receiverParameter.getPsiParameter().getType());
|
||||
receiverType = new TypeSource(receiverParameter.getJetValueParameter().type(), receiverParameter.getPsiParameter().getType(), receiverParameter.getPsiParameter());
|
||||
++i;
|
||||
} else {
|
||||
receiverType = null;
|
||||
@@ -144,7 +144,7 @@ class JavaDescriptorResolverHelper {
|
||||
NamedMembers members = getNamedMembers(propertyName);
|
||||
|
||||
// TODO: what if returnType == null?
|
||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType());
|
||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType(), method.getPsiMethod());
|
||||
|
||||
members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, receiverType));
|
||||
}
|
||||
@@ -161,7 +161,7 @@ class JavaDescriptorResolverHelper {
|
||||
TypeSource receiverType = null;
|
||||
PsiParameterWrapper p1 = method.getParameter(0);
|
||||
if (p1.getJetValueParameter().receiver()) {
|
||||
receiverType = new TypeSource(p1.getJetValueParameter().type(), p1.getPsiParameter().getType());
|
||||
receiverType = new TypeSource(p1.getJetValueParameter().type(), p1.getPsiParameter().getType(), p1.getPsiParameter());
|
||||
++i;
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ class JavaDescriptorResolverHelper {
|
||||
}
|
||||
|
||||
PsiParameterWrapper propertyTypeParameter = method.getParameter(i);
|
||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), propertyTypeParameter.getPsiParameter().getType());
|
||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), propertyTypeParameter.getPsiParameter().getType(), propertyTypeParameter.getPsiParameter());
|
||||
|
||||
String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.SETTER_PREFIX.length()));
|
||||
NamedMembers members = getNamedMembers(propertyName);
|
||||
|
||||
@@ -27,4 +27,6 @@ public class JvmAbi {
|
||||
public static final String PACKAGE_CLASS = "namespace";
|
||||
public static final String SET_TYPE_INFO_METHOD = "$setTypeInfo";
|
||||
public static final String TYPE_INFO_FIELD = "$typeInfo";
|
||||
|
||||
public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION = new JvmClassName("org.jetbrains.annotations.NotNull");
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import com.intellij.psi.PsiModifierListOwner;
|
||||
import com.intellij.psi.PsiType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -28,10 +29,13 @@ class TypeSource {
|
||||
private final String typeString;
|
||||
@NotNull
|
||||
private final PsiType psiType;
|
||||
@NotNull
|
||||
private final PsiModifierListOwner psiNotNullOwner;
|
||||
|
||||
TypeSource(@NotNull String typeString, @NotNull PsiType psiType) {
|
||||
TypeSource(@NotNull String typeString, @NotNull PsiType psiType, @NotNull PsiModifierListOwner psiNotNullOwner) {
|
||||
this.typeString = typeString;
|
||||
this.psiType = psiType;
|
||||
this.psiNotNullOwner = psiNotNullOwner;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -43,4 +47,9 @@ class TypeSource {
|
||||
public PsiType getPsiType() {
|
||||
return psiType;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiModifierListOwner getPsiNotNullOwner() {
|
||||
return psiNotNullOwner;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package test;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class NotNullField {
|
||||
@NotNull
|
||||
public String hi;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package test;
|
||||
|
||||
open class NotNullField() {
|
||||
var hi: String = "";
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace test
|
||||
|
||||
open class test.NotNullField : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.NotNullField
|
||||
var hi: jet.String
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package test;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class NotNullMethod {
|
||||
@NotNull
|
||||
public String hi() { return ""; }
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
open class NotNullMethod() {
|
||||
open fun hi(): String = ""
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace test
|
||||
|
||||
open class test.NotNullMethod : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.NotNullMethod
|
||||
open fun hi(): jet.String
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package test;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class NotNullParameter {
|
||||
public void hi(@NotNull String param) { }
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
open class NotNullParameter() {
|
||||
open fun hi(p0: String): Unit { }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace test
|
||||
|
||||
open class test.NotNullParameter : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.NotNullParameter
|
||||
open fun hi(/*0*/ p0: jet.String): jet.Tuple0
|
||||
}
|
||||
@@ -97,7 +97,7 @@ public class ReadJavaBinaryClassTest extends TestCaseWithTmpdir {
|
||||
try {
|
||||
Iterable<? extends JavaFileObject> javaFileObjectsFromFiles = fileManager.getJavaFileObjectsFromFiles(Collections.singleton(javaFile));
|
||||
List<String> options = Arrays.asList(
|
||||
"-classpath", "out/production/stdlib",
|
||||
"-classpath", "out/production/stdlib:ideaSDK/lib/annotations.jar",
|
||||
"-d", tmpdir.getPath()
|
||||
);
|
||||
JavaCompiler.CompilationTask task = javaCompiler.getTask(null, fileManager, null, options, null, javaFileObjectsFromFiles);
|
||||
|
||||
Reference in New Issue
Block a user