Logic in JetTypeMapper simplified: looking up Java classes directly
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user