-
Notifications
You must be signed in to change notification settings - Fork 0
/
PropertyFilter.kt
135 lines (106 loc) · 3.85 KB
/
PropertyFilter.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.rnett.plugin.naming
import org.jetbrains.kotlin.ir.backend.js.utils.asString
import org.jetbrains.kotlin.ir.declarations.IrProperty
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
/**
* A filter for resolving IR properties
*/
@Deprecated("Will be superseded by reference generator")
public interface IPropertyFilter {
public var isDelegated: Boolean?
public var hasBackingField: Boolean?
public var fieldType: String?
public var hasGetter: Boolean?
public var getterType: String?
public var hasSetter: Boolean?
public var type: String?
public var isExpect: Boolean?
public var hasExtensionReceiver: Boolean?
public var extensionReceiver: ((IrValueParameter) -> Boolean)?
public fun filter(filter: (IrProperty) -> Boolean)
public fun matches(property: IrProperty): Boolean
}
/**
* Implementation of [IPropertyFilter]
*/
@Deprecated("Will be superseded by reference generator")
public open class PropertyFilter internal constructor() : IPropertyFilter {
private var filter: (IrProperty) -> Boolean = { true }
override fun filter(filter: (IrProperty) -> Boolean) {
val old = this.filter
this.filter = { old(it) && filter(it) }
}
override var isDelegated: Boolean? = null
override var hasBackingField: Boolean? = null
override var fieldType: String? = null
override var hasGetter: Boolean? = null
override var getterType: String? = null
override var hasSetter: Boolean? = null
override var type: String? = null
override var isExpect: Boolean? = null
override var hasExtensionReceiver: Boolean? = null
override var extensionReceiver: ((IrValueParameter) -> Boolean)? = null
override fun matches(property: IrProperty): Boolean {
isDelegated?.let {
if (it != property.isDelegated)
return false
}
hasBackingField?.let {
if (it != (property.backingField != null))
return false
}
fieldType?.let {
if (property.backingField == null)
return false
if (it != property.backingField!!.type.asString())
return false
}
hasGetter?.let {
if (it != (property.getter != null))
return false
}
getterType?.let {
if (property.getter == null)
return false
if (it != property.getter!!.returnType.asString())
return false
}
hasSetter?.let {
if (it != (property.setter != null))
return false
}
hasExtensionReceiver?.let {
if (property.getter == null)
return false
if (it != (property.getter!!.extensionReceiverParameter != null))
return false
}
extensionReceiver?.let {
if (property.getter == null)
return false
if (property.getter!!.extensionReceiverParameter == null)
return false
if (!it(property.getter!!.extensionReceiverParameter!!))
return false
}
type?.let {
if (property.getter != null) {
if (it != property.getter!!.returnType.asString())
return false
} else if (property.backingField != null) {
if (it != property.backingField!!.type.asString())
return false
} else
return false
}
isExpect?.let {
if (it != property.isExpect)
return false
}
return filter(property)
}
}
public fun <T : IPropertyFilter> T.withFilter(filter: (IrProperty) -> Boolean): T = apply {
filter(filter)
}
public inline operator fun <T : IPropertyFilter> T.invoke(builder: IPropertyFilter.() -> Unit): T = apply(builder)