Skip to content

Commit 38d4ca5

Browse files
committed
Do not generate @NotNull annotations on void- or primitive-returning methods
#KT-4834 Fixed #KT-5255 Fixed
1 parent b6aff9e commit 38d4ca5

27 files changed

+136
-48
lines changed

compiler/backend/src/org/jetbrains/jet/codegen/AnnotationCodegen.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ private AnnotationCodegen(JetTypeMapper mapper) {
8585
bindingContext = typeMapper.getBindingContext();
8686
}
8787

88-
public void genAnnotations(Annotated annotated) {
88+
/**
89+
* @param returnType can be null if not applicable (e.g. {@code annotated} is a class)
90+
*/
91+
public void genAnnotations(@Nullable Annotated annotated, @Nullable Type returnType) {
8992
if (annotated == null) {
9093
return;
9194
}
@@ -111,7 +114,7 @@ else if (psiElement instanceof JetModifierListOwner) {
111114
}
112115

113116
if (modifierList == null) {
114-
generateAdditionalAnnotations(annotated, Collections.<String>emptySet());
117+
generateAdditionalAnnotations(annotated, returnType, Collections.<String>emptySet());
115118
return;
116119
}
117120

@@ -131,18 +134,24 @@ else if (psiElement instanceof JetModifierListOwner) {
131134
}
132135
}
133136

134-
generateAdditionalAnnotations(annotated, annotationDescriptorsAlreadyPresent);
137+
generateAdditionalAnnotations(annotated, returnType, annotationDescriptorsAlreadyPresent);
135138
}
136139

137-
private void generateAdditionalAnnotations(@NotNull Annotated annotated, @NotNull Set<String> annotationDescriptorsAlreadyPresent) {
140+
private void generateAdditionalAnnotations(
141+
@NotNull Annotated annotated,
142+
@Nullable Type returnType,
143+
@NotNull Set<String> annotationDescriptorsAlreadyPresent
144+
) {
138145
if (annotated instanceof CallableDescriptor) {
139146
CallableDescriptor descriptor = (CallableDescriptor) annotated;
140147

141148
// No need to annotate privates, synthetic accessors and their parameters
142149
if (isInvisibleFromTheOutside(descriptor)) return;
143150
if (descriptor instanceof ValueParameterDescriptor && isInvisibleFromTheOutside(descriptor.getContainingDeclaration())) return;
144151

145-
generateNullabilityAnnotation(descriptor.getReturnType(), annotationDescriptorsAlreadyPresent);
152+
if (returnType != null && !AsmUtil.isPrimitive(returnType)) {
153+
generateNullabilityAnnotation(descriptor.getReturnType(), annotationDescriptorsAlreadyPresent);
154+
}
146155
}
147156
}
148157

@@ -166,7 +175,6 @@ private void generateNullabilityAnnotation(@Nullable JetType type, @NotNull Set<
166175
}
167176

168177
boolean isNullableType = JvmCodegenUtil.isNullableType(type);
169-
if (!isNullableType && KotlinBuiltIns.getInstance().isPrimitiveType(type)) return;
170178

171179
Class<?> annotationClass = isNullableType ? Nullable.class : NotNull.class;
172180

compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void generateMethod(
143143
v.getSerializationBindings().put(METHOD_FOR_FUNCTION, functionDescriptor, asmMethod);
144144
}
145145

146-
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor);
146+
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor, asmMethod.getReturnType());
147147

148148
generateParameterAnnotations(functionDescriptor, mv, jvmSignature);
149149

@@ -180,7 +180,8 @@ private void generateParameterAnnotations(
180180
List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getValueParameters();
181181

182182
for (int i = 0; i < kotlinParameterTypes.size(); i++) {
183-
JvmMethodParameterKind kind = kotlinParameterTypes.get(i).getKind();
183+
JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
184+
JvmMethodParameterKind kind = parameterSignature.getKind();
184185
if (kind.isSkippedInGenericSignature()) {
185186
markEnumOrInnerConstructorParameterAsSynthetic(mv, i);
186187
continue;
@@ -189,7 +190,7 @@ private void generateParameterAnnotations(
189190
if (kind == JvmMethodParameterKind.VALUE) {
190191
ValueParameterDescriptor parameter = iterator.next();
191192
v.getSerializationBindings().put(INDEX_FOR_VALUE_PARAMETER, parameter, i);
192-
AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter);
193+
AnnotationCodegen.forParameter(i, mv, typeMapper).genAnnotations(parameter, parameterSignature.getAsmType());
193194
}
194195
}
195196
}

compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
5555
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
5656
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
57-
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
5857
import org.jetbrains.jet.lang.resolve.name.Name;
5958
import org.jetbrains.jet.lang.types.*;
6059
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
@@ -67,17 +66,17 @@
6766
import java.util.*;
6867

6968
import static org.jetbrains.jet.codegen.AsmUtil.*;
70-
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.DelegationToTraitImpl;
71-
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.OtherOrigin;
7269
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
73-
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
7470
import static org.jetbrains.jet.codegen.binding.CodegenBinding.*;
7571
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
7672
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
7773
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
7874
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
7975
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
8076
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
77+
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.DelegationToTraitImpl;
78+
import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.OtherOrigin;
79+
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
8180
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
8281

8382
public class ImplementationBodyCodegen extends ClassBodyCodegen {
@@ -208,7 +207,7 @@ else if (jetClass.isEnum()) {
208207

209208
writeInnerClasses();
210209

211-
AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor);
210+
AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor, null);
212211
}
213212

214213
@Override
@@ -1083,11 +1082,12 @@ private void generateClassObjectBackingFieldCopies() {
10831082
for (PropertyAndDefaultValue info : classObjectPropertiesToCopy) {
10841083
PropertyDescriptor property = info.descriptor;
10851084

1085+
Type type = typeMapper.mapType(property);
10861086
FieldVisitor fv = v.newField(OtherOrigin(property), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false),
1087-
typeMapper.mapType(property).getDescriptor(), typeMapper.mapFieldSignature(property.getType()),
1087+
type.getDescriptor(), typeMapper.mapFieldSignature(property.getType()),
10881088
info.defaultValue);
10891089

1090-
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property);
1090+
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(property, type);
10911091

10921092
//This field are always static and final so if it has constant initializer don't do anything in clinit,
10931093
//field would be initialized via default value in v.newField(...) - see JVM SPEC Ch.4

compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,15 @@ private boolean generateBackingField(@NotNull JetNamedDeclaration p, @NotNull Pr
145145
return false;
146146
}
147147

148-
FieldVisitor fv;
149148
if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) {
150-
fv = generateBackingFieldAccess(p, descriptor);
149+
generateBackingFieldAccess(p, descriptor);
151150
}
152151
else if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) {
153-
fv = generatePropertyDelegateAccess((JetProperty) p, descriptor);
152+
generatePropertyDelegateAccess((JetProperty) p, descriptor);
154153
}
155154
else {
156155
return false;
157156
}
158-
159-
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(descriptor);
160157
return true;
161158
}
162159

@@ -172,7 +169,7 @@ private void generateSyntheticMethodIfNeeded(@NotNull PropertyDescriptor descrip
172169
if (!isTrait(context.getContextDescriptor()) || kind == OwnerKind.TRAIT_IMPL) {
173170
int flags = ACC_DEPRECATED | ACC_FINAL | ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC;
174171
MethodVisitor mv = v.newMethod(OtherOrigin(descriptor), flags, name, desc, null, null);
175-
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(descriptor);
172+
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(descriptor, Type.VOID_TYPE);
176173
mv.visitCode();
177174
mv.visitInsn(Opcodes.RETURN);
178175
mv.visitEnd();
@@ -187,7 +184,7 @@ private void generateSyntheticMethodIfNeeded(@NotNull PropertyDescriptor descrip
187184
}
188185
}
189186

190-
private FieldVisitor generateBackingField(JetNamedDeclaration element, PropertyDescriptor propertyDescriptor, boolean isDelegate, JetType jetType, Object defaultValue) {
187+
private void generateBackingField(JetNamedDeclaration element, PropertyDescriptor propertyDescriptor, boolean isDelegate, JetType jetType, Object defaultValue) {
191188
int modifiers = getDeprecatedAccessFlag(propertyDescriptor);
192189

193190
for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) {
@@ -230,21 +227,22 @@ private FieldVisitor generateBackingField(JetNamedDeclaration element, PropertyD
230227

231228
v.getSerializationBindings().put(FIELD_FOR_PROPERTY, propertyDescriptor, Pair.create(type, name));
232229

233-
return builder.newField(OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
234-
typeMapper.mapFieldSignature(jetType), defaultValue);
230+
FieldVisitor fv = builder.newField(OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
231+
typeMapper.mapFieldSignature(jetType), defaultValue);
232+
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(propertyDescriptor, type);
235233
}
236234

237-
private FieldVisitor generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) {
235+
private void generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) {
238236
JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, p.getDelegateExpression());
239237
if (delegateType == null) {
240238
// If delegate expression is unresolved reference
241239
delegateType = ErrorUtils.createErrorType("Delegate type");
242240
}
243241

244-
return generateBackingField(p, propertyDescriptor, true, delegateType, null);
242+
generateBackingField(p, propertyDescriptor, true, delegateType, null);
245243
}
246244

247-
private FieldVisitor generateBackingFieldAccess(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor) {
245+
private void generateBackingFieldAccess(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor) {
248246
Object value = null;
249247

250248
if (shouldWriteFieldInitializer(propertyDescriptor)) {
@@ -254,7 +252,7 @@ private FieldVisitor generateBackingFieldAccess(JetNamedDeclaration p, PropertyD
254252
}
255253
}
256254

257-
return generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value);
255+
generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value);
258256
}
259257

260258
private boolean shouldWriteFieldInitializer(@NotNull PropertyDescriptor descriptor) {

compiler/testData/asJava/lightClasses/delegation/Function.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
public final class Derived implements kotlin.jvm.internal.KObject, Base {
2-
@org.jetbrains.annotations.NotNull
32
public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ }
43

54
@org.jetbrains.annotations.NotNull

compiler/testData/asJava/lightClasses/delegation/Property.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
public final class Derived implements kotlin.jvm.internal.KObject, Base {
2-
@org.jetbrains.annotations.NotNull
32
public Derived(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "x") Base x) { /* compiled code */ }
43

54
@org.jetbrains.annotations.NotNull

compiler/testData/asJava/lightClasses/nullabilityAnnotations/Class.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ public final java.lang.String getNullableVal() { /* compiled code */ }
3434
@org.jetbrains.annotations.Nullable
3535
public final java.lang.String getNullableVar() { /* compiled code */ }
3636

37-
@org.jetbrains.annotations.NotNull
3837
public final void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p) { /* compiled code */ }
3938

4039
@org.jetbrains.annotations.NotNull
@@ -43,7 +42,6 @@ public final java.lang.String getNotNullVal() { /* compiled code */ }
4342
@org.jetbrains.annotations.NotNull
4443
public final java.lang.String getNotNullVar() { /* compiled code */ }
4544

46-
@org.jetbrains.annotations.NotNull
4745
public final void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p) { /* compiled code */ }
4846

4947
@org.jetbrains.annotations.Nullable
@@ -55,7 +53,6 @@ public final java.lang.String getNotNullValWithGet() { /* compiled code */ }
5553
public final java.lang.String getNotNullVarWithGetSet() { /* compiled code */ }
5654

5755
@org.jetbrains.annotations.Nullable
58-
@org.jetbrains.annotations.NotNull
5956
public final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "v") java.lang.String v) { /* compiled code */ }
6057

6158
@org.jetbrains.annotations.NotNull
@@ -69,6 +66,5 @@ public final java.lang.String getNullableVarWithGetSet() { /* compiled code */ }
6966
@org.jetbrains.annotations.NotNull
7067
public final void setNullableVarWithGetSet(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "v", type = "?") java.lang.String v) { /* compiled code */ }
7168

72-
@org.jetbrains.annotations.NotNull
7369
public Class() { /* compiled code */ }
7470
}

compiler/testData/asJava/lightClasses/nullabilityAnnotations/ClassObjectField.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ public final class ClassObjectField implements kotlin.jvm.internal.KObject {
44
private static final java.lang.String y = "";
55
public static final ClassObjectField.object object$;
66

7-
@org.jetbrains.annotations.NotNull
87
public ClassObjectField() { /* compiled code */ }
98

109
public static final class object implements kotlin.jvm.internal.KObject {
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
public final class ClassWithConstructor implements kotlin.jvm.internal.KObject {
2-
@org.jetbrains.annotations.NotNull
32
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 */ }
43
}

compiler/testData/asJava/lightClasses/nullabilityAnnotations/ClassWithConstructorAndProperties.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ public final java.lang.String getNullable() { /* compiled code */ }
1010
@org.jetbrains.annotations.NotNull
1111
public final java.lang.String getNotNull() { /* compiled code */ }
1212

13-
@org.jetbrains.annotations.NotNull
1413
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 */ }
1514
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
public final class C implements kotlin.jvm.internal.KObject, Tr {
2+
private final int v = 1;
3+
4+
@org.jetbrains.annotations.NotNull
5+
public java.lang.Integer foo() { /* compiled code */ }
6+
7+
@org.jetbrains.annotations.NotNull
8+
public java.lang.Integer getV() { /* compiled code */ }
9+
10+
public C() { /* compiled code */ }
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// C
2+
3+
trait Tr {
4+
fun foo(): Any
5+
val v: Any
6+
}
7+
8+
class C: Tr {
9+
override fun foo() = 1
10+
override val v = 1
11+
}
12+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public final class _DefaultPackage {
2+
@org.jetbrains.annotations.Nullable
3+
public static final kotlin.Unit foo() { /* compiled code */ }
4+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// _DefaultPackage
2+
3+
fun foo(): Unit? = null
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public final class C implements kotlin.jvm.internal.KObject, Base {
2+
public void foo() { /* compiled code */ }
3+
4+
public C() { /* compiled code */ }
5+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// C
2+
3+
trait Base {
4+
fun foo(): Any
5+
}
6+
7+
class C : Base {
8+
override fun foo(): Unit {}
9+
}
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
public final class Synthetic implements kotlin.jvm.internal.KObject {
22
private final void foo() { /* compiled code */ }
33

4-
@org.jetbrains.annotations.NotNull
54
public Synthetic() { /* compiled code */ }
65

76
public final class Inner implements kotlin.jvm.internal.KObject {
8-
@org.jetbrains.annotations.NotNull
97
public final void test() { /* compiled code */ }
108

11-
@org.jetbrains.annotations.NotNull
129
public Inner() { /* compiled code */ }
1310
}
1411
}

compiler/testData/asJava/lightClasses/nullabilityAnnotations/Trait.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public interface Trait extends kotlin.jvm.internal.KObject {
2525
@org.jetbrains.annotations.Nullable
2626
java.lang.String getNullableVar();
2727

28-
@org.jetbrains.annotations.NotNull
2928
void setNullableVar(@org.jetbrains.annotations.Nullable @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>", type = "?") java.lang.String p);
3029

3130
@org.jetbrains.annotations.NotNull
@@ -34,6 +33,5 @@ public interface Trait extends kotlin.jvm.internal.KObject {
3433
@org.jetbrains.annotations.NotNull
3534
java.lang.String getNotNullVar();
3635

37-
@org.jetbrains.annotations.NotNull
3836
void setNotNullVar(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "<set-?>") java.lang.String p);
3937
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public final class C implements kotlin.jvm.internal.KObject, Base<kotlin.Unit> {
2+
public void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "t") kotlin.Unit t) { /* compiled code */ }
3+
4+
public C() { /* compiled code */ }
5+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// C
2+
3+
trait Base<T> {
4+
fun foo(t: T): T
5+
}
6+
7+
class C : Base<Unit> {
8+
override fun foo(t: Unit) {}
9+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public final class _DefaultPackage {
2+
public static final void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "s") kotlin.Unit s) { /* compiled code */ }
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// _DefaultPackage
2+
3+
fun foo(s: Unit) {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public final class _DefaultPackage {
2+
public static final void foo(@org.jetbrains.annotations.NotNull @jet.runtime.typeinfo.JetValueParameter(name = "s") java.lang.String s) { /* compiled code */ }
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// _DefaultPackage
2+
3+
fun foo(s: String) {}

0 commit comments

Comments
 (0)