From 6906e0d82d27127b27a01b9508588cb068e8e572 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 1 Sep 2020 17:59:45 +0300 Subject: [PATCH] Move common jvm classes from :core:descriptors.jvm to :core:compiler.common.jvm --- .../incremental/LocalFileKotlinClass.kt | 12 +- .../deserialization/ClassDeserialization.kt | 4 +- .../kotlin/fir/scopes/jvm/JvmMappedScope.kt | 6 +- .../load/kotlin/VirtualFileKotlinClass.kt | 10 +- .../resolution.common.jvm/build.gradle.kts | 4 + .../kotlin/asJava/KtLightClassMarker.kt | 0 .../kotlin/asJava/SyntheticElementUtils.kt | 0 .../structure/impl/JavaAnnotationImpl.java | 0 .../impl/JavaAnnotationOwnerImpl.java | 0 .../structure/impl/JavaArrayTypeImpl.java | 0 .../load/java/structure/impl/JavaClassImpl.kt | 0 .../structure/impl/JavaClassifierImpl.java | 0 .../structure/impl/JavaClassifierTypeImpl.kt | 0 .../structure/impl/JavaConstructorImpl.java | 0 .../JavaElementCollectionFromPsiArrayUtil.kt | 0 .../java/structure/impl/JavaElementImpl.java | 0 .../java/structure/impl/JavaElementUtil.java | 0 .../java/structure/impl/JavaFieldImpl.java | 0 .../java/structure/impl/JavaMemberImpl.java | 0 .../java/structure/impl/JavaMethodImpl.java | 0 .../impl/JavaModifierListOwnerImpl.java | 0 .../java/structure/impl/JavaPackageImpl.kt | 0 .../structure/impl/JavaPrimitiveTypeImpl.java | 0 .../java/structure/impl/JavaTypeImpl.java | 0 .../structure/impl/JavaTypeParameterImpl.java | 0 .../impl/JavaValueParameterImpl.java | 0 .../structure/impl/JavaWildcardTypeImpl.java | 0 .../impl/VirtualFileBoundJavaClass.kt | 0 .../structure/impl/annotationArgumentsImpl.kt | 0 .../structure/impl/classFiles/Annotations.kt | 0 .../classFiles/BinaryClassSignatureParser.kt | 0 .../impl/classFiles/BinaryJavaClass.kt | 0 .../classFiles/ClassifierResolutionContext.kt | 0 .../java/structure/impl/classFiles/Methods.kt | 0 .../java/structure/impl/classFiles/Other.kt | 0 .../java/structure/impl/classFiles/Types.kt | 0 .../structure/impl/classFiles/commonMixins.kt | 0 .../java/structure/impl/classNamesUtil.kt | 0 .../resolve/jvm/KotlinCliJavaFileManager.kt | 0 .../resolve/jvm/KotlinFinderMarker.java | 0 .../resolve/jvm/KotlinJavaPsiFacade.java | 1 - .../resolve/jvm/KotlinSafeClassFinder.kt | 0 .../util/javaslang/javaslangAdapters.kt | 32 +++ ...tionalBuiltInsMembersSignatureListsTest.kt | 12 +- core/compiler.common.jvm/build.gradle.kts | 1 + .../builtins/jvm/JvmBuiltInsSignatures.kt | 184 ++++++++++++++++++ .../kotlin/load/java/JavaClassFinder.kt | 15 +- .../kotlin/load/java/JvmAnnotationNames.java | 0 .../kotlin/load/java/JvmAnnotationNames.kt | 20 +- .../typeEnhancement/TypeComponentPosition.kt | 12 ++ .../kotlin/load/kotlin/KotlinClassFinder.kt | 0 .../load/kotlin/KotlinJvmBinaryClass.kt | 15 +- .../kotlin/load/kotlin/MemberSignature.kt | 15 +- .../kotlin/SignatureBuildingComponents.kt | 38 ++++ .../load/kotlin/header/KotlinClassHeader.kt | 15 +- .../kotlin/resolve/jvm/JvmClassName.java | 0 .../resolve/constants/ClassLiteralValue.kt | 0 .../deserialization/KotlinMetadataFinder.kt | 0 .../builtins/jvm/JvmBuiltInsSettings.kt | 183 +---------------- .../typeEnhancement/signatureEnhancement.kt | 1 + .../java/typeEnhancement/typeEnhancement.kt | 6 - .../kotlin/load/kotlin/PackagePartProvider.kt | 2 +- .../load/kotlin/methodSignatureBuilding.kt | 45 ----- .../kotlin/methodSignatureBuildingUtils.kt | 22 +++ .../load/kotlin/methodSignatureMapping.kt | 8 +- .../navigation/findDecompiledDeclaration.kt | 4 +- .../test/AbstractPositionManagerTest.java | 1 - 67 files changed, 347 insertions(+), 321 deletions(-) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/asJava/KtLightClassMarker.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationOwnerImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaArrayTypeImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassImpl.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierTypeImpl.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaConstructorImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementUtil.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaFieldImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMemberImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMethodImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaModifierListOwnerImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPackageImpl.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPrimitiveTypeImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaValueParameterImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/JavaWildcardTypeImpl.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/VirtualFileBoundJavaClass.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/annotationArgumentsImpl.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Annotations.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/ClassifierResolutionContext.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Other.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Types.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/load/java/structure/impl/classNamesUtil.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/resolve/jvm/KotlinCliJavaFileManager.kt (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/resolve/jvm/KotlinFinderMarker.java (100%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java (99%) rename compiler/{frontend.java => resolution.common.jvm}/src/org/jetbrains/kotlin/resolve/jvm/KotlinSafeClassFinder.kt (100%) create mode 100644 compiler/resolution.common.jvm/src/org/jetbrains/kotlin/util/javaslang/javaslangAdapters.kt create mode 100644 core/compiler.common.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSignatures.kt rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt (55%) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java (100%) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt (75%) create mode 100644 core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/TypeComponentPosition.kt rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt (100%) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt (76%) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt (73%) create mode 100644 core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/SignatureBuildingComponents.kt rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt (80%) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java (100%) rename core/{descriptors => compiler.common}/src/org/jetbrains/kotlin/resolve/constants/ClassLiteralValue.kt (100%) rename core/{deserialization => compiler.common}/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt (100%) delete mode 100644 core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuilding.kt create mode 100644 core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuildingUtils.kt diff --git a/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt b/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt index 2536ff5609e..5b6732a6ac2 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/LocalFileKotlinClass.kt @@ -23,12 +23,12 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName import java.io.File class LocalFileKotlinClass private constructor( - private val file: File, - private val fileContents: ByteArray, - className: ClassId, - classVersion: Int, - classHeader: KotlinClassHeader, - innerClasses: InnerClassesInfo + private val file: File, + private val fileContents: ByteArray, + className: ClassId, + classVersion: Int, + classHeader: KotlinClassHeader, + innerClasses: InnerClassesInfo ) : FileBasedKotlinClass(className, classVersion, classHeader, innerClasses) { companion object { diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index d8cbb9d6954..1bcdd370fd5 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.deserialization import org.jetbrains.kotlin.builtins.StandardNames -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities @@ -211,7 +211,7 @@ private val ARRAY_CLASSES: Set = setOf( private val JAVA_IO_SERIALIZABLE = ClassId.topLevel(FqName("java.io.Serializable")) private fun FirRegularClassBuilder.addSerializableIfNeeded(classId: ClassId) { - if (!JvmBuiltInsSettings.isSerializableInJava(classId.asSingleFqName().toUnsafe())) return + if (!JvmBuiltInsSignatures.isSerializableInJava(classId.asSingleFqName().toUnsafe())) return superTypeRefs += buildResolvedTypeRef { type = ConeClassLikeTypeImpl( ConeClassLikeLookupTagImpl(JAVA_IO_SERIALIZABLE), diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt index 23c4dd5ac9c..e8e6765f7a0 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.scopes.jvm -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.scopes.* @@ -114,7 +114,7 @@ class JvmMappedScope( val signaturePrefix = klass.symbol.classId.toString() val whiteListSignaturesByName = mutableMapOf>() - JvmBuiltInsSettings.WHITE_LIST_METHOD_SIGNATURES.filter { signature -> + JvmBuiltInsSignatures.WHITE_LIST_METHOD_SIGNATURES.filter { signature -> signature.startsWith(signaturePrefix) }.map { signature -> // +1 to delete dot before function name @@ -124,7 +124,7 @@ class JvmMappedScope( } val constructorBlackList = - (JvmBuiltInsSettings.BLACK_LIST_CONSTRUCTOR_SIGNATURES + additionalConstructorBlackList) + (JvmBuiltInsSignatures.BLACK_LIST_CONSTRUCTOR_SIGNATURES + additionalConstructorBlackList) .filter { it.startsWith(signaturePrefix) } .mapTo(mutableSetOf()) { it.substring(signaturePrefix.length + 1) } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt index 8f2c765055c..7e5747a0fc1 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClass.kt @@ -28,11 +28,11 @@ import java.io.FileNotFoundException import java.io.IOException class VirtualFileKotlinClass private constructor( - val file: VirtualFile, - className: ClassId, - classVersion: Int, - classHeader: KotlinClassHeader, - innerClasses: InnerClassesInfo + val file: VirtualFile, + className: ClassId, + classVersion: Int, + classHeader: KotlinClassHeader, + innerClasses: InnerClassesInfo ) : FileBasedKotlinClass(className, classVersion, classHeader, innerClasses) { override val location: String diff --git a/compiler/resolution.common.jvm/build.gradle.kts b/compiler/resolution.common.jvm/build.gradle.kts index 695e92106d8..430f540f474 100644 --- a/compiler/resolution.common.jvm/build.gradle.kts +++ b/compiler/resolution.common.jvm/build.gradle.kts @@ -6,7 +6,11 @@ plugins { dependencies { api(project(":compiler:resolution.common")) api(project(":core:compiler.common.jvm")) + api(project(":compiler:psi")) + implementation(project(":compiler:util")) + implementation(commonDep("io.javaslang","javaslang")) compileOnly(intellijCoreDep()) { includeJars("intellij-core") } + compileOnly(intellijDep()) { includeJars("asm-all", "trove4j", "guava", rootProject = rootProject) } } sourceSets { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/asJava/KtLightClassMarker.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/KtLightClassMarker.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/asJava/KtLightClassMarker.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/KtLightClassMarker.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationOwnerImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationOwnerImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationOwnerImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationOwnerImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaArrayTypeImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaArrayTypeImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaArrayTypeImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaArrayTypeImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassImpl.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassImpl.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassImpl.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassImpl.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierTypeImpl.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierTypeImpl.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierTypeImpl.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaClassifierTypeImpl.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaConstructorImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaConstructorImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaConstructorImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaConstructorImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementUtil.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementUtil.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementUtil.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaElementUtil.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaFieldImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaFieldImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaFieldImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaFieldImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMemberImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMemberImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMemberImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMemberImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMethodImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMethodImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMethodImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaMethodImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaModifierListOwnerImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaModifierListOwnerImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaModifierListOwnerImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaModifierListOwnerImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPackageImpl.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPackageImpl.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPackageImpl.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPackageImpl.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPrimitiveTypeImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPrimitiveTypeImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPrimitiveTypeImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaPrimitiveTypeImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaValueParameterImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaValueParameterImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaValueParameterImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaValueParameterImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaWildcardTypeImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaWildcardTypeImpl.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaWildcardTypeImpl.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaWildcardTypeImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/VirtualFileBoundJavaClass.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/VirtualFileBoundJavaClass.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/VirtualFileBoundJavaClass.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/VirtualFileBoundJavaClass.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/annotationArgumentsImpl.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/annotationArgumentsImpl.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/annotationArgumentsImpl.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/annotationArgumentsImpl.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Annotations.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Annotations.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Annotations.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Annotations.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryClassSignatureParser.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/ClassifierResolutionContext.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/ClassifierResolutionContext.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/ClassifierResolutionContext.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/ClassifierResolutionContext.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Methods.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Other.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Other.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Other.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Other.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Types.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Types.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Types.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/Types.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/commonMixins.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classNamesUtil.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classNamesUtil.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/classNamesUtil.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classNamesUtil.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinCliJavaFileManager.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinCliJavaFileManager.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinCliJavaFileManager.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinCliJavaFileManager.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinFinderMarker.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinFinderMarker.java similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinFinderMarker.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinFinderMarker.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java similarity index 99% rename from compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java index 5bc2a987acb..9a3795216f1 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinJavaPsiFacade.java @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.resolve.jvm; import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinSafeClassFinder.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinSafeClassFinder.kt similarity index 100% rename from compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/KotlinSafeClassFinder.kt rename to compiler/resolution.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/KotlinSafeClassFinder.kt diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/util/javaslang/javaslangAdapters.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/util/javaslang/javaslangAdapters.kt new file mode 100644 index 00000000000..bd0ad9b21b5 --- /dev/null +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/util/javaslang/javaslangAdapters.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.util.javaslang + +import javaslang.Tuple2 +import javaslang.control.Option + +internal typealias ImmutableMap = javaslang.collection.Map +internal typealias ImmutableHashMap = javaslang.collection.HashMap +internal typealias ImmutableSet = javaslang.collection.Set +internal typealias ImmutableHashSet = javaslang.collection.HashSet +internal typealias ImmutableLinkedHashSet = javaslang.collection.LinkedHashSet + +internal operator fun Tuple2.component1(): T = _1() +internal operator fun Tuple2<*, T>.component2(): T = _2() + +internal fun Option.getOrNull(): T? = getOrElse(null as T?) +internal fun ImmutableMap.getOrNull(k: K): V? = get(k)?.getOrElse(null as V?) diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt index b72178a5f85..ea5cd068ccb 100644 --- a/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.serialization.builtins -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.resolveClassByFqName @@ -39,11 +39,11 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment() val module = JvmResolveUtil.analyze(environment).moduleDescriptor as ModuleDescriptorImpl val blackList = - JvmBuiltInsSettings.BLACK_LIST_METHOD_SIGNATURES + - JvmBuiltInsSettings.MUTABLE_METHOD_SIGNATURES + - JvmBuiltInsSettings.BLACK_LIST_CONSTRUCTOR_SIGNATURES + - JvmBuiltInsSettings.WHITE_LIST_METHOD_SIGNATURES + - JvmBuiltInsSettings.WHITE_LIST_CONSTRUCTOR_SIGNATURES + JvmBuiltInsSignatures.BLACK_LIST_METHOD_SIGNATURES + + JvmBuiltInsSignatures.MUTABLE_METHOD_SIGNATURES + + JvmBuiltInsSignatures.BLACK_LIST_CONSTRUCTOR_SIGNATURES + + JvmBuiltInsSignatures.WHITE_LIST_METHOD_SIGNATURES + + JvmBuiltInsSignatures.WHITE_LIST_CONSTRUCTOR_SIGNATURES val groupedByInternalName = blackList.groupBy({ it.split(".")[0] }) { it.split(".")[1] } diff --git a/core/compiler.common.jvm/build.gradle.kts b/core/compiler.common.jvm/build.gradle.kts index e059558821a..991f5b18028 100644 --- a/core/compiler.common.jvm/build.gradle.kts +++ b/core/compiler.common.jvm/build.gradle.kts @@ -8,6 +8,7 @@ javaHome = rootProject.extra["JDK_16"] as String dependencies { api(project(":core:compiler.common")) + api(project(":core:metadata.jvm")) } sourceSets { diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSignatures.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSignatures.kt new file mode 100644 index 00000000000..dd8bae0e0c9 --- /dev/null +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSignatures.kt @@ -0,0 +1,184 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.builtins.jvm + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents +import org.jetbrains.kotlin.load.kotlin.signatures +import org.jetbrains.kotlin.name.FqNameUnsafe +import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType +import java.io.Serializable +import java.util.* + +object JvmBuiltInsSignatures { + val DROP_LIST_METHOD_SIGNATURES: Set = + SignatureBuildingComponents.inJavaUtil( + "Collection", + "toArray()[Ljava/lang/Object;", "toArray([Ljava/lang/Object;)[Ljava/lang/Object;" + ) + "java/lang/annotation/Annotation.annotationType()Ljava/lang/Class;" + + val BLACK_LIST_METHOD_SIGNATURES: Set = + signatures { + buildPrimitiveValueMethodsSet() + + + inJavaUtil("List", "sort(Ljava/util/Comparator;)V") + + + inJavaLang( + "String", + "codePointAt(I)I", "codePointBefore(I)I", "codePointCount(II)I", "compareToIgnoreCase(Ljava/lang/String;)I", + "concat(Ljava/lang/String;)Ljava/lang/String;", "contains(Ljava/lang/CharSequence;)Z", + "contentEquals(Ljava/lang/CharSequence;)Z", "contentEquals(Ljava/lang/StringBuffer;)Z", + "endsWith(Ljava/lang/String;)Z", "equalsIgnoreCase(Ljava/lang/String;)Z", "getBytes()[B", "getBytes(II[BI)V", + "getBytes(Ljava/lang/String;)[B", "getBytes(Ljava/nio/charset/Charset;)[B", "getChars(II[CI)V", + "indexOf(I)I", "indexOf(II)I", "indexOf(Ljava/lang/String;)I", "indexOf(Ljava/lang/String;I)I", + "intern()Ljava/lang/String;", "isEmpty()Z", "lastIndexOf(I)I", "lastIndexOf(II)I", + "lastIndexOf(Ljava/lang/String;)I", "lastIndexOf(Ljava/lang/String;I)I", "matches(Ljava/lang/String;)Z", + "offsetByCodePoints(II)I", "regionMatches(ILjava/lang/String;II)Z", "regionMatches(ZILjava/lang/String;II)Z", + "replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", "replace(CC)Ljava/lang/String;", + "replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", + "replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;", + "split(Ljava/lang/String;I)[Ljava/lang/String;", "split(Ljava/lang/String;)[Ljava/lang/String;", + "startsWith(Ljava/lang/String;I)Z", "startsWith(Ljava/lang/String;)Z", "substring(II)Ljava/lang/String;", + "substring(I)Ljava/lang/String;", "toCharArray()[C", "toLowerCase()Ljava/lang/String;", + "toLowerCase(Ljava/util/Locale;)Ljava/lang/String;", "toUpperCase()Ljava/lang/String;", + "toUpperCase(Ljava/util/Locale;)Ljava/lang/String;", "trim()Ljava/lang/String;", + "isBlank()Z", "lines()Ljava/util/stream/Stream;", "repeat(I)Ljava/lang/String;" + ) + + + inJavaLang("Double", "isInfinite()Z", "isNaN()Z") + + inJavaLang("Float", "isInfinite()Z", "isNaN()Z") + + + inJavaLang("Enum", "getDeclaringClass()Ljava/lang/Class;", "finalize()V") + } + + private fun buildPrimitiveValueMethodsSet(): Set = + signatures { + listOf(JvmPrimitiveType.BOOLEAN, JvmPrimitiveType.CHAR).flatMapTo(LinkedHashSet()) { + inJavaLang(it.wrapperFqName.shortName().asString(), "${it.javaKeywordName}Value()${it.desc}") + } + } + + + val WHITE_LIST_METHOD_SIGNATURES: Set = + signatures { + inJavaLang( + "CharSequence", + "codePoints()Ljava/util/stream/IntStream;", "chars()Ljava/util/stream/IntStream;" + ) + + + inJavaUtil( + "Iterator", + "forEachRemaining(Ljava/util/function/Consumer;)V" + ) + + + inJavaLang( + "Iterable", + "forEach(Ljava/util/function/Consumer;)V", "spliterator()Ljava/util/Spliterator;" + ) + + + inJavaLang( + "Throwable", + "setStackTrace([Ljava/lang/StackTraceElement;)V", "fillInStackTrace()Ljava/lang/Throwable;", + "getLocalizedMessage()Ljava/lang/String;", "printStackTrace()V", "printStackTrace(Ljava/io/PrintStream;)V", + "printStackTrace(Ljava/io/PrintWriter;)V", "getStackTrace()[Ljava/lang/StackTraceElement;", + "initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;", "getSuppressed()[Ljava/lang/Throwable;", + "addSuppressed(Ljava/lang/Throwable;)V" + ) + + + inJavaUtil( + "Collection", + "spliterator()Ljava/util/Spliterator;", "parallelStream()Ljava/util/stream/Stream;", + "stream()Ljava/util/stream/Stream;", "removeIf(Ljava/util/function/Predicate;)Z" + ) + + + inJavaUtil( + "List", + "replaceAll(Ljava/util/function/UnaryOperator;)V" + ) + + + inJavaUtil( + "Map", + "getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + "forEach(Ljava/util/function/BiConsumer;)V", "replaceAll(Ljava/util/function/BiFunction;)V", + "merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", + "computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", + "putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + "replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z", + "replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + "computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", + "compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" + ) + } + + val MUTABLE_METHOD_SIGNATURES: Set = + signatures { + inJavaUtil("Collection", "removeIf(Ljava/util/function/Predicate;)Z") + + + inJavaUtil("List", "replaceAll(Ljava/util/function/UnaryOperator;)V", "sort(Ljava/util/Comparator;)V") + + + inJavaUtil( + "Map", + "computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", + "computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", + "compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", + "merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", + "putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + "remove(Ljava/lang/Object;Ljava/lang/Object;)Z", "replaceAll(Ljava/util/function/BiFunction;)V", + "replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + "replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" + ) + } + + val BLACK_LIST_CONSTRUCTOR_SIGNATURES: Set = + signatures { + buildPrimitiveStringConstructorsSet() + + inJavaLang("Float", *constructors("D")) + + inJavaLang( + "String", *constructors( + "[C", "[CII", "[III", "[BIILjava/lang/String;", + "[BIILjava/nio/charset/Charset;", + "[BLjava/lang/String;", + "[BLjava/nio/charset/Charset;", + "[BII", "[B", + "Ljava/lang/StringBuffer;", + "Ljava/lang/StringBuilder;" + ) + ) + } + + val WHITE_LIST_CONSTRUCTOR_SIGNATURES: Set = + signatures { + inJavaLang("Throwable", *constructors("Ljava/lang/String;Ljava/lang/Throwable;ZZ")) + } + + private fun buildPrimitiveStringConstructorsSet(): Set = + signatures { + listOf( + JvmPrimitiveType.BOOLEAN, JvmPrimitiveType.BYTE, JvmPrimitiveType.DOUBLE, JvmPrimitiveType.FLOAT, + JvmPrimitiveType.BYTE, JvmPrimitiveType.INT, JvmPrimitiveType.LONG, JvmPrimitiveType.SHORT + ).flatMapTo(LinkedHashSet()) { + // java/lang/.(Ljava/lang/String;)V + inJavaLang(it.wrapperFqName.shortName().asString(), *constructors("Ljava/lang/String;")) + } + } + + fun isSerializableInJava(fqName: FqNameUnsafe): Boolean { + if (isArrayOrPrimitiveArray(fqName)) { + return true + } + val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName) ?: return false + val classViaReflection = try { + Class.forName(javaClassId.asSingleFqName().asString()) + } catch (e: ClassNotFoundException) { + return false + } + return Serializable::class.java.isAssignableFrom(classViaReflection) + } + + fun isArrayOrPrimitiveArray(fqName: FqNameUnsafe): Boolean { + return fqName == StandardNames.FqNames.array || StandardNames.isPrimitiveArray(fqName) + } +} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt similarity index 55% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt index 294b93d0926..b1a6525aa65 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaClassFinder.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.load.java diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java similarity index 100% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt similarity index 75% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt index 191335dfea0..f4fae096123 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.load.java import org.jetbrains.kotlin.name.FqName -val NULLABLE_ANNOTATIONS = listOf( +val NULLABLE_ANNOTATIONS: List = listOf( JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION, FqName("androidx.annotation.Nullable"), FqName("android.support.annotation.Nullable"), @@ -34,10 +34,10 @@ val NULLABLE_ANNOTATIONS = listOf( FqName("io.reactivex.annotations.Nullable") ) -val JAVAX_NONNULL_ANNOTATION = FqName("javax.annotation.Nonnull") -val JAVAX_CHECKFORNULL_ANNOTATION = FqName("javax.annotation.CheckForNull") +val JAVAX_NONNULL_ANNOTATION: FqName = FqName("javax.annotation.Nonnull") +val JAVAX_CHECKFORNULL_ANNOTATION: FqName = FqName("javax.annotation.CheckForNull") -val NOT_NULL_ANNOTATIONS = listOf( +val NOT_NULL_ANNOTATIONS: List = listOf( JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION, FqName("edu.umd.cs.findbugs.annotations.NonNull"), FqName("androidx.annotation.NonNull"), @@ -50,11 +50,11 @@ val NOT_NULL_ANNOTATIONS = listOf( FqName("io.reactivex.annotations.NonNull") ) -val COMPATQUAL_NULLABLE_ANNOTATION = FqName("org.checkerframework.checker.nullness.compatqual.NullableDecl") -val COMPATQUAL_NONNULL_ANNOTATION = FqName("org.checkerframework.checker.nullness.compatqual.NonNullDecl") +val COMPATQUAL_NULLABLE_ANNOTATION: FqName = FqName("org.checkerframework.checker.nullness.compatqual.NullableDecl") +val COMPATQUAL_NONNULL_ANNOTATION: FqName = FqName("org.checkerframework.checker.nullness.compatqual.NonNullDecl") -val ANDROIDX_RECENTLY_NULLABLE_ANNOTATION = FqName("androidx.annotation.RecentlyNullable") -val ANDROIDX_RECENTLY_NON_NULL_ANNOTATION = FqName("androidx.annotation.RecentlyNonNull") +val ANDROIDX_RECENTLY_NULLABLE_ANNOTATION: FqName = FqName("androidx.annotation.RecentlyNullable") +val ANDROIDX_RECENTLY_NON_NULL_ANNOTATION: FqName = FqName("androidx.annotation.RecentlyNonNull") val NULLABILITY_ANNOTATIONS: Set = mutableSetOf() + NULLABLE_ANNOTATIONS + @@ -65,12 +65,12 @@ val NULLABILITY_ANNOTATIONS: Set = mutableSetOf() + ANDROIDX_RECENTLY_NULLABLE_ANNOTATION + ANDROIDX_RECENTLY_NON_NULL_ANNOTATION -val READ_ONLY_ANNOTATIONS = listOf( +val READ_ONLY_ANNOTATIONS: List = listOf( JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION, JvmAnnotationNames.READONLY_ANNOTATION ) -val MUTABLE_ANNOTATIONS = listOf( +val MUTABLE_ANNOTATIONS: List = listOf( JvmAnnotationNames.JETBRAINS_MUTABLE_ANNOTATION, JvmAnnotationNames.MUTABLE_ANNOTATION ) diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/TypeComponentPosition.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/TypeComponentPosition.kt new file mode 100644 index 00000000000..9c84789b4c1 --- /dev/null +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/TypeComponentPosition.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.load.java.typeEnhancement + +enum class TypeComponentPosition { + FLEXIBLE_LOWER, + FLEXIBLE_UPPER, + INFLEXIBLE +} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt similarity index 100% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt similarity index 76% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt index ef39deac011..b3df740fe96 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmBinaryClass.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.load.kotlin diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt similarity index 73% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt index e82909f4901..056f2a726e3 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.load.kotlin diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/SignatureBuildingComponents.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/SignatureBuildingComponents.kt new file mode 100644 index 00000000000..eeb2dc8bd9e --- /dev/null +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/SignatureBuildingComponents.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.load.kotlin + +import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.resolve.jvm.JvmClassName +import java.util.* + +inline fun signatures(block: SignatureBuildingComponents.() -> T) = with(SignatureBuildingComponents, block) + +object SignatureBuildingComponents { + fun javaLang(name: String): String = "java/lang/$name" + fun javaUtil(name: String): String = "java/util/$name" + fun javaFunction(name: String): String = "java/util/function/$name" + + fun constructors(vararg signatures: String): Array = signatures.map { "($it)V" }.toTypedArray() + + fun inJavaLang(name: String, vararg signatures: String): Set = inClass(javaLang(name), *signatures) + fun inJavaUtil(name: String, vararg signatures: String): Set = inClass(javaUtil(name), *signatures) + + fun inClass(internalName: String, vararg signatures: String): Set = signatures.mapTo(LinkedHashSet()) { "$internalName.$it" } + fun signature(classId: ClassId, jvmDescriptor: String): String = signature(classId.internalName, jvmDescriptor) + fun signature(internalName: String, jvmDescriptor: String): String = "$internalName.$jvmDescriptor" + + fun jvmDescriptor(name: String, parameters: List, ret: String = "V"): String = + "$name(${parameters.joinToString("") { escapeClassName(it) }})${escapeClassName(internalName = ret)}" + + private fun escapeClassName(internalName: String): String = if (internalName.length > 1) "L$internalName;" else internalName +} + +val ClassId.internalName: String + get() { + return JvmClassName.byClassId(JavaToKotlinClassMap.mapKotlinToJava(asSingleFqName().toUnsafe()) ?: this).internalName + } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt similarity index 80% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt index 98b668ac5ce..9bd443d5d69 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.load.kotlin.header diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java b/core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java similarity index 100% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/constants/ClassLiteralValue.kt b/core/compiler.common/src/org/jetbrains/kotlin/resolve/constants/ClassLiteralValue.kt similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/constants/ClassLiteralValue.kt rename to core/compiler.common/src/org/jetbrains/kotlin/resolve/constants/ClassLiteralValue.kt diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt b/core/compiler.common/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt similarity index 100% rename from core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt rename to core/compiler.common/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt index 208366afdef..45baa80a408 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt @@ -6,7 +6,14 @@ package org.jetbrains.kotlin.builtins.jvm import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.BLACK_LIST_CONSTRUCTOR_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.BLACK_LIST_METHOD_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.DROP_LIST_METHOD_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.MUTABLE_METHOD_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.WHITE_LIST_CONSTRUCTOR_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.WHITE_LIST_METHOD_SIGNATURES +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.isArrayOrPrimitiveArray +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.isSerializableInJava import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.annotations.createDeprecatedAnnotation @@ -20,14 +27,12 @@ import org.jetbrains.kotlin.load.java.components.JavaResolverCache import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents import org.jetbrains.kotlin.load.kotlin.computeJvmDescriptor -import org.jetbrains.kotlin.load.kotlin.signatures +import org.jetbrains.kotlin.load.kotlin.signature import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe -import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.serialization.deserialization.getName @@ -38,7 +43,6 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.LazyWrappedType import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.SmartSet -import java.io.Serializable import java.util.* open class JvmBuiltInsSettings( @@ -323,175 +327,6 @@ open class JvmBuiltInsSettings( private fun ConstructorDescriptor.isTrivialCopyConstructorFor(classDescriptor: ClassDescriptor): Boolean = valueParameters.size == 1 && valueParameters.single().type.constructor.declarationDescriptor?.fqNameUnsafe == classDescriptor.fqNameUnsafe - - companion object { - fun isSerializableInJava(fqName: FqNameUnsafe): Boolean { - if (isArrayOrPrimitiveArray(fqName)) { - return true - } - val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName) ?: return false - val classViaReflection = try { - Class.forName(javaClassId.asSingleFqName().asString()) - } catch (e: ClassNotFoundException) { - return false - } - return Serializable::class.java.isAssignableFrom(classViaReflection) - } - - private fun isArrayOrPrimitiveArray(fqName: FqNameUnsafe): Boolean { - return fqName == StandardNames.FqNames.array || StandardNames.isPrimitiveArray(fqName) - } - - val DROP_LIST_METHOD_SIGNATURES: Set = - SignatureBuildingComponents.inJavaUtil( - "Collection", - "toArray()[Ljava/lang/Object;", "toArray([Ljava/lang/Object;)[Ljava/lang/Object;" - ) + "java/lang/annotation/Annotation.annotationType()Ljava/lang/Class;" - - val BLACK_LIST_METHOD_SIGNATURES: Set = - signatures { - buildPrimitiveValueMethodsSet() + - - inJavaUtil("List", "sort(Ljava/util/Comparator;)V") + - - inJavaLang( - "String", - "codePointAt(I)I", "codePointBefore(I)I", "codePointCount(II)I", "compareToIgnoreCase(Ljava/lang/String;)I", - "concat(Ljava/lang/String;)Ljava/lang/String;", "contains(Ljava/lang/CharSequence;)Z", - "contentEquals(Ljava/lang/CharSequence;)Z", "contentEquals(Ljava/lang/StringBuffer;)Z", - "endsWith(Ljava/lang/String;)Z", "equalsIgnoreCase(Ljava/lang/String;)Z", "getBytes()[B", "getBytes(II[BI)V", - "getBytes(Ljava/lang/String;)[B", "getBytes(Ljava/nio/charset/Charset;)[B", "getChars(II[CI)V", - "indexOf(I)I", "indexOf(II)I", "indexOf(Ljava/lang/String;)I", "indexOf(Ljava/lang/String;I)I", - "intern()Ljava/lang/String;", "isEmpty()Z", "lastIndexOf(I)I", "lastIndexOf(II)I", - "lastIndexOf(Ljava/lang/String;)I", "lastIndexOf(Ljava/lang/String;I)I", "matches(Ljava/lang/String;)Z", - "offsetByCodePoints(II)I", "regionMatches(ILjava/lang/String;II)Z", "regionMatches(ZILjava/lang/String;II)Z", - "replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", "replace(CC)Ljava/lang/String;", - "replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", - "replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;", - "split(Ljava/lang/String;I)[Ljava/lang/String;", "split(Ljava/lang/String;)[Ljava/lang/String;", - "startsWith(Ljava/lang/String;I)Z", "startsWith(Ljava/lang/String;)Z", "substring(II)Ljava/lang/String;", - "substring(I)Ljava/lang/String;", "toCharArray()[C", "toLowerCase()Ljava/lang/String;", - "toLowerCase(Ljava/util/Locale;)Ljava/lang/String;", "toUpperCase()Ljava/lang/String;", - "toUpperCase(Ljava/util/Locale;)Ljava/lang/String;", "trim()Ljava/lang/String;", - "isBlank()Z", "lines()Ljava/util/stream/Stream;", "repeat(I)Ljava/lang/String;" - ) + - - inJavaLang("Double", "isInfinite()Z", "isNaN()Z") + - inJavaLang("Float", "isInfinite()Z", "isNaN()Z") + - - inJavaLang("Enum", "getDeclaringClass()Ljava/lang/Class;", "finalize()V") - } - - private fun buildPrimitiveValueMethodsSet(): Set = - signatures { - listOf(JvmPrimitiveType.BOOLEAN, JvmPrimitiveType.CHAR).flatMapTo(LinkedHashSet()) { - inJavaLang(it.wrapperFqName.shortName().asString(), "${it.javaKeywordName}Value()${it.desc}") - } - } - - val WHITE_LIST_METHOD_SIGNATURES: Set = - signatures { - inJavaLang( - "CharSequence", - "codePoints()Ljava/util/stream/IntStream;", "chars()Ljava/util/stream/IntStream;" - ) + - - inJavaUtil( - "Iterator", - "forEachRemaining(Ljava/util/function/Consumer;)V" - ) + - - inJavaLang( - "Iterable", - "forEach(Ljava/util/function/Consumer;)V", "spliterator()Ljava/util/Spliterator;" - ) + - - inJavaLang( - "Throwable", - "setStackTrace([Ljava/lang/StackTraceElement;)V", "fillInStackTrace()Ljava/lang/Throwable;", - "getLocalizedMessage()Ljava/lang/String;", "printStackTrace()V", "printStackTrace(Ljava/io/PrintStream;)V", - "printStackTrace(Ljava/io/PrintWriter;)V", "getStackTrace()[Ljava/lang/StackTraceElement;", - "initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;", "getSuppressed()[Ljava/lang/Throwable;", - "addSuppressed(Ljava/lang/Throwable;)V" - ) + - - inJavaUtil( - "Collection", - "spliterator()Ljava/util/Spliterator;", "parallelStream()Ljava/util/stream/Stream;", - "stream()Ljava/util/stream/Stream;", "removeIf(Ljava/util/function/Predicate;)Z" - ) + - - inJavaUtil( - "List", - "replaceAll(Ljava/util/function/UnaryOperator;)V" - ) + - - inJavaUtil( - "Map", - "getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - "forEach(Ljava/util/function/BiConsumer;)V", "replaceAll(Ljava/util/function/BiFunction;)V", - "merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", - "computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", - "putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - "replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z", - "replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - "computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", - "compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" - ) - } - - val MUTABLE_METHOD_SIGNATURES: Set = - signatures { - inJavaUtil("Collection", "removeIf(Ljava/util/function/Predicate;)Z") + - - inJavaUtil("List", "replaceAll(Ljava/util/function/UnaryOperator;)V", "sort(Ljava/util/Comparator;)V") + - - inJavaUtil( - "Map", - "computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", - "computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", - "compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", - "merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;", - "putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - "remove(Ljava/lang/Object;Ljava/lang/Object;)Z", "replaceAll(Ljava/util/function/BiFunction;)V", - "replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", - "replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" - ) - } - - val BLACK_LIST_CONSTRUCTOR_SIGNATURES: Set = - signatures { - buildPrimitiveStringConstructorsSet() + - inJavaLang("Float", *constructors("D")) + - inJavaLang( - "String", *constructors( - "[C", "[CII", "[III", "[BIILjava/lang/String;", - "[BIILjava/nio/charset/Charset;", - "[BLjava/lang/String;", - "[BLjava/nio/charset/Charset;", - "[BII", "[B", - "Ljava/lang/StringBuffer;", - "Ljava/lang/StringBuilder;" - ) - ) - } - - val WHITE_LIST_CONSTRUCTOR_SIGNATURES: Set = - signatures { - inJavaLang("Throwable", *constructors("Ljava/lang/String;Ljava/lang/Throwable;ZZ")) - } - - private fun buildPrimitiveStringConstructorsSet(): Set = - signatures { - listOf( - JvmPrimitiveType.BOOLEAN, JvmPrimitiveType.BYTE, JvmPrimitiveType.DOUBLE, JvmPrimitiveType.FLOAT, - JvmPrimitiveType.BYTE, JvmPrimitiveType.INT, JvmPrimitiveType.LONG, JvmPrimitiveType.SHORT - ).flatMapTo(LinkedHashSet()) { - // java/lang/.(Ljava/lang/String;)V - inJavaLang(it.wrapperFqName.shortName().asString(), *constructors("Ljava/lang/String;")) - } - } - } } private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager("FallbackBuiltIns")) { diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/signatureEnhancement.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/signatureEnhancement.kt index 09c11e41d60..fb966d558ea 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/signatureEnhancement.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/signatureEnhancement.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.load.java.lazy.copyWithNewDefaultTypeQualifiers import org.jetbrains.kotlin.load.java.lazy.descriptors.isJavaField import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents import org.jetbrains.kotlin.load.kotlin.computeJvmDescriptor +import org.jetbrains.kotlin.load.kotlin.signature import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.deprecation.DEPRECATED_FUNCTION_KEY diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt index ca43a6c765d..392f3629d4a 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt @@ -46,12 +46,6 @@ fun KotlinType.hasEnhancedNullability(): Boolean = fun TypeSystemCommonBackendContext.hasEnhancedNullability(type: KotlinTypeMarker): Boolean = type.hasAnnotation(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION) -enum class TypeComponentPosition { - FLEXIBLE_LOWER, - FLEXIBLE_UPPER, - INFLEXIBLE -} - class JavaTypeEnhancement(private val javaResolverSettings: JavaResolverSettings) { private open class Result(open val type: KotlinType, val subtreeSize: Int, val wereChanges: Boolean) { diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/PackagePartProvider.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/PackagePartProvider.kt index a6e2647a782..2502123a181 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/PackagePartProvider.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/PackagePartProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuilding.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuilding.kt deleted file mode 100644 index 8e865688c74..00000000000 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuilding.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.load.kotlin - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.name.ClassId -import java.util.* - -inline fun signatures(block: SignatureBuildingComponents.() -> T) = with(SignatureBuildingComponents, block) - -object SignatureBuildingComponents { - fun javaLang(name: String) = "java/lang/$name" - fun javaUtil(name: String) = "java/util/$name" - fun javaFunction(name: String) = "java/util/function/$name" - - fun constructors(vararg signatures: String) = signatures.map { "($it)V" }.toTypedArray() - - fun inJavaLang(name: String, vararg signatures: String) = inClass(javaLang(name), *signatures) - fun inJavaUtil(name: String, vararg signatures: String) = inClass(javaUtil(name), *signatures) - - fun inClass(internalName: String, vararg signatures: String) = signatures.mapTo(LinkedHashSet()) { "$internalName.$it" } - - fun signature(classDescriptor: ClassDescriptor, jvmDescriptor: String) = signature(classDescriptor.internalName, jvmDescriptor) - fun signature(classId: ClassId, jvmDescriptor: String) = signature(classId.internalName, jvmDescriptor) - fun signature(internalName: String, jvmDescriptor: String) = "$internalName.$jvmDescriptor" - - fun jvmDescriptor(name: String, parameters: List, ret: String = "V") = - "$name(${parameters.joinToString("") { escapeClassName(it) }})${escapeClassName(internalName = ret)}" - - private fun escapeClassName(internalName: String) = if (internalName.length > 1) "L$internalName;" else internalName -} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuildingUtils.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuildingUtils.kt new file mode 100644 index 00000000000..aa7ee091da0 --- /dev/null +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureBuildingUtils.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.load.kotlin + +import org.jetbrains.kotlin.descriptors.ClassDescriptor + +fun SignatureBuildingComponents.signature(classDescriptor: ClassDescriptor, jvmDescriptor: String): String = + signature(classDescriptor.internalName, jvmDescriptor) diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureMapping.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureMapping.kt index dce0b2278bd..40b23de0b32 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureMapping.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/methodSignatureMapping.kt @@ -5,13 +5,12 @@ package org.jetbrains.kotlin.load.kotlin -import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.PrimitiveType +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature import org.jetbrains.kotlin.load.java.isFromJavaOrBuiltins -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe @@ -84,11 +83,6 @@ internal val ClassDescriptor.internalName: String return computeInternalName(this) } -val ClassId.internalName: String - get() { - return JvmClassName.byClassId(JavaToKotlinClassMap.mapKotlinToJava(asSingleFqName().toUnsafe()) ?: this).internalName - } - private fun StringBuilder.appendErasedType(type: KotlinType) { append(type.mapToJvmType()) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt index 5c60cd48d21..cea25fdd958 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt @@ -11,7 +11,7 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSettings +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo @@ -178,7 +178,7 @@ object ByDescriptorIndexer : DecompiledTextIndexer { if (descriptor !is ClassDescriptor) return null val classFqName = descriptor.fqNameUnsafe - if (!JvmBuiltInsSettings.isSerializableInJava(classFqName)) return null + if (!JvmBuiltInsSignatures.isSerializableInJava(classFqName)) return null val builtInDescriptor = DefaultBuiltIns.Instance.builtInsModule.resolveTopLevelClass(classFqName.toSafe(), NoLookupLocation.FROM_IDE) diff --git a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractPositionManagerTest.java b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractPositionManagerTest.java index 800089f3fbc..0f5b8c04fee 100644 --- a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractPositionManagerTest.java +++ b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractPositionManagerTest.java @@ -40,7 +40,6 @@ import org.jetbrains.kotlin.idea.debugger.test.mock.SmartMockReferenceTypeContex import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase; import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseKt; import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor; -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase; import org.jetbrains.kotlin.load.kotlin.PackagePartProvider; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.test.ConfigurationKind;