Obtain purely implemented interface class descriptor by its fq-name.
This commit is contained in:
+1
-1
@@ -177,7 +177,7 @@ class LazyJavaClassDescriptor(
|
||||
|
||||
if (purelyImplementedFqName.isRoot || !purelyImplementedFqName.toUnsafe().startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME)) return null
|
||||
|
||||
val classDescriptor = c.module.builtIns.getBuiltInClassByNameNullable(purelyImplementedFqName.shortName()) ?: return null
|
||||
val classDescriptor = c.module.builtIns.getBuiltInClassByFqNameNullable(purelyImplementedFqName) ?: return null
|
||||
|
||||
if (classDescriptor.getTypeConstructor().getParameters().size != getParameters().size) return null
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ public abstract class KotlinBuiltIns {
|
||||
private final Map<PrimitiveType, KotlinType> primitiveTypeToArrayKotlinType;
|
||||
private final Map<KotlinType, KotlinType> primitiveKotlinTypeToKotlinArrayType;
|
||||
private final Map<KotlinType, KotlinType> kotlinArrayTypeToPrimitiveKotlinType;
|
||||
private final Map<FqName, BuiltinsPackageFragment> packageNameToPackageFragment;
|
||||
|
||||
public static final FqNames FQ_NAMES = new FqNames();
|
||||
|
||||
@@ -94,10 +95,12 @@ public abstract class KotlinBuiltIns {
|
||||
builtInsModule.initialize(packageFragmentProvider);
|
||||
builtInsModule.setDependencies(builtInsModule);
|
||||
|
||||
builtinsPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(BUILT_INS_PACKAGE_FQ_NAME));
|
||||
collectionsPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(COLLECTIONS_PACKAGE_FQ_NAME));
|
||||
rangesPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(RANGES_PACKAGE_FQ_NAME));
|
||||
annotationPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(ANNOTATION_PACKAGE_FQ_NAME));
|
||||
packageNameToPackageFragment = new HashMap<FqName, BuiltinsPackageFragment>();
|
||||
|
||||
builtinsPackageFragment = getBuiltinsPackageFragment(packageFragmentProvider, packageNameToPackageFragment, BUILT_INS_PACKAGE_FQ_NAME);
|
||||
collectionsPackageFragment = getBuiltinsPackageFragment(packageFragmentProvider, packageNameToPackageFragment, COLLECTIONS_PACKAGE_FQ_NAME);
|
||||
rangesPackageFragment = getBuiltinsPackageFragment(packageFragmentProvider, packageNameToPackageFragment, RANGES_PACKAGE_FQ_NAME);
|
||||
annotationPackageFragment = getBuiltinsPackageFragment(packageFragmentProvider, packageNameToPackageFragment, ANNOTATION_PACKAGE_FQ_NAME);
|
||||
|
||||
primitiveTypeToArrayKotlinType = new EnumMap<PrimitiveType, KotlinType>(PrimitiveType.class);
|
||||
primitiveKotlinTypeToKotlinArrayType = new HashMap<KotlinType, KotlinType>();
|
||||
@@ -121,6 +124,18 @@ public abstract class KotlinBuiltIns {
|
||||
kotlinArrayTypeToPrimitiveKotlinType.put(arrayType, type);
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private BuiltinsPackageFragment getBuiltinsPackageFragment(
|
||||
PackageFragmentProvider fragmentProvider,
|
||||
Map<FqName, BuiltinsPackageFragment> packageNameToPackageFragment,
|
||||
FqName packageFqName
|
||||
) {
|
||||
BuiltinsPackageFragment packageFragment = (BuiltinsPackageFragment) single(fragmentProvider.getPackageFragments(packageFqName));
|
||||
packageNameToPackageFragment.put(packageFqName, packageFragment);
|
||||
return packageFragment;
|
||||
}
|
||||
|
||||
public static class FqNames {
|
||||
public final FqNameUnsafe any = fqNameUnsafe("Any");
|
||||
public final FqNameUnsafe nothing = fqNameUnsafe("Nothing");
|
||||
@@ -288,6 +303,18 @@ public abstract class KotlinBuiltIns {
|
||||
return getBuiltInClassByNameNullable(simpleName, getBuiltInsPackageFragment());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor getBuiltInClassByFqNameNullable(@NotNull FqName fqName) {
|
||||
if (!fqName.isRoot()) {
|
||||
FqName parent = fqName.parent();
|
||||
BuiltinsPackageFragment packageFragment = packageNameToPackageFragment.get(parent);
|
||||
if (packageFragment != null) {
|
||||
return getBuiltInClassByNameNullable(fqName.shortName(), packageFragment);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ClassDescriptor getBuiltInClassByNameNullable(@NotNull Name simpleName, @NotNull PackageFragmentDescriptor packageFragment) {
|
||||
ClassifierDescriptor classifier = packageFragment.getMemberScope().getContributedClassifier(
|
||||
|
||||
Reference in New Issue
Block a user