Do not generate @NotNull annotations on void- or primitive-returning methods

#KT-4834 Fixed
  #KT-5255 Fixed
This commit is contained in:
Andrey Breslav
2014-06-21 15:08:43 +04:00
parent b6aff9e9ee
commit 38d4ca5469
27 changed files with 136 additions and 48 deletions
@@ -85,7 +85,10 @@ public abstract class AnnotationCodegen {
bindingContext = typeMapper.getBindingContext(); bindingContext = typeMapper.getBindingContext();
} }
public void genAnnotations(Annotated annotated) { /**
* @param returnType can be null if not applicable (e.g. {@code annotated} is a class)
*/
public void genAnnotations(@Nullable Annotated annotated, @Nullable Type returnType) {
if (annotated == null) { if (annotated == null) {
return; return;
} }
@@ -111,7 +114,7 @@ public abstract class AnnotationCodegen {
} }
if (modifierList == null) { if (modifierList == null) {
generateAdditionalAnnotations(annotated, Collections.<String>emptySet()); generateAdditionalAnnotations(annotated, returnType, Collections.<String>emptySet());
return; return;
} }
@@ -131,10 +134,14 @@ public abstract class AnnotationCodegen {
} }
} }
generateAdditionalAnnotations(annotated, annotationDescriptorsAlreadyPresent); generateAdditionalAnnotations(annotated, returnType, annotationDescriptorsAlreadyPresent);
} }
private void generateAdditionalAnnotations(@NotNull Annotated annotated, @NotNull Set<String> annotationDescriptorsAlreadyPresent) { private void generateAdditionalAnnotations(
@NotNull Annotated annotated,
@Nullable Type returnType,
@NotNull Set<String> annotationDescriptorsAlreadyPresent
) {
if (annotated instanceof CallableDescriptor) { if (annotated instanceof CallableDescriptor) {
CallableDescriptor descriptor = (CallableDescriptor) annotated; CallableDescriptor descriptor = (CallableDescriptor) annotated;
@@ -142,7 +149,9 @@ public abstract class AnnotationCodegen {
if (isInvisibleFromTheOutside(descriptor)) return; if (isInvisibleFromTheOutside(descriptor)) return;
if (descriptor instanceof ValueParameterDescriptor && isInvisibleFromTheOutside(descriptor.getContainingDeclaration())) return; if (descriptor instanceof ValueParameterDescriptor && isInvisibleFromTheOutside(descriptor.getContainingDeclaration())) return;
generateNullabilityAnnotation(descriptor.getReturnType(), annotationDescriptorsAlreadyPresent); if (returnType != null && !AsmUtil.isPrimitive(returnType)) {
generateNullabilityAnnotation(descriptor.getReturnType(), annotationDescriptorsAlreadyPresent);
}
} }
} }
@@ -166,7 +175,6 @@ public abstract class AnnotationCodegen {
} }
boolean isNullableType = JvmCodegenUtil.isNullableType(type); boolean isNullableType = JvmCodegenUtil.isNullableType(type);
if (!isNullableType && KotlinBuiltIns.getInstance().isPrimitiveType(type)) return;
Class<?> annotationClass = isNullableType ? Nullable.class : NotNull.class; Class<?> annotationClass = isNullableType ? Nullable.class : NotNull.class;
@@ -143,7 +143,7 @@ public class FunctionCodegen extends ParentCodegenAware {
v.getSerializationBindings().put(METHOD_FOR_FUNCTION, functionDescriptor, asmMethod); v.getSerializationBindings().put(METHOD_FOR_FUNCTION, functionDescriptor, asmMethod);
} }
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor); AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor, asmMethod.getReturnType());
generateParameterAnnotations(functionDescriptor, mv, jvmSignature); generateParameterAnnotations(functionDescriptor, mv, jvmSignature);
@@ -180,7 +180,8 @@ public class FunctionCodegen extends ParentCodegenAware {
List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getValueParameters(); List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getValueParameters();
for (int i = 0; i < kotlinParameterTypes.size(); i++) { for (int i = 0; i < kotlinParameterTypes.size(); i++) {
JvmMethodParameterKind kind = kotlinParameterTypes.get(i).getKind(); JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
JvmMethodParameterKind kind = parameterSignature.getKind();
if (kind.isSkippedInGenericSignature()) { if (kind.isSkippedInGenericSignature()) {
markEnumOrInnerConstructorParameterAsSynthetic(mv, i); markEnumOrInnerConstructorParameterAsSynthetic(mv, i);
continue; continue;
@@ -189,7 +190,7 @@ public class FunctionCodegen extends ParentCodegenAware {
if (kind == JvmMethodParameterKind.VALUE) { if (kind == JvmMethodParameterKind.VALUE) {
ValueParameterDescriptor parameter = iterator.next(); ValueParameterDescriptor parameter = iterator.next();
v.getSerializationBindings().put(INDEX_FOR_VALUE_PARAMETER, parameter, i); v.getSerializationBindings().put(INDEX_FOR_VALUE_PARAMETER, parameter, i);
AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter); AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter, parameterSignature.getAsmType());
} }
} }
} }
@@ -54,7 +54,6 @@ import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
@@ -67,10 +66,7 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.codegen.AsmUtil.*; import static org.jetbrains.jet.codegen.AsmUtil.*;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.DelegationToTraitImpl;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.OtherOrigin;
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*; import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*; import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver; import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration; import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
@@ -78,6 +74,9 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE; import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE; import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass; import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.DelegationToTraitImpl;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.OtherOrigin;
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
import static org.jetbrains.org.objectweb.asm.Opcodes.*; import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class ImplementationBodyCodegen extends ClassBodyCodegen { public class ImplementationBodyCodegen extends ClassBodyCodegen {
@@ -208,7 +207,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
writeInnerClasses(); writeInnerClasses();
AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor); AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor, null);
} }
@Override @Override
@@ -1083,11 +1082,12 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) { for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
PropertyDescriptor property = info.descriptor; PropertyDescriptor property = info.descriptor;
Type type = typeMapper.mapType(property);
FieldVisitor fv = v.newField(OtherOrigin(property), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false), FieldVisitor fv = v.newField(OtherOrigin(property), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false),
typeMapper.mapType(property).getDescriptor(), typeMapper.mapFieldSignature(property.getType()), type.getDescriptor(), typeMapper.mapFieldSignature(property.getType()),
info.defaultValue); info.defaultValue);
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property); AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property, type);
//This field are always static and final so if it has constant initializer don't do anything in clinit, //This field are always static and final so if it has constant initializer don't do anything in clinit,
//field would be initialized via default value in v.newField(...) - see JVM SPEC Ch.4 //field would be initialized via default value in v.newField(...) - see JVM SPEC Ch.4
@@ -145,18 +145,15 @@ public class PropertyCodegen {
return false; return false;
} }
FieldVisitor fv;
if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) { if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) {
fv = generateBackingFieldAccess(p, descriptor); generateBackingFieldAccess(p, descriptor);
} }
else if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) { else if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) {
fv = generatePropertyDelegateAccess((JetProperty) p, descriptor); generatePropertyDelegateAccess((JetProperty) p, descriptor);
} }
else { else {
return false; return false;
} }
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(descriptor);
return true; return true;
} }
@@ -172,7 +169,7 @@ public class PropertyCodegen {
if (!isTrait(context.getContextDescriptor()) || kind == OwnerKind.TRAIT_IMPL) { if (!isTrait(context.getContextDescriptor()) || kind == OwnerKind.TRAIT_IMPL) {
int flags = ACC_DEPRECATED | ACC_FINAL | ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC; int flags = ACC_DEPRECATED | ACC_FINAL | ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC;
MethodVisitor mv = v.newMethod(OtherOrigin(descriptor), flags, name, desc, null, null); MethodVisitor mv = v.newMethod(OtherOrigin(descriptor), flags, name, desc, null, null);
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(descriptor); AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(descriptor, Type.VOID_TYPE);
mv.visitCode(); mv.visitCode();
mv.visitInsn(Opcodes.RETURN); mv.visitInsn(Opcodes.RETURN);
mv.visitEnd(); mv.visitEnd();
@@ -187,7 +184,7 @@ public class PropertyCodegen {
} }
} }
private FieldVisitor generateBackingField(JetNamedDeclaration element, PropertyDescriptor propertyDescriptor, boolean isDelegate, JetType jetType, Object defaultValue) { private void generateBackingField(JetNamedDeclaration element, PropertyDescriptor propertyDescriptor, boolean isDelegate, JetType jetType, Object defaultValue) {
int modifiers = getDeprecatedAccessFlag(propertyDescriptor); int modifiers = getDeprecatedAccessFlag(propertyDescriptor);
for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) { for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) {
@@ -230,21 +227,22 @@ public class PropertyCodegen {
v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name)); v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name));
return builder.newField(OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(), FieldVisitor fv = builder.newField(OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
typeMapper.mapFieldSignature(jetType), defaultValue); typeMapper.mapFieldSignature(jetType), defaultValue);
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(propertyDescriptor, type);
} }
private FieldVisitor generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) { private void generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) {
JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, p.getDelegateExpression()); JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, p.getDelegateExpression());
if (delegateType == null) { if (delegateType == null) {
// If delegate expression is unresolved reference // If delegate expression is unresolved reference
delegateType = ErrorUtils.createErrorType("Delegate type"); delegateType = ErrorUtils.createErrorType("Delegate type");
} }
return generateBackingField(p, propertyDescriptor, true, delegateType, null); generateBackingField(p, propertyDescriptor, true, delegateType, null);
} }
private FieldVisitor generateBackingFieldAccess(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor) { private void generateBackingFieldAccess(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor) {
Object value = null; Object value = null;
if (shouldWriteFieldInitializer(propertyDescriptor)) { if (shouldWriteFieldInitializer(propertyDescriptor)) {
@@ -254,7 +252,7 @@ public class PropertyCodegen {
} }
} }
return generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value); generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value);
} }
private boolean shouldWriteFieldInitializer(@NotNull PropertyDescriptor descriptor) { private boolean shouldWriteFieldInitializer(@NotNull PropertyDescriptor descriptor) {
@@ -1,5 +1,4 @@
public final class Derived implements kotlin.jvm.internal.KObject, Base { public final class Derived implements kotlin.jvm.internal.KObject, Base {
@org.jetbrains.annotations.NotNull
public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ } public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ }
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -1,5 +1,4 @@
public final class Derived implements kotlin.jvm.internal.KObject, Base { public final class Derived implements kotlin.jvm.internal.KObject, Base {
@org.jetbrains.annotations.NotNull
public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ } public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ }
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -34,7 +34,6 @@ public final class Class implements kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
public final java.lang.String getNullableVar() { /* compiled code */ } public final java.lang.String getNullableVar() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public final void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p) { /* compiled code */ } public final void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p) { /* compiled code */ }
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -43,7 +42,6 @@ public final class Class implements kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
public final java.lang.String getNotNullVar() { /* compiled code */ } public final java.lang.String getNotNullVar() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public final void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p) { /* compiled code */ } public final void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p) { /* compiled code */ }
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
@@ -55,7 +53,6 @@ public final class Class implements kotlin.jvm.internal.KObject {
public final java.lang.String getNotNullVarWithGetSet() { /* compiled code */ } public final java.lang.String getNotNullVarWithGetSet() { /* compiled code */ }
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
@org.jetbrains.annotations.NotNull
public final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "v") java.lang.String v) { /* compiled code */ } public final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "v") java.lang.String v) { /* compiled code */ }
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -69,6 +66,5 @@ public final class Class implements kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
public final void setNullableVarWithGetSet(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "v", type = "?") java.lang.String v) { /* compiled code */ } public final void setNullableVarWithGetSet(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "v", type = "?") java.lang.String v) { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public Class() { /* compiled code */ } public Class() { /* compiled code */ }
} }
@@ -4,7 +4,6 @@ public final class ClassObjectField implements kotlin.jvm.internal.KObject {
private static final java.lang.String y = ""; private static final java.lang.String y = "";
public static final ClassObjectField.object object$; public static final ClassObjectField.object object$;
@org.jetbrains.annotations.NotNull
public ClassObjectField() { /* compiled code */ } public ClassObjectField() { /* compiled code */ }
public static final class object implements kotlin.jvm.internal.KObject { public static final class object implements kotlin.jvm.internal.KObject {
@@ -1,4 +1,3 @@
public final class ClassWithConstructor implements kotlin.jvm.internal.KObject { public final class ClassWithConstructor implements kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.NotNull
public ClassWithConstructor(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "nullable", type = "?") java.lang.String nullable, @org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "notNull") java.lang.String notNull) { /* compiled code */ } public ClassWithConstructor(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "nullable", type = "?") java.lang.String nullable, @org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "notNull") java.lang.String notNull) { /* compiled code */ }
} }
@@ -10,6 +10,5 @@ public final class ClassWithConstructorAndProperties implements kotlin.jvm.inter
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
public final java.lang.String getNotNull() { /* compiled code */ } public final java.lang.String getNotNull() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public ClassWithConstructorAndProperties(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "nullable", type = "?") java.lang.String nullable, @org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "notNull") java.lang.String notNull) { /* compiled code */ } public ClassWithConstructorAndProperties(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "nullable", type = "?") java.lang.String nullable, @org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "notNull") java.lang.String notNull) { /* compiled code */ }
} }
@@ -0,0 +1,11 @@
public final class C implements kotlin.jvm.internal.KObject, Tr {
private final int v = 1;
@org.jetbrains.annotations.NotNull
public java.lang.Integer foo() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public java.lang.Integer getV() { /* compiled code */ }
public C() { /* compiled code */ }
}
@@ -0,0 +1,12 @@
// C
trait Tr {
fun foo(): Any
val v: Any
}
class C: Tr {
override fun foo() = 1
override val v = 1
}
@@ -0,0 +1,4 @@
public final class _DefaultPackage {
@org.jetbrains.annotations.Nullable
public static final kotlin.Unit foo() { /* compiled code */ }
}
@@ -0,0 +1,3 @@
// _DefaultPackage
fun foo(): Unit? = null
@@ -0,0 +1,5 @@
public final class C implements kotlin.jvm.internal.KObject, Base {
public void foo() { /* compiled code */ }
public C() { /* compiled code */ }
}
@@ -0,0 +1,9 @@
// C
trait Base {
fun foo(): Any
}
class C : Base {
override fun foo(): Unit {}
}
@@ -1,14 +1,11 @@
public final class Synthetic implements kotlin.jvm.internal.KObject { public final class Synthetic implements kotlin.jvm.internal.KObject {
private final void foo() { /* compiled code */ } private final void foo() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public Synthetic() { /* compiled code */ } public Synthetic() { /* compiled code */ }
public final class Inner implements kotlin.jvm.internal.KObject { public final class Inner implements kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.NotNull
public final void test() { /* compiled code */ } public final void test() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public Inner() { /* compiled code */ } public Inner() { /* compiled code */ }
} }
} }
@@ -25,7 +25,6 @@ public interface Trait extends kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
java.lang.String getNullableVar(); java.lang.String getNullableVar();
@org.jetbrains.annotations.NotNull
void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p); void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p);
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -34,6 +33,5 @@ public interface Trait extends kotlin.jvm.internal.KObject {
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
java.lang.String getNotNullVar(); java.lang.String getNotNullVar();
@org.jetbrains.annotations.NotNull
void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p); void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p);
} }
@@ -0,0 +1,5 @@
public final class C implements kotlin.jvm.internal.KObject, Base<kotlin.Unit> {
public void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "t") kotlin.Unit t) { /* compiled code */ }
public C() { /* compiled code */ }
}
@@ -0,0 +1,9 @@
// C
trait Base<T> {
fun foo(t: T): T
}
class C : Base<Unit> {
override fun foo(t: Unit) {}
}
@@ -0,0 +1,3 @@
public final class _DefaultPackage {
public static final void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "s") kotlin.Unit s) { /* compiled code */ }
}
@@ -0,0 +1,3 @@
// _DefaultPackage
fun foo(s: Unit) {}
@@ -0,0 +1,3 @@
public final class _DefaultPackage {
public static final void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "s") java.lang.String s) { /* compiled code */ }
}
@@ -0,0 +1,3 @@
// _DefaultPackage
fun foo(s: String) {}
@@ -9,7 +9,6 @@ public final class _DefaultPackage {
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
public static final java.lang.String getNotNullVar() { /* compiled code */ } public static final java.lang.String getNotNullVar() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public static final void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p) { /* compiled code */ } public static final void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p) { /* compiled code */ }
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
@@ -17,7 +16,6 @@ public final class _DefaultPackage {
public static final java.lang.String getNotNullVarWithGetSet() { /* compiled code */ } public static final java.lang.String getNotNullVarWithGetSet() { /* compiled code */ }
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
@org.jetbrains.annotations.NotNull
public static final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "v") java.lang.String v) { /* compiled code */ } public static final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "v") java.lang.String v) { /* compiled code */ }
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
@@ -30,7 +28,6 @@ public final class _DefaultPackage {
@org.jetbrains.annotations.Nullable @org.jetbrains.annotations.Nullable
public static final java.lang.String getNullableVar() { /* compiled code */ } public static final java.lang.String getNullableVar() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public static final void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p) { /* compiled code */ } public static final void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p) { /* compiled code */ }
@org.jetbrains.annotations.NotNull @org.jetbrains.annotations.NotNull
@@ -86,6 +86,21 @@ public class KotlinLightClassTestGenerated extends AbstractKotlinLightClassTest
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.kt"); doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.kt");
} }
@TestMetadata("IntOverridesAny.kt")
public void testIntOverridesAny() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/IntOverridesAny.kt");
}
@TestMetadata("NullableUnitReturn.kt")
public void testNullableUnitReturn() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/NullableUnitReturn.kt");
}
@TestMetadata("OverrideAnyWithUnit.kt")
public void testOverrideAnyWithUnit() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/OverrideAnyWithUnit.kt");
}
@TestMetadata("Primitives.kt") @TestMetadata("Primitives.kt")
public void testPrimitives() throws Exception { public void testPrimitives() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.kt"); doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.kt");
@@ -116,6 +131,21 @@ public class KotlinLightClassTestGenerated extends AbstractKotlinLightClassTest
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.kt"); doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.kt");
} }
@TestMetadata("UnitAsGenericArgument.kt")
public void testUnitAsGenericArgument() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitAsGenericArgument.kt");
}
@TestMetadata("UnitParameter.kt")
public void testUnitParameter() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitParameter.kt");
}
@TestMetadata("VoidReturn.kt")
public void testVoidReturn() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/VoidReturn.kt");
}
@TestMetadata("_DefaultPackage.kt") @TestMetadata("_DefaultPackage.kt")
public void test_DefaultPackage() throws Exception { public void test_DefaultPackage() throws Exception {
doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/_DefaultPackage.kt"); doTest("compiler/testData/asJava/lightClasses/nullabilityAnnotations/_DefaultPackage.kt");
@@ -1,11 +1,9 @@
package foo; package foo;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
class JavaClass { class JavaClass {
@NotNull
@Override @Override
public void bar(@Nullable String price) { public void bar(@Nullable String price) {