Sort sealed class inheritors to ensure reproducible builds with IC

without this sorting the inheritors field in the metadata may depend on
whether some inheritors are compiled in the IC round or not.
This commit is contained in:
Ilya Chernikov
2022-03-25 18:49:14 +01:00
committed by teamcity
parent 53bc593062
commit 5d6e2b57a7
12 changed files with 71 additions and 70 deletions
@@ -36,7 +36,7 @@ fun FirRegularClass.getSealedClassInheritors(session: FirSession): List<ClassId>
@OptIn(SealedClassInheritorsProviderInternals::class)
fun FirRegularClass.setSealedClassInheritors(inheritors: List<ClassId>) {
require(this.isSealed)
sealedInheritorsAttr = inheritors
sealedInheritorsAttr = inheritors.sortedBy { it.asFqNameString() }
}
private object SealedClassInheritorsKey : FirDeclarationDataKey()
@@ -20,8 +20,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirSourceElement modality:SEALED visibility:public superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
CLASS CLASS name:FirLightSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
CLASS CLASS name:FirPsiSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirSourceElement
CONSTRUCTOR visibility:protected <> () returnType:<root>.FirSourceElement [primary]
BLOCK_BODY
@@ -372,8 +372,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirModifier modality:SEALED visibility:internal superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.ASTNode>]
CLASS CLASS name:FirLightModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.LighterASTNode>]
CLASS CLASS name:FirPsiModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.ASTNode>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirModifier<Node of <root>.FirModifier>
TYPE_PARAMETER name:Node index:0 variance: superTypes:[kotlin.Any] reified:false
CONSTRUCTOR visibility:protected <> (node:Node of <root>.FirModifier, token:<root>.KtModifierKeywordToken) returnType:<root>.FirModifier<Node of <root>.FirModifier> [primary]
@@ -511,8 +511,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirModifierList modality:SEALED visibility:internal superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
CLASS CLASS name:FirLightModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
CLASS CLASS name:FirPsiModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirModifierList
CONSTRUCTOR visibility:protected <> () returnType:<root>.FirModifierList [primary]
BLOCK_BODY
+3 -3
View File
@@ -20,8 +20,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirSourceElement modality:SEALED visibility:public superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
CLASS CLASS name:FirLightSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
CLASS CLASS name:FirPsiSourceElement modality:FINAL visibility:public superTypes:[<root>.FirSourceElement]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirSourceElement
CONSTRUCTOR visibility:protected <> () returnType:<root>.FirSourceElement [primary]
BLOCK_BODY
@@ -372,8 +372,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirModifier modality:SEALED visibility:internal superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.ASTNode>]
CLASS CLASS name:FirLightModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.LighterASTNode>]
CLASS CLASS name:FirPsiModifier modality:FINAL visibility:public superTypes:[<root>.FirModifier<<root>.ASTNode>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirModifier<Node of <root>.FirModifier>
TYPE_PARAMETER name:Node index:0 variance: superTypes:[kotlin.Any] reified:false
CONSTRUCTOR visibility:protected <> (node:Node of <root>.FirModifier, token:<root>.KtModifierKeywordToken) returnType:<root>.FirModifier<Node of <root>.FirModifier> [primary]
@@ -511,8 +511,8 @@ FILE fqName:<root> fileName:/kt44814.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:FirModifierList modality:SEALED visibility:internal superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:FirPsiModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
CLASS CLASS name:FirLightModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
CLASS CLASS name:FirPsiModifierList modality:FINAL visibility:public superTypes:[<root>.FirModifierList]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.FirModifierList
CONSTRUCTOR visibility:protected <> () returnType:<root>.FirModifierList [primary]
BLOCK_BODY
@@ -14,7 +14,7 @@ fun box(): String {
val klass = Base::class
if (!klass.isSealed) return "Error: Base is not sealed"
if (klass.isAbstract) return "Error: Base is not abstract"
return klass.sealedSubclasses
return klass.sealedSubclasses.asReversed()
.joinToString("") { it.simpleName ?: "_No name provided_" }
.takeIf { it.isNotBlank() }
?: "_No sealed subclasses found_"
@@ -14,7 +14,7 @@ fun box(): String {
val klass = Base::class
if (!klass.isSealed) return "Error: Base is not sealed"
if (klass.isAbstract) return "Error: Base is abstract"
return klass.sealedSubclasses
return klass.sealedSubclasses.asReversed()
.joinToString("") { it.simpleName ?: "_No name provided_" }
.takeIf { it.isNotBlank() }
?: "_No sealed subclasses found_"
+1 -1
View File
@@ -2,8 +2,8 @@ FILE fqName:<root> fileName:/sealedClasses.kt
CLASS CLASS name:Expr modality:SEALED visibility:public superTypes:[kotlin.Any]
sealedSubclasses:
CLASS CLASS name:Const modality:FINAL visibility:public superTypes:[<root>.Expr]
CLASS CLASS name:Sum modality:FINAL visibility:public superTypes:[<root>.Expr]
CLASS OBJECT name:NotANumber modality:FINAL visibility:public superTypes:[<root>.Expr]
CLASS CLASS name:Sum modality:FINAL visibility:public superTypes:[<root>.Expr]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Expr
CONSTRUCTOR visibility:protected <> () returnType:<root>.Expr [primary]
BLOCK_BODY
@@ -1,9 +1,9 @@
FILE fqName:<root> fileName:/ArrayMap.kt
CLASS CLASS name:ArrayMap modality:SEALED visibility:public superTypes:[kotlin.collections.Iterable<T of <root>.ArrayMap>]
sealedSubclasses:
CLASS CLASS name:ArrayMapImpl modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.ArrayMapImpl>]
CLASS OBJECT name:EmptyArrayMap modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<kotlin.Nothing>]
CLASS CLASS name:OneElementArrayMap modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.OneElementArrayMap>]
CLASS CLASS name:ArrayMapImpl modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.ArrayMapImpl>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.ArrayMap<T of <root>.ArrayMap>
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any] reified:false
CONSTRUCTOR visibility:protected <> () returnType:<root>.ArrayMap<T of <root>.ArrayMap> [primary]
+1 -1
View File
@@ -1,9 +1,9 @@
FILE fqName:<root> fileName:/ArrayMap.kt
CLASS CLASS name:ArrayMap modality:SEALED visibility:public superTypes:[kotlin.collections.Iterable<T of <root>.ArrayMap>]
sealedSubclasses:
CLASS CLASS name:ArrayMapImpl modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.ArrayMapImpl>]
CLASS OBJECT name:EmptyArrayMap modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<kotlin.Nothing>]
CLASS CLASS name:OneElementArrayMap modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.OneElementArrayMap>]
CLASS CLASS name:ArrayMapImpl modality:FINAL visibility:internal superTypes:[<root>.ArrayMap<T of <root>.ArrayMapImpl>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.ArrayMap<T of <root>.ArrayMap>
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any] reified:false
CONSTRUCTOR visibility:protected <> () returnType:<root>.ArrayMap<T of <root>.ArrayMap> [primary]