@@ -20,86 +20,81 @@ let renamedChildrenCompatibilityFile = try! SourceFileSyntax(leadingTrivia: copy
2020 try ExtensionDeclSyntax ( " extension \( layoutNode. type. syntaxBaseName) " ) {
2121 for child in layoutNode. children {
2222 if let deprecatedVarName = child. deprecatedVarName {
23- let childType : TypeSyntax =
24- child. kind. isNodeChoicesEmpty ? child. syntaxNodeKind. syntaxType : child. syntaxChoicesType
25- let type = child. isOptional ? TypeSyntax ( " \( childType) ? " ) : childType
26-
27- DeclSyntax (
28- """
29- @available(*, deprecated, renamed: " \( child. identifier) " )
30- public var \( deprecatedVarName) : \( type) {
31- get {
32- return \( child. baseCallName)
33- }
34- set {
35- \( child. baseCallName) = newValue
36- }
37- }
38- """
39- )
40- if let childNode = SYNTAX_NODE_MAP [ child. syntaxNodeKind] ? . collectionNode,
41- !child. isUnexpectedNodes,
42- case . collection(
43- kind: _,
44- collectionElementName: let collectionElementName,
45- defaultsToEmpty: _,
46- deprecatedCollectionElementName: let deprecatedCollectionElementName
47- ) = child. kind,
48- let deprecatedCollectionElementName
49- {
50- let childEltType = childNode. collectionElementType. syntaxBaseName
51-
52- DeclSyntax (
53- """
54- @available(*, deprecated, renamed: " add \( raw: collectionElementName) " )
55- public func add \( raw: deprecatedCollectionElementName) (_ element: \( childEltType) ) -> \( layoutNode. kind. syntaxType) {
56- return add \( raw: collectionElementName) (element)
57- }
58- """
59- )
23+ makeCompatibilityVar ( for: child, deprecatedVarName: deprecatedVarName)
24+ if let addMethod = makeCompatibilityAddMethod ( for: child) {
25+ addMethod
6026 }
6127 }
6228 }
6329
64- let deprecatedNames = layoutNode. children
65- . filter { !$0. isUnexpectedNodes && $0. hasDeprecatedName }
66- . map { $0. identifier. description }
67- . joined ( separator: " , " )
30+ let renamedName = InitSignature ( layoutNode) . compoundName
31+ makeCompatibilityInit ( for: InitSignature ( layoutNode) , renamedName: renamedName)
32+ }
33+ }
34+ }
35+
36+ func makeCompatibilityVar( for child: Child , deprecatedVarName: TokenSyntax ) -> DeclSyntax {
37+ let childType : TypeSyntax =
38+ child. kind. isNodeChoicesEmpty ? child. syntaxNodeKind. syntaxType : child. syntaxChoicesType
39+ let type = child. isOptional ? TypeSyntax ( " \( childType) ? " ) : childType
6840
69- let renamedArguments =
70- layoutNode. children. map { child in
71- if child. isUnexpectedNodes {
72- return " _: "
73- } else {
74- return " \( child. labelDeclName) : "
75- }
76- } . joined ( separator: " " )
41+ return DeclSyntax (
42+ """
43+ @available(*, deprecated, renamed: " \( child. identifier) " )
44+ public var \( deprecatedVarName) : \( type) {
45+ get {
46+ return \( child. baseCallName)
47+ }
48+ set {
49+ \( child. baseCallName) = newValue
50+ }
51+ }
52+ """
53+ )
54+ }
7755
78- let renamedName = " \( layoutNode. type. syntaxBaseName) (leadingTrivia: \( renamedArguments) trailingTrivia:) "
56+ func makeCompatibilityAddMethod( for child: Child ) -> DeclSyntax ? {
57+ if let childNode = SYNTAX_NODE_MAP [ child. syntaxNodeKind] ? . collectionNode,
58+ !child. isUnexpectedNodes,
59+ case . collection(
60+ kind: _,
61+ collectionElementName: let collectionElementName,
62+ defaultsToEmpty: _,
63+ deprecatedCollectionElementName: let deprecatedCollectionElementName
64+ ) = child. kind,
65+ let deprecatedCollectionElementName
66+ {
67+ let childEltType = childNode. collectionElementType. syntaxBaseName
7968
80- try ! InitializerDeclSyntax (
81- """
82- @available(*, deprecated, renamed: \( literal: renamedName) )
83- @_disfavoredOverload
84- \( layoutNode. generateInitializerDeclHeader ( useDeprecatedChildName: true ) )
85- """
86- ) {
87- FunctionCallExprSyntax ( callee: ExprSyntax ( " self.init " ) ) {
88- LabeledExprSyntax ( label: " leadingTrivia " , expression: ExprSyntax ( " leadingTrivia " ) )
89- for child in layoutNode. children {
90- if child. isUnexpectedNodes {
91- LabeledExprSyntax ( expression: ExprSyntax ( " \( child. deprecatedVarName ?? child. baseCallName) " ) )
92- } else {
93- LabeledExprSyntax (
94- label: child. labelDeclName,
95- colon: . colonToken( ) ,
96- expression: DeclReferenceExprSyntax ( baseName: child. deprecatedVarName ?? child. baseCallName)
97- )
98- }
99- }
100- LabeledExprSyntax ( label: " trailingTrivia " , expression: ExprSyntax ( " trailingTrivia " ) )
101- }
69+ return DeclSyntax (
70+ """
71+ @available(*, deprecated, renamed: " add \( raw: collectionElementName) " )
72+ public func add \( raw: deprecatedCollectionElementName) (_ element: \( childEltType) ) -> Self {
73+ return add \( raw: collectionElementName) (element)
74+ }
75+ """
76+ )
77+ }
78+
79+ return nil
80+ }
81+
82+ func makeCompatibilityInit( for signature: InitSignature , renamedName: String ) -> InitializerDeclSyntax {
83+ try ! InitializerDeclSyntax (
84+ """
85+ @available(*, deprecated, renamed: \( literal: renamedName) )
86+ @_disfavoredOverload
87+ \( signature. generateInitializerDeclHeader ( useDeprecatedChildName: true ) )
88+ """
89+ ) {
90+ FunctionCallExprSyntax ( callee: ExprSyntax ( " self.init " ) ) {
91+ LabeledExprSyntax ( label: " leadingTrivia " , expression: ExprSyntax ( " leadingTrivia " ) )
92+
93+ for argExpr in signature. makeArgumentsToInitializeNewestChildren ( ) {
94+ argExpr
10295 }
96+
97+ LabeledExprSyntax ( label: " trailingTrivia " , expression: ExprSyntax ( " trailingTrivia " ) )
10398 }
10499 }
105100}
0 commit comments