Check header on package part classes in MethodInliner
This commit is contained in:
@@ -17,13 +17,17 @@
|
|||||||
package org.jetbrains.jet.codegen.inline;
|
package org.jetbrains.jet.codegen.inline;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.codegen.ClosureCodegen;
|
import org.jetbrains.jet.codegen.ClosureCodegen;
|
||||||
import org.jetbrains.jet.codegen.StackValue;
|
import org.jetbrains.jet.codegen.StackValue;
|
||||||
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
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.JvmClassName;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
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.Label;
|
||||||
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes;
|
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: check it's external module
|
||||||
//TODO?: assert method exists in facade?
|
//TODO?: assert method exists in facade?
|
||||||
public String changeOwnerForExternalPackage(String type, int opcode) {
|
public String changeOwnerForExternalPackage(String type, int opcode) {
|
||||||
@@ -546,7 +549,13 @@ public class MethodInliner {
|
|||||||
JvmClassName name = JvmClassName.byInternalName(type);
|
JvmClassName name = JvmClassName.byInternalName(type);
|
||||||
String packageClassInternalName = PackageClassUtils.getPackageClassInternalName(name.getPackageFqName());
|
String packageClassInternalName = PackageClassUtils.getPackageClassInternalName(name.getPackageFqName());
|
||||||
if (type.startsWith(packageClassInternalName + '$')) {
|
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;
|
return type;
|
||||||
|
|||||||
Reference in New Issue
Block a user