- call multifile class members (compiling against binaries)

- inline multifile class members
HACK? scope-based part/facade resolution
This commit is contained in:
Dmitry Petrov
2015-09-11 10:08:01 +03:00
parent 50f83da6da
commit 838433ba8a
3 changed files with 30 additions and 5 deletions
@@ -55,9 +55,11 @@ import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.kotlin.resolve.scopes.AbstractScopeAdapter;
import org.jetbrains.kotlin.serialization.deserialization.DeserializedType;
import org.jetbrains.kotlin.resolve.scopes.JetScope;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.kotlin.types.*;
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import org.jetbrains.org.objectweb.asm.Type;
@@ -174,6 +176,9 @@ public class JetTypeMapper {
if (containingDeclaration instanceof PackageFragmentDescriptor) {
PackageFragmentDescriptor packageFragmentDescriptor = (PackageFragmentDescriptor) containingDeclaration;
JetScope scope = packageFragmentDescriptor.getMemberScope();
if (scope instanceof AbstractScopeAdapter) {
scope = ((AbstractScopeAdapter) scope).getActualScope();
}
if (scope instanceof LazyJavaPackageScope) {
String facadeShortName = ((LazyJavaPackageScope) scope).getFacadeSimpleNameForPartSimpleName(implClassName.asString());
if (facadeShortName != null) {
@@ -181,6 +186,13 @@ public class JetTypeMapper {
return internalNameByFqNameWithoutInnerClasses(facadeFqName);
}
}
else if (scope instanceof DeserializedPackageMemberScope) {
FqName implClassFqName = packageFragmentDescriptor.getFqName().child(implClassName);
return internalNameByFqNameWithoutInnerClasses(implClassFqName);
}
else {
throw new AssertionError("Unexpected member scope for deserialized callable: " + scope);
}
}
}