diff --git a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt index 07e6a2d723c..f75714ba49c 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt @@ -22,9 +22,9 @@ import org.jetbrains.kotlin.metadata.deserialization.NameResolver import org.jetbrains.kotlin.metadata.java.JavaClassProtoBuf import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf +import org.jetbrains.kotlin.metadata.serialization.Interner import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.serialization.deserialization.getClassId -import org.jetbrains.kotlin.utils.Interner import java.util.* /** This file is generated by org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufCompare. DO NOT MODIFY MANUALLY */ diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 3574ac60924..b9413298eca 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.codegen.binding.CalculatedClosure; import org.jetbrains.kotlin.codegen.context.CodegenContext; import org.jetbrains.kotlin.codegen.intrinsics.HashCode; import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods; -import org.jetbrains.kotlin.codegen.serialization.JvmStringTable; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; import org.jetbrains.kotlin.config.JvmTarget; @@ -27,6 +26,7 @@ import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.load.java.JavaVisibilities; import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.metadata.jvm.deserialization.BitEncoding; +import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.protobuf.MessageLite; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt index 937133577de..5878edfcddb 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.codegen.ClassBuilder import org.jetbrains.kotlin.codegen.StackValue import org.jetbrains.kotlin.codegen.coroutines.COROUTINE_IMPL_ASM_TYPE import org.jetbrains.kotlin.codegen.serialization.JvmCodegenStringTable -import org.jetbrains.kotlin.codegen.serialization.JvmStringTable import org.jetbrains.kotlin.codegen.writeKotlinMetadata import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass @@ -30,6 +29,7 @@ import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil +import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin.Companion.NO_ORIGIN diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmCodegenStringTable.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmCodegenStringTable.kt index 77d1afa4e21..894f8526a69 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmCodegenStringTable.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmCodegenStringTable.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmNameResolver +import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.DescriptorAwareStringTable diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorAwareStringTable.kt similarity index 50% rename from compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.kt rename to compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorAwareStringTable.kt index 90c76b24784..ae9d90e7fe7 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorAwareStringTable.kt @@ -1,37 +1,15 @@ /* - * 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 2000-2018 JetBrains s.r.o. 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.serialization import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters +import org.jetbrains.kotlin.metadata.serialization.StringTable import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.types.ErrorUtils -import java.io.OutputStream - -interface StringTable { - fun getStringIndex(string: String): Int - - /** - * @param className the fully qualified name of some class in the format: `org/foo/bar/Test.Inner` - */ - fun getQualifiedClassNameIndex(className: String, isLocal: Boolean): Int - - fun serializeTo(output: OutputStream) -} interface DescriptorAwareStringTable : StringTable { fun getFqNameIndex(descriptor: ClassifierDescriptorWithTypeParameters): Int { diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index f7aadaba2a3..7da2def49f7 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -13,6 +13,10 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags +import org.jetbrains.kotlin.metadata.serialization.Interner +import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable +import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable +import org.jetbrains.kotlin.metadata.serialization.StringTable import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite @@ -30,7 +34,6 @@ import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags import org.jetbrains.kotlin.serialization.deserialization.descriptors.VersionRequirement import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.contains -import org.jetbrains.kotlin.utils.Interner import java.io.ByteArrayOutputStream import java.util.* diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTableImpl.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTableImpl.kt index 3d8a3036a90..43f6153c5bd 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTableImpl.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTableImpl.kt @@ -18,9 +18,9 @@ package org.jetbrains.kotlin.serialization import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf.QualifiedNameTable.QualifiedName +import org.jetbrains.kotlin.metadata.serialization.Interner import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.utils.Interner import java.io.OutputStream open class StringTableImpl : DescriptorAwareStringTable { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmStringTable.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/serialization/JvmStringTable.kt similarity index 85% rename from compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmStringTable.kt rename to core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/serialization/JvmStringTable.kt index 8283e345852..ee207e51ef8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmStringTable.kt +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/serialization/JvmStringTable.kt @@ -1,25 +1,14 @@ /* - * 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 2000-2018 JetBrains s.r.o. 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.codegen.serialization +package org.jetbrains.kotlin.metadata.jvm.serialization import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.StringTableTypes.Record import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmNameResolver -import org.jetbrains.kotlin.serialization.StringTable +import org.jetbrains.kotlin.metadata.serialization.StringTable import java.io.OutputStream // TODO: optimize by reordering records to minimize storage of 'range' fields diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/Interner.kt similarity index 55% rename from compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt rename to core/metadata/src/org/jetbrains/kotlin/metadata/serialization/Interner.kt index eb11f9a199b..986ec41f5d6 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/Interner.kt @@ -1,20 +1,9 @@ /* - * 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 2000-2018 JetBrains s.r.o. 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.utils +package org.jetbrains.kotlin.metadata.serialization class Interner(private val parent: Interner? = null) { private val firstIndex: Int = parent?.run { interned.size + firstIndex } ?: 0 diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/MutableTable.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/MutableTable.kt similarity index 73% rename from compiler/serialization/src/org/jetbrains/kotlin/serialization/MutableTable.kt rename to core/metadata/src/org/jetbrains/kotlin/metadata/serialization/MutableTable.kt index ca96572a4f0..424a7294ed2 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/MutableTable.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/MutableTable.kt @@ -1,35 +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. + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. */ @file:Suppress("FINITE_BOUNDS_VIOLATION_IN_JAVA") -package org.jetbrains.kotlin.serialization +package org.jetbrains.kotlin.metadata.serialization import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.protobuf.GeneratedMessageLite -import org.jetbrains.kotlin.utils.Interner -import java.util.* private class TableElementWrapper>(val builder: Element) { // If you'll try to optimize it using structured equals/hashCode, pay attention to extensions present in proto messages private val bytes: ByteArray = builder.build().toByteArray() - private val hashCode: Int = Arrays.hashCode(bytes) + private val hashCode: Int = bytes.contentHashCode() override fun hashCode() = hashCode - override fun equals(other: Any?) = other is TableElementWrapper<*> && Arrays.equals(bytes, other.bytes) + override fun equals(other: Any?) = other is TableElementWrapper<*> && bytes.contentEquals(other.bytes) } abstract class MutableTable diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/StringTable.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/StringTable.kt new file mode 100644 index 00000000000..d1a42df393d --- /dev/null +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/serialization/StringTable.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. 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.metadata.serialization + +import java.io.OutputStream + +interface StringTable { + fun getStringIndex(string: String): Int + + /** + * @param className the fully qualified name of some class in the format: `org/foo/bar/Test.Inner` + */ + fun getQualifiedClassNameIndex(className: String, isLocal: Boolean): Int + + fun serializeTo(output: OutputStream) +} diff --git a/generators/tests/org/jetbrains/kotlin/generators/protobuf/GenerateProtoBufCompare.kt b/generators/tests/org/jetbrains/kotlin/generators/protobuf/GenerateProtoBufCompare.kt index 51b32790f57..a0aa227d9bf 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/protobuf/GenerateProtoBufCompare.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/protobuf/GenerateProtoBufCompare.kt @@ -86,9 +86,9 @@ class GenerateProtoBufCompare { p.println("import org.jetbrains.kotlin.metadata.java.JavaClassProtoBuf") p.println("import org.jetbrains.kotlin.metadata.js.JsProtoBuf") p.println("import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf") + p.println("import org.jetbrains.kotlin.metadata.serialization.Interner") p.println("import org.jetbrains.kotlin.name.ClassId") p.println("import org.jetbrains.kotlin.serialization.deserialization.getClassId") - p.println("import org.jetbrains.kotlin.utils.Interner") p.println("import java.util.*") p.println() p.println("/** This file is generated by org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufCompare. DO NOT MODIFY MANUALLY */")