diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java index 9591de97661..3d5673517de 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java @@ -17,13 +17,17 @@ package org.jetbrains.jet.codegen.inline; import com.google.common.collect.Lists; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.ClosureCodegen; import org.jetbrains.jet.codegen.StackValue; import org.jetbrains.jet.codegen.state.JetTypeMapper; +import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache; +import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.org.objectweb.asm.Label; import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.Opcodes; @@ -535,7 +539,6 @@ public class MethodInliner { } } - //TODO: check annotation on class - it's package part //TODO: check it's external module //TODO?: assert method exists in facade? public String changeOwnerForExternalPackage(String type, int opcode) { @@ -546,7 +549,13 @@ public class MethodInliner { JvmClassName name = JvmClassName.byInternalName(type); String packageClassInternalName = PackageClassUtils.getPackageClassInternalName(name.getPackageFqName()); if (type.startsWith(packageClassInternalName + '$')) { - return packageClassInternalName; + VirtualFile virtualFile = InlineCodegenUtil.findVirtualFile(inliningContext.state.getProject(), type); + if (virtualFile != null) { + KotlinJvmBinaryClass klass = KotlinBinaryClassCache.getKotlinBinaryClass(virtualFile); + if (klass != null && klass.getClassHeader().getSyntheticClassKind() == KotlinSyntheticClass.Kind.PACKAGE_PART) { + return packageClassInternalName; + } + } } return type;