Logic in JetTypeMapper simplified: looking up Java classes directly

This commit is contained in:
Andrey Breslav
2013-12-25 17:03:49 +04:00
parent 4eb6228ce0
commit 9d6d071cfb
@@ -29,7 +29,6 @@ import org.jetbrains.jet.codegen.signature.BothSignatureWriter;
import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind; import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind;
import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature; import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature;
import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -41,15 +40,9 @@ import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptorImpl;
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap; import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope;
import org.jetbrains.jet.lang.resolve.java.scope.JavaFullPackageScope;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
@@ -128,41 +121,24 @@ public class JetTypeMapper extends BindingTraceAware {
@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationDescriptor descriptor,
boolean insideModule boolean insideModule
) { ) {
JetScope packageScope = packageFragment.getMemberScope(); if (packageFragment instanceof JavaPackageFragmentDescriptor) {
if (!(packageFragment instanceof JavaPackageFragmentDescriptor) JavaPackageFragmentDescriptor javaPackageFragment = (JavaPackageFragmentDescriptor) packageFragment;
|| packageScope instanceof DeserializedPackageMemberScope if (javaPackageFragment.getKind() == CLASS_STATICS) {
|| packageScope instanceof JavaFullPackageScope) { ClassDescriptor classDescriptor =
JetFile file = BindingContextUtils.getContainingFile(bindingContext, descriptor); javaPackageFragment.getJavaDescriptorResolver().resolveClass(javaPackageFragment.getFqName());
if (insideModule && file != null) { assert classDescriptor != null : "Class not found while a package fragment exists: " + packageFragment;
return NamespaceCodegen.getNamespacePartInternalName(file); return mapType(classDescriptor.getDefaultType()).getInternalName();
}
else {
return PackageClassUtils.getPackageClassFqName(packageFragment.getFqName()).asString().replace('.', '/');
} }
} }
if (!(packageScope instanceof JavaClassStaticMembersScope)) { // It's not a package created for Java class statics
throw new IllegalStateException("Unexpected scope: " + packageScope.getClass()); JetFile file = BindingContextUtils.getContainingFile(bindingContext, descriptor);
if (insideModule && file != null) {
return NamespaceCodegen.getNamespacePartInternalName(file);
} }
else {
JavaPackageFragmentProvider javaFragmentProvider = ((JavaPackageFragmentDescriptorImpl) packageFragment).getProvider(); return PackageClassUtils.getPackageClassFqName(packageFragment.getFqName()).asString().replace('.', '/');
StringBuilder r = new StringBuilder();
for (FqName pathItem : packageFragment.getFqName().parent().path()) {
if (pathItem.isRoot()) {
continue;
}
r.append(pathItem.shortName().asString());
JavaPackageFragmentDescriptor fragment = javaFragmentProvider.getPackageFragment(pathItem);
if (fragment == null) {
throw new IllegalStateException("Package fragment not found: " + pathItem);
}
r.append(fragment.getKind() == CLASS_STATICS ? "$" : "/");
} }
r.append(packageFragment.getName().asString());
return r.toString();
} }
@NotNull @NotNull