- InnerClasses & EnclosingMethod attributes for local classes

in multifile part members
- invocation of multifile part/facade members
(TODO: deserialized descriptor case)
- inlining of multifile part/facade members
(TODO: inline against binaries case)
This commit is contained in:
Dmitry Petrov
2015-09-10 16:43:56 +03:00
parent 6a3cd50a70
commit 2931e474e1
27 changed files with 259 additions and 82 deletions
@@ -22,12 +22,29 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.org.objectweb.asm.Type
public interface JvmFileClassesProvider {
public fun getFileClassFqName(file: JetFile): FqName
public fun getFileClassInfo(file: JetFile): JvmFileClassInfo
public fun getFileClassFqName(file: JetFile): FqName =
getFileClassInfo(file).fileClassFqName
public fun getFileClassInternalName(file: JetFile): String =
JvmClassName.byFqNameWithoutInnerClasses(getFileClassFqName(file)).internalName
getFileClassFqName(file).getInternalName()
public fun getFileClassType(file: JetFile): Type =
Type.getObjectType(getFileClassInternalName(file))
getFileClassFqName(file).getClassType()
public fun getFacadeClassFqName(file: JetFile): FqName =
getFileClassInfo(file).facadeClassFqName
public fun getFacadeClassInternalName(file: JetFile): String =
getFacadeClassFqName(file).getInternalName()
public fun getFacadeClassType(file: JetFile): Type =
getFacadeClassFqName(file).getClassType()
}
private fun FqName.getInternalName(): String =
JvmClassName.byFqNameWithoutInnerClasses(this).internalName
private fun FqName.getClassType(): Type =
Type.getObjectType(getInternalName())
@@ -21,6 +21,6 @@ import org.jetbrains.kotlin.psi.JetFile
public object NoResolveFileClassesProvider : JvmFileClassesProvider {
override fun getFileClassFqName(file: JetFile): FqName =
JvmFileClassUtil.getFileClassInfo(file, JvmFileClassUtil.parseJvmNameOnFileNoResolve(file)).fileClassFqName
override fun getFileClassInfo(file: JetFile): JvmFileClassInfo =
JvmFileClassUtil.getFileClassInfo(file, JvmFileClassUtil.parseJvmNameOnFileNoResolve(file))
}