diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt index cd5dd43e202..43a966f9737 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt @@ -44,7 +44,6 @@ import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.DescriptorSerializer -import org.jetbrains.kotlin.utils.recursePostOrder import java.io.ByteArrayOutputStream import java.io.DataOutputStream import java.io.File @@ -99,9 +98,7 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { val moduleDescriptor = resolver.descriptorForModule(builtInModule) - // We don't use FileUtil because it spawns JNA initialization, which fails because we don't have (and don't want to have) its - // native libraries in the compiler jar (libjnidispatch.so / jnidispatch.dll / ...) - destDir.recursePostOrder { it.delete() } + destDir.deleteRecursively() if (!destDir.mkdirs()) { System.err.println("Could not make directories: " + destDir) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt index d1effdbeee5..2dc6ad8bd73 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/PluginCliParser.kt @@ -20,7 +20,6 @@ import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.compiler.plugin.* import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.utils.valuesToMap import java.io.File import java.net.URL import java.net.URLClassLoader @@ -60,7 +59,7 @@ public object PluginCliParser { commandLineProcessors.addAll(BundledCompilerPlugins.commandLineProcessors) for (processor in commandLineProcessors) { - val declaredOptions = processor.pluginOptions.valuesToMap { it.name } + val declaredOptions = processor.pluginOptions.toMapBy { it.name } val optionsToValues = MultiMap() for (optionValue in optionValuesByPlugin[processor.pluginId].orEmpty()) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index d86bc6b9abc..23ace291778 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.resolve.constants.ConstantValueFactory import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.utils.keysToMapExceptNulls -import org.jetbrains.kotlin.utils.valuesToMap fun LazyJavaResolverContext.resolveAnnotation(annotation: JavaAnnotation): LazyJavaAnnotationDescriptor? { val classId = annotation.getClassId() @@ -78,7 +77,7 @@ class LazyJavaAnnotationDescriptor( val constructors = getAnnotationClass().getConstructors() if (constructors.isEmpty()) return mapOf() - val nameToArg = javaAnnotation.getArguments().valuesToMap { it.name } + val nameToArg = javaAnnotation.getArguments().toMapBy { it.name } return constructors.first().getValueParameters().keysToMapExceptNulls { valueParameter -> var javaAnnotationArgument = nameToArg[valueParameter.getName()] diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index ff089ff12bd..ce5ddfb6fc5 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -604,11 +604,11 @@ public class LazyJavaClassMemberScope( } private val nestedClassIndex = c.storageManager.createLazyValue { - jClass.getInnerClasses().valuesToMap { c -> c.getName() } + jClass.innerClasses.toMapBy { c -> c.name } } private val enumEntryIndex = c.storageManager.createLazyValue { - jClass.getFields().filter { it.isEnumEntry() }.valuesToMap { f -> f.getName() } + jClass.fields.filter { it.isEnumEntry }.toMapBy { f -> f.name } } private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/MemberIndex.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/MemberIndex.kt index ec0b18739af..db330d93ca6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/MemberIndex.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/MemberIndex.kt @@ -16,12 +16,14 @@ package org.jetbrains.kotlin.load.java.lazy.descriptors -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils +import org.jetbrains.kotlin.load.java.structure.JavaClass +import org.jetbrains.kotlin.load.java.structure.JavaField +import org.jetbrains.kotlin.load.java.structure.JavaMember +import org.jetbrains.kotlin.load.java.structure.JavaMethod import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.utils.valuesToMap -import java.util.HashSet +import org.jetbrains.kotlin.name.Name +import java.util.* interface MemberIndex { fun findMethodsByName(name: Name): Collection @@ -55,8 +57,8 @@ open class ClassMemberIndex(val jClass: JavaClass, val memberFilter: (JavaMember memberFilter(m) && !DescriptorResolverUtils.isObjectMethodInInterface(m) } - private val methods = jClass.getMethods().asSequence().filter(methodFilter).groupBy { m -> m.getName() } - private val fields = jClass.getFields().asSequence().filter(memberFilter).valuesToMap { m -> m.getName() } + private val methods = jClass.methods.asSequence().filter(methodFilter).groupBy { m -> m.name } + private val fields = jClass.fields.asSequence().filter(memberFilter).toMapBy { m -> m.name } override fun findMethodsByName(name: Name): Collection = methods[name] ?: listOf() override fun getMethodNames(nameFilter: (Name) -> Boolean): Collection = diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/HammingComparator.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/HammingComparator.kt deleted file mode 100644 index 468f209f5e1..00000000000 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/HammingComparator.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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. - */ - -package org.jetbrains.kotlin.utils - -import java.util.* - -class HammingComparator(private val referenceString: String, private val asString: T.() -> String) : Comparator { - private fun countDifference(s1: String): Int { - return (0..Math.min(s1.lastIndex, referenceString.lastIndex)).count { s1[it] != referenceString[it] } - } - - override fun compare(lookupItem1: T, lookupItem2: T): Int { - return countDifference(lookupItem1.asString()) - countDifference(lookupItem2.asString()) - } -} diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt index 536bd89e706..d2f25a0798f 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt @@ -17,8 +17,7 @@ package org.jetbrains.kotlin.utils.addToStdlib import java.lang.reflect.Modifier -import java.util.Collections -import java.util.NoSuchElementException +import java.util.* import java.util.concurrent.ConcurrentHashMap public fun T?.singletonOrEmptyList(): List = if (this != null) Collections.singletonList(this) else Collections.emptyList() diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index db15746843a..cc44f301fc7 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -16,52 +16,10 @@ package org.jetbrains.kotlin.utils -import java.util.ArrayList -import java.util.HashMap -import java.util.HashSet -import java.util.LinkedHashMap - -public fun Sequence.valuesToMap(key: (V) -> K): Map { - val map = LinkedHashMap() - for (v in this) { - map[key(v)] = v - } - return map -} - -public fun Sequence.keysToMap(value: (K) -> V): Map { - val map = LinkedHashMap() - for (k in this) { - map[k] = value(k) - } - return map -} - -public fun Sequence.keysToMapExceptNulls(value: (K) -> V?): Map { - val map = LinkedHashMap() - for (k in this) { - val v = value(k) - if (v != null) { - map[k] = v - } - } - return map -} - -public fun Iterable.valuesToMap(key: (V) -> K): Map { - val map = LinkedHashMap() - for (v in this) { - map[key(v)] = v - } - return map -} +import java.util.* public fun Iterable.keysToMap(value: (K) -> V): Map { - val map = LinkedHashMap() - for (k in this) { - map[k] = value(k) - } - return map + return toMapBy({ it }, value) } public fun Iterable.keysToMapExceptNulls(value: (K) -> V?): Map { @@ -87,7 +45,7 @@ public inline fun > C.ifEmpty(body: () -> C): C = if (isEmpt public inline fun Array.ifEmpty(body: () -> Array): Array = if (isEmpty()) body() else this -public fun emptyOrSingletonList(item: T?): List = if (item == null) listOf() else listOf(item) +public fun emptyOrSingletonList(item: T?): List = listOfNotNull(item) public fun MutableCollection.addIfNotNull(t: T?) { if (t != null) add(t) @@ -102,7 +60,7 @@ public fun newHashSetWithExpectedSize(expectedSize: Int): HashSet { } public fun Collection.toReadOnlyList(): List = - when (size()) { + when (size) { 0 -> emptyList() 1 -> listOf(first()) else -> ArrayList(this) @@ -110,8 +68,3 @@ public fun Collection.toReadOnlyList(): List = public fun T?.singletonOrEmptyList(): List = if (this != null) listOf(this) else emptyList() - -public fun MutableList.removeLast(condition: (T) -> Boolean): T? { - val index = indexOfLast(condition) - return if (index >= 0) removeAt(index) else null -} diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/fileUtils.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/fileUtils.kt deleted file mode 100644 index 241334da31a..00000000000 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/fileUtils.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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. - */ - -package org.jetbrains.kotlin.utils - -import java.io.File - -// Similar to kotlin.io.recurse, but processes each directory after its children -public fun File.recursePostOrder(block: (File) -> Unit): Unit { - val children = this.listFiles() - if (children != null) { - for (child in children) { - child.recursePostOrder(block) - } - } - block(this) -} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameUnresolvedReferenceFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameUnresolvedReferenceFix.kt index 8d84f3b0015..1a8520375bd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameUnresolvedReferenceFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameUnresolvedReferenceFix.kt @@ -39,7 +39,6 @@ import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf -import org.jetbrains.kotlin.utils.HammingComparator import org.jetbrains.kotlin.utils.ifEmpty import java.util.* @@ -133,3 +132,13 @@ class RenameUnresolvedReferenceFix(element: KtNameReferenceExpression): KotlinQu TemplateManager.getInstance(project).startTemplate(editor, builder.buildInlineTemplate()) } } + +private class HammingComparator(private val referenceString: String, private val asString: T.() -> String) : Comparator { + private fun countDifference(s1: String): Int { + return (0..Math.min(s1.lastIndex, referenceString.lastIndex)).count { s1[it] != referenceString[it] } + } + + override fun compare(lookupItem1: T, lookupItem2: T): Int { + return countDifference(lookupItem1.asString()) - countDifference(lookupItem2.asString()) + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt index 3d29917a4ac..c44e1336e38 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt @@ -36,11 +36,11 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor -import org.jetbrains.kotlin.idea.refactoring.j2k import org.jetbrains.kotlin.idea.project.ProjectStructureUtil import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor.Kind import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallableDefinitionUsage import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinCallerUsage +import org.jetbrains.kotlin.idea.refactoring.j2k import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.* @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmOverloadsAnnotation import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList import org.jetbrains.kotlin.utils.keysToMap -import org.jetbrains.kotlin.utils.removeLast import java.util.* public open class KotlinChangeInfo( @@ -335,6 +334,11 @@ public open class KotlinChangeInfo( } } + private fun MutableList.removeLast(condition: (T) -> Boolean): T? { + val index = indexOfLast(condition) + return if (index >= 0) removeAt(index) else null + } + public fun getOrCreateJavaChangeInfos(): List? { fun initCurrentSignatures(currentPsiMethods: List): List { val parameterInfoToPsi = methodDescriptor.original.parameters.zip(originalParameters).toMap()