diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java index a2dee49d10f..f26466e98f3 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java @@ -306,25 +306,25 @@ public final class JavaPropertyResolver { return Collections.emptyList(); } + @NotNull private JetType getPropertyType( PropertyPsiData members, PropertyPsiDataElement characteristicMember, TypeVariableResolver typeVariableResolverForPropertyInternals ) { - JetType propertyType; if (!characteristicMember.getType().getTypeString().isEmpty()) { - propertyType = semanticServices.getTypeTransformer().transformToType(characteristicMember.getType().getTypeString(), typeVariableResolverForPropertyInternals); + return semanticServices.getTypeTransformer().transformToType( + characteristicMember.getType().getTypeString(), typeVariableResolverForPropertyInternals); } - else { - propertyType = semanticServices.getTypeTransformer().transformToType(characteristicMember.getType().getPsiType(), typeVariableResolverForPropertyInternals); - if (JavaAnnotationResolver.findAnnotation(characteristicMember.getType().getPsiNotNullOwner(), - JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().getFqName()) != null) { - propertyType = TypeUtils.makeNullableAsSpecified(propertyType, false); - } - else if (members.getGetter() == null && members.getSetter() == null && members.getField().getMember().isFinal() && members.getField().getMember().isStatic()) { - // http://youtrack.jetbrains.com/issue/KT-1388 - propertyType = TypeUtils.makeNotNullable(propertyType); - } + JetType propertyType = semanticServices.getTypeTransformer().transformToType( + characteristicMember.getType().getPsiType(), typeVariableResolverForPropertyInternals); + + boolean hasNotNullAnnotation = JavaAnnotationResolver.findAnnotation( + characteristicMember.getType().getPsiNotNullOwner(), + JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().getFqName()) != null; + + if (hasNotNullAnnotation || members.isStaticFinalField()) { + propertyType = TypeUtils.makeNotNullable(propertyType); } return propertyType; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java index 0a3e2acb8bf..07423f49e44 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java @@ -173,4 +173,12 @@ public final class PropertyPsiData { } return setter != null; } + + public boolean isStaticFinalField() { + if (getter != null || setter != null) { + return false; + } + assert field != null; + return field.getMember().isFinal() && field.getMember().isStatic(); + } }