Skip to content

Commit 54d5e2e

Browse files
grechkovladSpace Team
authored and
Space Team
committed
Compile all the JVM builtins as a part of stdlib
After proper changes in the compiler, we are ready to get rid of the hacky step of compilation no-bytecode builtins with K2Metadata and instead compile the full stdlib source set by K2JVM compiler. The build scripts updated properly: compilation no longer relies on jar produced by `core/builtins` module and instead uses a full stdlib source set. Recently introduced `-Xcompile-builtins-as-part-of-stdlib` flag is used to enable the new compiler behavior. The stdlib sources fixed properly: `actual` modifiers added whenever required, diagnostics suppressed. Test data updated properly, as JVM methods enhancements are no longer considered as overrides. ^KT-68154: Fixed (cherry picked from commit 6ef69b9)
1 parent ca3adab commit 54d5e2e

File tree

107 files changed

+825
-727
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+825
-727
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
KtNameReferenceExpression(174,180): 'stream'
22
KtSimpleNameReference:
3-
(in kotlin.collections.Collection) {psi: ClsMethodImpl}override fun stream(): java.util.stream.Stream<E>
3+
(in kotlin.collections.Collection) {psi: ClsMethodImpl} fun stream(): java.util.stream.Stream<E>

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ val ordinal: kotlin.Int
1515

1616
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1717

18-
override fun finalize()
18+
fun finalize()
1919

2020
companion object
2121

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ val ordinal: kotlin.Int
1515

1616
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1717

18-
override fun finalize()
18+
fun finalize()
1919

2020
companion object
2121

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ KaNamedFunctionSymbol:
564564
isInfix: false
565565
isInline: false
566566
isOperator: false
567-
isOverride: true
567+
isOverride: false
568568
isStatic: false
569569
isSuspend: false
570570
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ KaNamedFunctionSymbol:
564564
isInfix: false
565565
isInline: false
566566
isOperator: false
567-
isOverride: true
567+
isOverride: false
568568
isStatic: false
569569
isSuspend: false
570570
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ KaNamedFunctionSymbol:
708708
isInfix: false
709709
isInline: false
710710
isOperator: false
711-
isOverride: true
711+
isOverride: false
712712
isStatic: false
713713
isSuspend: false
714714
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ KaNamedFunctionSymbol:
708708
isInfix: false
709709
isInline: false
710710
isOperator: false
711-
isOverride: true
711+
isOverride: false
712712
isStatic: false
713713
isSuspend: false
714714
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ KaNamedFunctionSymbol:
708708
isInfix: false
709709
isInline: false
710710
isOperator: false
711-
isOverride: true
711+
isOverride: false
712712
isStatic: false
713713
isSuspend: false
714714
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ KaNamedFunctionSymbol:
708708
isInfix: false
709709
isInline: false
710710
isOperator: false
711-
isOverride: true
711+
isOverride: false
712712
isStatic: false
713713
isSuspend: false
714714
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ val ordinal: kotlin.Int
1717

1818
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1919

20-
override fun finalize()
20+
fun finalize()
2121

2222
companion object
2323

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ val ordinal: kotlin.Int
1717

1818
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1919

20-
override fun finalize()
20+
fun finalize()
2121

2222
companion object
2323

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ KaNamedFunctionSymbol:
666666
isInfix: false
667667
isInline: false
668668
isOperator: false
669-
isOverride: true
669+
isOverride: false
670670
isStatic: false
671671
isSuspend: false
672672
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ KaNamedFunctionSymbol:
666666
isInfix: false
667667
isInline: false
668668
isOperator: false
669-
isOverride: true
669+
isOverride: false
670670
isStatic: false
671671
isSuspend: false
672672
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ val ordinal: kotlin.Int
1919

2020
override fun getDeclaringClass(): java.lang.Class<test.E!>!
2121

22-
override fun finalize()
22+
fun finalize()
2323

2424
companion object
2525

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ KaNamedFunctionSymbol:
768768
isInfix: false
769769
isInline: false
770770
isOperator: false
771-
isOverride: true
771+
isOverride: false
772772
isStatic: false
773773
isSuspend: false
774774
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ KaNamedFunctionSymbol:
768768
isInfix: false
769769
isInline: false
770770
isOperator: false
771-
isOverride: true
771+
isOverride: false
772772
isStatic: false
773773
isSuspend: false
774774
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ val ordinal: kotlin.Int
1717

1818
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1919

20-
override fun finalize()
20+
fun finalize()
2121

2222
companion object
2323

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.standalone.fir.pretty.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ val ordinal: kotlin.Int
1717

1818
override fun getDeclaringClass(): java.lang.Class<test.E!>!
1919

20-
override fun finalize()
20+
fun finalize()
2121

2222
companion object
2323

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ KaNamedFunctionSymbol:
666666
isInfix: false
667667
isInline: false
668668
isOperator: false
669-
isOverride: true
669+
isOverride: false
670670
isStatic: false
671671
isSuspend: false
672672
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ KaNamedFunctionSymbol:
666666
isInfix: false
667667
isInline: false
668668
isOperator: false
669-
isOverride: true
669+
isOverride: false
670670
isStatic: false
671671
isSuspend: false
672672
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/enumEntry.standalone.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ scopes:
583583
isInfix: false
584584
isInline: false
585585
isOperator: false
586-
isOverride: true
586+
isOverride: false
587587
isStatic: false
588588
isSuspend: false
589589
isTailRec: false

analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/enumEntry.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ scopes:
583583
isInfix: false
584584
isInline: false
585585
isOperator: false
586-
isOverride: true
586+
isOverride: false
587587
isStatic: false
588588
isSuspend: false
589589
isTailRec: false

compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/BuiltinsTestUtils.kt

+8-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.intellij.util.containers.ContainerUtil
1010
import org.jetbrains.kotlin.builtins.StandardNames
1111
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
1212
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
13+
import org.jetbrains.kotlin.name.StandardClassIds
1314
import org.jetbrains.kotlin.resolve.lazy.createResolveSessionForFiles
1415
import org.jetbrains.kotlin.test.KotlinTestUtils
1516
import java.io.File
@@ -19,11 +20,14 @@ object BuiltinsTestUtils {
1920
fun compileBuiltinsModule(environment: KotlinCoreEnvironment): ModuleDescriptor {
2021
val files = KotlinTestUtils.loadToKtFiles(
2122
environment, ContainerUtil.concat<File>(
22-
allFilesUnder("libraries/stdlib/jvm/builtins"),
23-
allFilesUnder("core/builtins/build/src/common"),
24-
allFilesUnder("core/builtins/build/src/reflect"),
23+
allFilesUnder("libraries/stdlib/jvm/"),
24+
allFilesUnder("libraries/stdlib/src/")
2525
)
26-
)
26+
).filter {
27+
it.annotationEntries.any { annotation ->
28+
annotation.shortName == StandardClassIds.Annotations.JvmBuiltin.shortClassName
29+
}
30+
}
2731
return createResolveSessionForFiles(environment.project, files, false).moduleDescriptor
2832
}
2933

generators/builtins/arrays.kt

+22-15
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,13 @@ abstract class GenerateArrays(val writer: PrintWriter, val primitiveArrays: Bool
8282
type = arrayTypeName
8383
}
8484
}
85-
classBody("""
85+
classBody(
86+
"""
8687
private var index = 0
8788
override fun hasNext() = index < array.size
8889
override fun next${kind?.capitalized ?: ""}() = if (index < array.size) array[index++] else throw NoSuchElementException("${'$'}index")
89-
""".trimIndent())
90+
""".trimIndent()
91+
)
9092
}
9193
}
9294

@@ -209,22 +211,25 @@ abstract class GenerateArrays(val writer: PrintWriter, val primitiveArrays: Bool
209211

210212

211213
class GenerateCommonArrays(writer: PrintWriter, primitiveArrays: Boolean) : GenerateArrays(writer, primitiveArrays) {
212-
override fun FileBuilder.modifyGeneratedFile() {
213-
import("kotlin.internal.ActualizeByJvmBuiltinProvider")
214-
}
215-
216214
override fun arrayBuilder(kind: PrimitiveType?): ArrayBuilder = object : ArrayBuilder(kind) {
217215
override fun ClassBuilder.modifyGeneratedClass() {
218-
annotations += "ActualizeByJvmBuiltinProvider"
219216
expectActual = ExpectActualModifier.Expect
220217
}
221218
}
222219
}
223220

224221
class GenerateJvmArrays(writer: PrintWriter, primitiveArrays: Boolean) : GenerateArrays(writer, primitiveArrays) {
222+
override fun FileBuilder.modifyGeneratedFile() {
223+
annotate("kotlin.internal.JvmBuiltin")
224+
annotate("kotlin.internal.SuppressBytecodeGeneration")
225+
suppress("NON_ABSTRACT_FUNCTION_WITH_NO_BODY")
226+
suppress("PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED")
227+
suppress("MUST_BE_INITIALIZED_OR_BE_ABSTRACT")
228+
}
229+
225230
override fun arrayBuilder(kind: PrimitiveType?): ArrayBuilder = object : ArrayBuilder(kind) {
226231
override fun ClassBuilder.modifyGeneratedClass() {
227-
expectActual = ExpectActualModifier.Unspecified
232+
expectActual = ExpectActualModifier.Actual
228233
}
229234
}
230235
}
@@ -292,7 +297,8 @@ class GenerateWasmArrays(writer: PrintWriter, primitiveArrays: Boolean) : Genera
292297
name = "storage"
293298
type = storageArrayType
294299
}
295-
classBody("""
300+
classBody(
301+
"""
296302
init {
297303
if (size < 0) throw IllegalArgumentException("Negative array size")
298304
storage = $storageArrayType(size)
@@ -301,7 +307,8 @@ class GenerateWasmArrays(writer: PrintWriter, primitiveArrays: Boolean) : Genera
301307
@WasmPrimitiveConstructor
302308
@Suppress("PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED")
303309
internal constructor(storage: $storageArrayType)
304-
""".trimIndent())
310+
""".trimIndent()
311+
)
305312
}
306313

307314
override fun SecondaryConstructorBuilder.modifySecondaryConstructor() {
@@ -314,12 +321,12 @@ class GenerateWasmArrays(writer: PrintWriter, primitiveArrays: Boolean) : Genera
314321
"""
315322
rangeCheck(index, storage.len())
316323
${
317-
when (kind) {
318-
null -> "@Suppress(\"UNCHECKED_CAST\") return storage.get(index) as T"
319-
PrimitiveType.BOOLEAN -> "return storage.get(index).reinterpretAsInt().reinterpretAsBoolean()"
320-
else -> "return storage.get(index)"
321-
}
324+
when (kind) {
325+
null -> "@Suppress(\"UNCHECKED_CAST\") return storage.get(index) as T"
326+
PrimitiveType.BOOLEAN -> "return storage.get(index).reinterpretAsInt().reinterpretAsBoolean()"
327+
else -> "return storage.get(index)"
322328
}
329+
}
323330
""".trimIndent().setAsBlockBody()
324331
}
325332

generators/builtins/generateBuiltIns.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fun assertExists(file: File) {
2424
}
2525

2626
val BUILT_INS_COMMON_DIR = File("libraries/stdlib/src/kotlin")
27-
val BUILT_INS_NATIVE_DIR_JVM = File("libraries/stdlib/jvm/builtins/")
27+
val BUILT_INS_NATIVE_DIR_JVM = File("libraries/stdlib/jvm/builtins")
2828
val BUILT_INS_NATIVE_DIR_JS = File("libraries/stdlib/js/builtins/")
2929
val BUILT_INS_NATIVE_DIR_WASM = File("libraries/stdlib/wasm/builtins/")
3030
val BUILT_INS_NATIVE_DIR_NATIVE = File("kotlin-native/runtime/src/main/kotlin/")
@@ -36,7 +36,7 @@ interface BuiltInsGenerator {
3636
fun generate()
3737
}
3838

39-
abstract class BuiltInsSourceGenerator(val out: PrintWriter) : BuiltInsGenerator {
39+
abstract class BuiltInsSourceGenerator(val out: PrintWriter, private val annotateAsBuiltinWithBytecode: Boolean = false) : BuiltInsGenerator {
4040
protected abstract fun generateBody(): Unit
4141

4242
protected open fun getPackage(): String = "kotlin"
@@ -55,6 +55,9 @@ abstract class BuiltInsSourceGenerator(val out: PrintWriter) : BuiltInsGenerator
5555
out.println("@file:kotlin.jvm.JvmName(\"$name\")")
5656
out.println("@file:kotlin.jvm.JvmMultifileClass")
5757
}
58+
if (annotateAsBuiltinWithBytecode) {
59+
out.println("@file:kotlin.internal.JvmBuiltin")
60+
}
5861
out.print("package ${getPackage()}")
5962
out.println()
6063
out.println()

generators/builtins/iterators.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.generators.builtins.PrimitiveType
2020
import org.jetbrains.kotlin.generators.builtins.generateBuiltIns.*
2121
import java.io.PrintWriter
2222

23-
class GenerateIterators(out: PrintWriter) : BuiltInsSourceGenerator(out) {
23+
class GenerateIterators(out: PrintWriter) : BuiltInsSourceGenerator(out, annotateAsBuiltinWithBytecode = true) {
2424
override fun getPackage() = "kotlin.collections"
2525
override fun generateBody() {
2626
for (kind in PrimitiveType.entries) {

0 commit comments

Comments
 (0)