提交 a1d88a08 编写于 作者: S Stepan Koltsov
上级 2026be54
......@@ -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;
}
......
......@@ -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;
}
}
package test;
import org.jetbrains.annotations.NotNull;
class NotNullField {
@NotNull
public String hi;
}
package test;
open class NotNullField() {
var hi: String = "";
}
namespace test
open class test.NotNullField : jet.Any {
final /*constructor*/ fun <init>(): test.NotNullField
var hi: jet.String
}
package test;
import org.jetbrains.annotations.NotNull;
class NotNullMethod {
@NotNull
public String hi() { return ""; }
}
package test
open class NotNullMethod() {
open fun hi(): String = ""
}
namespace test
open class test.NotNullMethod : jet.Any {
final /*constructor*/ fun <init>(): test.NotNullMethod
open fun hi(): jet.String
}
package test;
import org.jetbrains.annotations.NotNull;
class NotNullParameter {
public void hi(@NotNull String param) { }
}
package test
open class NotNullParameter() {
open fun hi(p0: String): Unit { }
}
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册