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
|
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
|
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<PrimitiveType, KotlinType> primitiveTypeToArrayKotlinType;
|
||||||
private final Map<KotlinType, KotlinType> primitiveKotlinTypeToKotlinArrayType;
|
private final Map<KotlinType, KotlinType> primitiveKotlinTypeToKotlinArrayType;
|
||||||
private final Map<KotlinType, KotlinType> kotlinArrayTypeToPrimitiveKotlinType;
|
private final Map<KotlinType, KotlinType> kotlinArrayTypeToPrimitiveKotlinType;
|
||||||
|
private final Map<FqName, BuiltinsPackageFragment> packageNameToPackageFragment;
|
||||||
|
|
||||||
public static final FqNames FQ_NAMES = new FqNames();
|
public static final FqNames FQ_NAMES = new FqNames();
|
||||||
|
|
||||||
@@ -94,10 +95,12 @@ public abstract class KotlinBuiltIns {
|
|||||||
builtInsModule.initialize(packageFragmentProvider);
|
builtInsModule.initialize(packageFragmentProvider);
|
||||||
builtInsModule.setDependencies(builtInsModule);
|
builtInsModule.setDependencies(builtInsModule);
|
||||||
|
|
||||||
builtinsPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(BUILT_INS_PACKAGE_FQ_NAME));
|
packageNameToPackageFragment = new HashMap<FqName, BuiltinsPackageFragment>();
|
||||||
collectionsPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(COLLECTIONS_PACKAGE_FQ_NAME));
|
|
||||||
rangesPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(RANGES_PACKAGE_FQ_NAME));
|
builtinsPackageFragment = getBuiltinsPackageFragment(packageFragmentProvider, packageNameToPackageFragment, BUILT_INS_PACKAGE_FQ_NAME);
|
||||||
annotationPackageFragment = (BuiltinsPackageFragment) single(packageFragmentProvider.getPackageFragments(ANNOTATION_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);
|
primitiveTypeToArrayKotlinType = new EnumMap<PrimitiveType, KotlinType>(PrimitiveType.class);
|
||||||
primitiveKotlinTypeToKotlinArrayType = new HashMap<KotlinType, KotlinType>();
|
primitiveKotlinTypeToKotlinArrayType = new HashMap<KotlinType, KotlinType>();
|
||||||
@@ -121,6 +124,18 @@ public abstract class KotlinBuiltIns {
|
|||||||
kotlinArrayTypeToPrimitiveKotlinType.put(arrayType, type);
|
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 static class FqNames {
|
||||||
public final FqNameUnsafe any = fqNameUnsafe("Any");
|
public final FqNameUnsafe any = fqNameUnsafe("Any");
|
||||||
public final FqNameUnsafe nothing = fqNameUnsafe("Nothing");
|
public final FqNameUnsafe nothing = fqNameUnsafe("Nothing");
|
||||||
@@ -288,6 +303,18 @@ public abstract class KotlinBuiltIns {
|
|||||||
return getBuiltInClassByNameNullable(simpleName, getBuiltInsPackageFragment());
|
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
|
@Nullable
|
||||||
private static ClassDescriptor getBuiltInClassByNameNullable(@NotNull Name simpleName, @NotNull PackageFragmentDescriptor packageFragment) {
|
private static ClassDescriptor getBuiltInClassByNameNullable(@NotNull Name simpleName, @NotNull PackageFragmentDescriptor packageFragment) {
|
||||||
ClassifierDescriptor classifier = packageFragment.getMemberScope().getContributedClassifier(
|
ClassifierDescriptor classifier = packageFragment.getMemberScope().getContributedClassifier(
|
||||||
|
|||||||
Reference in New Issue
Block a user