diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PlatformStaticGenerator.kt b/compiler/backend/src/org/jetbrains/jet/codegen/PlatformStaticGenerator.kt index 802cbd00aad..825a23c2129 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PlatformStaticGenerator.kt +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PlatformStaticGenerator.kt @@ -33,9 +33,10 @@ class PlatformStaticGenerator( override fun invoke(codegen: ImplementationBodyCodegen, classBuilder: ClassBuilder) { val typeMapper = state.getTypeMapper() val asmMethod = typeMapper.mapSignature(descriptor).getAsmMethod() + val flags = Opcodes.ACC_STATIC or AsmUtil.getMethodAsmFlags(descriptor, OwnerKind.IMPLEMENTATION) val methodVisitor = classBuilder.newMethod( Synthetic(declarationOrigin.element, descriptor), - Opcodes.ACC_STATIC or AsmUtil.getMethodAsmFlags(descriptor, OwnerKind.IMPLEMENTATION), + flags, asmMethod.getName()!!, asmMethod.getDescriptor()!!, typeMapper.mapSignature(descriptor).getGenericsSignature(), @@ -43,7 +44,7 @@ class PlatformStaticGenerator( AnnotationCodegen.forMethod(methodVisitor, typeMapper)!!.genAnnotations(descriptor, asmMethod.getReturnType()) - if (state.getClassBuilderMode() == ClassBuilderMode.FULL) { + if (state.getClassBuilderMode() == ClassBuilderMode.FULL && flags and Opcodes.ACC_NATIVE == 0) { methodVisitor.visitCode(); val iv = InstructionAdapter(methodVisitor) val classDescriptor = descriptor.getContainingDeclaration() as ClassDescriptor diff --git a/compiler/testData/codegen/boxWithStdlib/native/staticNative.kt b/compiler/testData/codegen/boxWithStdlib/native/staticNative.kt new file mode 100644 index 00000000000..09b952fc782 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/native/staticNative.kt @@ -0,0 +1,27 @@ +import kotlin.jvm.* +import kotlin.platform.* + +class WithNative { + class object { + platformStatic native fun bar() {} + } +} + +object ObjWithNative { + platformStatic native fun bar() {} +} + +fun box(): String { + try { + WithNative.bar() + return "Link error expected" + } + catch (e: java.lang.UnsatisfiedLinkError) {} + + try { + ObjWithNative.bar() + return "Link error expected on object" + } + catch (e: java.lang.UnsatisfiedLinkError) {} + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 9c6439de702..7c2c44a3c99 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -1824,6 +1824,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/native/simpleNative.kt"); doTestWithStdlib(fileName); } + + @TestMetadata("staticNative.kt") + public void testStaticNative() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/native/staticNative.kt"); + doTestWithStdlib(fileName); + } } @TestMetadata("compiler/testData/codegen/boxWithStdlib/nonLocalReturns")