J2K JavaToKotlinClassMap

This commit is contained in:
Pavel V. Talanov
2017-05-03 17:58:01 +03:00
parent 6701eb70fb
commit 40561dabed
24 changed files with 236 additions and 264 deletions
@@ -49,7 +49,7 @@ private fun KotlinType.approximateNonDynamicFlexibleTypes(
if (isFlexible()) {
val flexible = asFlexibleType()
val lowerClass = flexible.lowerBound.constructor.declarationDescriptor as? ClassDescriptor?
val isCollection = lowerClass != null && JavaToKotlinClassMap.INSTANCE.isMutable(lowerClass)
val isCollection = lowerClass != null && JavaToKotlinClassMap.isMutable(lowerClass)
// (Mutable)Collection<T>! -> MutableCollection<T>?
// Foo<(Mutable)Collection<T>!>! -> Foo<Collection<T>>?
// Foo! -> Foo?
@@ -215,7 +215,7 @@ object SourceNavigationHelper {
fun getOriginalPsiClassOrCreateLightClass(classOrObject: KtClassOrObject): PsiClass? {
val fqName = classOrObject.fqName
if (fqName != null) {
val javaClassId = JavaToKotlinClassMap.INSTANCE.mapKotlinToJava(fqName.toUnsafe())
val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName.toUnsafe())
if (javaClassId != null) {
return JavaPsiFacade.getInstance(classOrObject.project).findClass(
javaClassId.asSingleFqName().asString(),
@@ -112,7 +112,7 @@ class TypeInstantiationItems(
val typeArgs = fuzzyType.type.arguments
inheritanceSearchers.addInheritorSearcher(classDescriptor, classDescriptor, typeArgs, fuzzyType.freeParameters, tail)
val javaClassId = JavaToKotlinClassMap.INSTANCE.mapKotlinToJava(DescriptorUtils.getFqName(classifier))
val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(DescriptorUtils.getFqName(classifier))
if (javaClassId != null) {
val javaAnalog = resolutionFacade.moduleDescriptor.resolveTopLevelClass(javaClassId.asSingleFqName(), NoLookupLocation.FROM_IDE)
if (javaAnalog != null) {
@@ -93,4 +93,4 @@ class ImportableFqNameClassifier(private val file: KtFile) {
}
fun isJavaClassNotToBeUsedInKotlin(fqName: FqName): Boolean
= JavaToKotlinClassMap.INSTANCE.isJavaPlatformClass(fqName) || JavaAnnotationMapper.javaToKotlinNameMap[fqName] != null
= JavaToKotlinClassMap.isJavaPlatformClass(fqName) || JavaAnnotationMapper.javaToKotlinNameMap[fqName] != null
@@ -249,7 +249,7 @@ data class DataForConversion private constructor(
else {
val fqName = FqNameUnsafe(qualifiedName)
// skip explicit imports of platform classes mapped into Kotlin classes
if (fqName.isSafe && JavaToKotlinClassMap.INSTANCE.isJavaPlatformClass(fqName.toSafe())) continue
if (fqName.isSafe && JavaToKotlinClassMap.isJavaPlatformClass(fqName.toSafe())) continue
append("import $qualifiedName\n")
}
}
@@ -122,7 +122,7 @@ class PlainTextPasteImportResolver(val dataForConversion: DataForConversion, val
.map { it to it.resolveToDescriptor(resolutionFacade) }
.filter { canBeImported(it.second) }
classes.find { (_, descriptor) -> JavaToKotlinClassMap.INSTANCE.mapPlatformClass(descriptor!!).isNotEmpty() }
classes.find { (_, descriptor) -> JavaToKotlinClassMap.mapPlatformClass(descriptor!!).isNotEmpty() }
?.let { (psiClass, _) -> addImport(psiElementFactory.createImportStatement(psiClass)) }
if (reference.resolve() != null) return true
@@ -552,7 +552,7 @@ fun Type.getClassDescriptor(scope: GlobalSearchScope): ClassDescriptor? {
val jvmName = JvmClassName.byInternalName(internalName).fqNameForClassNameWithoutDollars
// TODO: use the correct built-ins from the module instead of DefaultBuiltIns here
JavaToKotlinClassMap.INSTANCE.mapJavaToKotlin(jvmName)?.let(
JavaToKotlinClassMap.mapJavaToKotlin(jvmName)?.let(
DefaultBuiltIns.Instance.builtInsModule::findClassAcrossModuleDependencies
)?.let { return it }