Skip to content

Commit febe05b

Browse files
committed
KON-525 Add isReadOnly property to the KoPropertyDeclaration
1 parent d6c26ae commit febe05b

File tree

9 files changed

+82
-2
lines changed

9 files changed

+82
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.lemonappdev.konsist.core.declaration.koproperty
2+
3+
import com.lemonappdev.konsist.TestSnippetProvider.getSnippetKoScope
4+
import org.amshove.kluent.shouldBeEqualTo
5+
import org.junit.jupiter.api.Test
6+
7+
class KoPropertyDeclarationForKoReadOnlyProviderTest {
8+
@Test
9+
fun `property-is-val`() {
10+
// given
11+
val sut = getSnippetFile("property-is-val")
12+
.properties()
13+
.first()
14+
15+
// then
16+
sut.isReadOnly shouldBeEqualTo true
17+
}
18+
19+
@Test
20+
fun `property-is-var`() {
21+
// given
22+
val sut = getSnippetFile("property-is-var")
23+
.properties()
24+
.first()
25+
26+
// then
27+
sut.isReadOnly shouldBeEqualTo false
28+
}
29+
30+
@Test
31+
fun `property-is-lateinit-var`() {
32+
// given
33+
val sut = getSnippetFile("property-is-lateinit-var")
34+
.properties()
35+
.first()
36+
37+
// then
38+
sut.isReadOnly shouldBeEqualTo false
39+
}
40+
41+
@Test
42+
fun `property-is-const-val`() {
43+
// given
44+
val sut = getSnippetFile("property-is-const-val")
45+
.properties()
46+
.first()
47+
48+
// then
49+
sut.isReadOnly shouldBeEqualTo true
50+
}
51+
52+
private fun getSnippetFile(fileName: String) =
53+
getSnippetKoScope("core/declaration/koproperty/snippet/forkoreadonlyprovider/", fileName)
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
const val sampleProperty: String = ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
lateinit var sampleProperty: String
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
val sampleProperty: String = ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
var sampleProperty: String = ""

lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPropertyDeclaration.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.lemonappdev.konsist.api.provider.KoNameProvider
1616
import com.lemonappdev.konsist.api.provider.KoNullableTypeProvider
1717
import com.lemonappdev.konsist.api.provider.KoPackageProvider
1818
import com.lemonappdev.konsist.api.provider.KoPathProvider
19+
import com.lemonappdev.konsist.api.provider.KoReadOnlyProvider
1920
import com.lemonappdev.konsist.api.provider.KoReceiverTypeProvider
2021
import com.lemonappdev.konsist.api.provider.KoResideInPackageProvider
2122
import com.lemonappdev.konsist.api.provider.KoSetterProvider
@@ -75,4 +76,5 @@ interface KoPropertyDeclaration :
7576
KoExpectModifierProvider,
7677
KoConstModifierProvider,
7778
KoGetterProvider,
78-
KoSetterProvider
79+
KoSetterProvider,
80+
KoReadOnlyProvider
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.lemonappdev.konsist.api.provider
2+
3+
interface KoReadOnlyProvider : KoBaseProvider {
4+
/**
5+
* Determines whatever declaration is read only (i.e. is declared as `val`).
6+
*/
7+
val isReadOnly: Boolean
8+
}

lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoPropertyDeclarationCore.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.lemonappdev.konsist.core.provider.KoModuleProviderCore
2121
import com.lemonappdev.konsist.core.provider.KoNameProviderCore
2222
import com.lemonappdev.konsist.core.provider.KoNullableTypeProviderCore
2323
import com.lemonappdev.konsist.core.provider.KoPathProviderCore
24+
import com.lemonappdev.konsist.core.provider.KoReadOnlyProviderCore
2425
import com.lemonappdev.konsist.core.provider.KoReceiverTypeProviderCore
2526
import com.lemonappdev.konsist.core.provider.KoResideInPackageProviderCore
2627
import com.lemonappdev.konsist.core.provider.KoSetterProviderCore
@@ -103,7 +104,8 @@ internal class KoPropertyDeclarationCore private constructor(
103104
KoExpectModifierProviderCore,
104105
KoConstModifierProviderCore,
105106
KoGetterProviderCore,
106-
KoSetterProviderCore {
107+
KoSetterProviderCore,
108+
KoReadOnlyProviderCore {
107109
override val ktAnnotated: KtAnnotated by lazy { ktCallableDeclaration }
108110

109111
override val ktModifierListOwner: KtModifierListOwner by lazy { ktCallableDeclaration }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.lemonappdev.konsist.core.provider
2+
3+
import com.lemonappdev.konsist.api.provider.KoReadOnlyProvider
4+
import com.lemonappdev.konsist.core.provider.modifier.KoValModifierProviderCore
5+
6+
internal interface KoReadOnlyProviderCore : KoReadOnlyProvider, KoValModifierProviderCore {
7+
8+
override val isReadOnly: Boolean
9+
get() = hasValModifier
10+
}

0 commit comments

Comments
 (0)