From 89b075ac37d87a295301619829ea9c3ddd687a65 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 09:30:56 +0200 Subject: [PATCH 01/26] remove modifiers from declarations() method --- .../KoComplexDeclarationForClassTest.kt | 56 ---------------- ...omplexDeclarationForCompanionObjectTest.kt | 59 ---------------- .../KoComplexDeclarationForInterfaceTest.kt | 55 --------------- .../KoComplexDeclarationForObjectTest.kt | 55 --------------- ...rations-heaving-visibility-modifiers.kttxt | 45 ------------- ...rations-heaving-visibility-modifiers.kttxt | 45 ------------- ...rations-heaving-visibility-modifiers.kttxt | 43 ------------ ...rations-heaving-visibility-modifiers.kttxt | 43 ------------ .../com/lemonappdev/konsist/api/KoScope.kt | 7 -- .../KoComplexDeclarationSequenceExt.kt | 22 ++---- .../declaration/KoComplexDeclarationImpl.kt | 4 +- .../core/declaration/KoFileDeclarationImpl.kt | 4 +- .../provider/KoDeclarationProvider.kt | 41 ++++-------- .../provider/KoDeclarationProviderUtil.kt | 9 +-- .../konsist/core/scope/KoScopeImpl.kt | 22 ++---- .../KoComplexDeclarationSequenceExtTest.kt | 67 ++++++++----------- 16 files changed, 59 insertions(+), 518 deletions(-) delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations-heaving-visibility-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations-heaving-visibility-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-declarations-heaving-visibility-modifiers.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt index 864fd7859d..d9dcac32c6 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.declaration.kocomplexdeclaration import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.KoModifier import org.amshove.kluent.assertSoftly import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test @@ -189,61 +188,6 @@ class KoComplexDeclarationForClassTest { .shouldBeEqualTo(expected) } - @Test - fun `class-contains-declarations-heaving-visibility-modifiers includeNested = true`() { - // given - val sut = getSnippetFile("class-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleClassNestedInsideClass2", - "SampleObjectNestedInsideClass2", - "SampleInterfaceNestedInsideClass2", - "SampleCompanionObjectNestedInsideClass2", - "SampleObject1", - "SampleClassNestedInsideObject2", - "SampleObjectNestedInsideObject2", - "SampleInterfaceNestedInsideObject2", - "SampleInterface1", - "SampleClassNestedInsideInterface2", - "SampleObjectNestedInsideInterface2", - "SampleInterfaceNestedInsideInterface2", - "SampleCompanionObjectNestedInsideInterface2", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `class-contains-declarations-heaving-visibility-modifiers includeNested = false`() { - // given - val sut = getSnippetFile("class-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleObject1", - "SampleInterface1", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - @Test fun `class-represents-type`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt index 6cf1371084..2938555fc6 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.declaration.kocomplexdeclaration import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.KoModifier import org.amshove.kluent.assertSoftly import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test @@ -221,64 +220,6 @@ class KoComplexDeclarationForCompanionObjectTest { .shouldBeEqualTo(expected) } - @Test - fun `companion-object-contains-declarations-heaving-visibility-modifiers includeNested = true`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleClassNestedInsideClass2", - "SampleObjectNestedInsideClass2", - "SampleInterfaceNestedInsideClass2", - "SampleCompanionObjectNestedInsideClass2", - "SampleObject1", - "SampleClassNestedInsideObject2", - "SampleObjectNestedInsideObject2", - "SampleInterfaceNestedInsideObject2", - "SampleInterface1", - "SampleClassNestedInsideInterface2", - "SampleObjectNestedInsideInterface2", - "SampleInterfaceNestedInsideInterface2", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-declarations-heaving-visibility-modifiers includeNested = false`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleObject1", - "SampleInterface1", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - @Test fun `companion-object-represents-type`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt index 5f0bca467c..a618a07cbf 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.declaration.kocomplexdeclaration import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.KoModifier import org.amshove.kluent.assertSoftly import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test @@ -190,60 +189,6 @@ class KoComplexDeclarationForInterfaceTest { .shouldBeEqualTo(expected) } - @Test - fun `interface-contains-declarations-heaving-visibility-modifiers includeNested = true`() { - // given - val sut = getSnippetFile("interface-contains-declarations-heaving-visibility-modifiers") - .interfaces() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleClassNestedInsideClass2", - "SampleObjectNestedInsideClass2", - "SampleInterfaceNestedInsideClass2", - "SampleCompanionObjectNestedInsideClass2", - "SampleObject1", - "SampleClassNestedInsideObject2", - "SampleObjectNestedInsideObject2", - "SampleInterfaceNestedInsideObject2", - "SampleInterface1", - "SampleClassNestedInsideInterface2", - "SampleObjectNestedInsideInterface2", - "SampleInterfaceNestedInsideInterface2", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `interface-contains-declarations-heaving-visibility-modifiers includeNested = false`() { - // given - val sut = getSnippetFile("interface-contains-declarations-heaving-visibility-modifiers") - .interfaces() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleObject1", - "SampleInterface1", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - @Test fun `interface-represents-type`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt index 8fcb4b3c42..0c01e9986b 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.declaration.kocomplexdeclaration import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.KoModifier import org.amshove.kluent.assertSoftly import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test @@ -187,60 +186,6 @@ class KoComplexDeclarationForObjectTest { .shouldBeEqualTo(expected) } - @Test - fun `object-contains-declarations-heaving-visibility-modifiers includeNested = true`() { - // given - val sut = getSnippetFile("object-contains-declarations-heaving-visibility-modifiers") - .objects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleClassNestedInsideClass2", - "SampleObjectNestedInsideClass2", - "SampleInterfaceNestedInsideClass2", - "SampleCompanionObjectNestedInsideClass2", - "SampleObject1", - "SampleClassNestedInsideObject2", - "SampleObjectNestedInsideObject2", - "SampleInterfaceNestedInsideObject2", - "SampleInterface1", - "SampleClassNestedInsideInterface2", - "SampleObjectNestedInsideInterface2", - "SampleInterfaceNestedInsideInterface2", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `object-contains-declarations-heaving-visibility-modifiers includeNested = false`() { - // given - val sut = getSnippetFile("object-contains-declarations-heaving-visibility-modifiers") - .objects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleObject1", - "SampleInterface1", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - @Test fun `object-represents-type`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations-heaving-visibility-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations-heaving-visibility-modifiers.kttxt deleted file mode 100644 index 95984590fb..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations-heaving-visibility-modifiers.kttxt +++ /dev/null @@ -1,45 +0,0 @@ -class SampleTopLevelClass { - private fun sampleFunction1() {} - - fun sampleFunction2() {} - - private class SampleClass1 { - class SampleClassNestedInsideClass1 - object SampleObjectNestedInsideClass1 - interface SampleInterfaceNestedInsideClass1 - companion object SampleCompanionObjectNestedInsideClass1 - } - - class SampleClass2 { - private class SampleClassNestedInsideClass2 - private object SampleObjectNestedInsideClass2 - private interface SampleInterfaceNestedInsideClass2 - private companion object SampleCompanionObjectNestedInsideClass2 - } - - private object SampleObject1 { - class SampleClassNestedInsideObject1 - object SampleObjectNestedInsideObject1 - interface SampleInterfaceNestedInsideObject1 - } - - object SampleObject2 { - private class SampleClassNestedInsideObject2 - private object SampleObjectNestedInsideObject2 - private interface SampleInterfaceNestedInsideObject2 - } - - private interface SampleInterface1 { - class SampleClassNestedInsideInterface1 - object SampleObjectNestedInsideInterface1 - interface SampleInterfaceNestedInsideInterface1 - companion object SampleCompanionObjectNestedInsideInterface1 - } - - interface SampleInterface2 { - private class SampleClassNestedInsideInterface2 - private object SampleObjectNestedInsideInterface2 - private interface SampleInterfaceNestedInsideInterface2 - private companion object SampleCompanionObjectNestedInsideInterface2 - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt deleted file mode 100644 index e2c2f17800..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt +++ /dev/null @@ -1,45 +0,0 @@ -class SampleTopLevelClass { - companion object SampleTopLevelCompanionObject { - private fun sampleFunction1() {} - - fun sampleFunction2() {} - - private class SampleClass1 { - class SampleClassNestedInsideClass1 - object SampleObjectNestedInsideClass1 - interface SampleInterfaceNestedInsideClass1 - companion object SampleCompanionObjectNestedInsideClass1 - } - - class SampleClass2 { - private class SampleClassNestedInsideClass2 - private object SampleObjectNestedInsideClass2 - private interface SampleInterfaceNestedInsideClass2 - private companion object SampleCompanionObjectNestedInsideClass2 - } - - private object SampleObject1 { - class SampleClassNestedInsideObject1 - object SampleObjectNestedInsideObject1 - interface SampleInterfaceNestedInsideObject1 - } - - object SampleObject2 { - private class SampleClassNestedInsideObject2 - private object SampleObjectNestedInsideObject2 - private interface SampleInterfaceNestedInsideObject2 - } - - private interface SampleInterface1 { - class SampleClassNestedInsideInterface1 - object SampleObjectNestedInsideInterface1 - interface SampleInterfaceNestedInsideInterface1 - } - - interface SampleInterface2 { - private class SampleClassNestedInsideInterface2 - private object SampleObjectNestedInsideInterface2 - private interface SampleInterfaceNestedInsideInterface2 - } - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations-heaving-visibility-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations-heaving-visibility-modifiers.kttxt deleted file mode 100644 index 6dd4507f18..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations-heaving-visibility-modifiers.kttxt +++ /dev/null @@ -1,43 +0,0 @@ -interface SampleTopLevelInterface { - private fun sampleFunction1() {} - - fun sampleFunction2() {} - - private class SampleClass1 { - class SampleClassNestedInsideClass1 - object SampleObjectNestedInsideClass1 - interface SampleInterfaceNestedInsideClass1 - companion object SampleCompanionObjectNestedInsideClass1 - } - - class SampleClass2 { - private class SampleClassNestedInsideClass2 - private object SampleObjectNestedInsideClass2 - private interface SampleInterfaceNestedInsideClass2 - private companion object SampleCompanionObjectNestedInsideClass2 - } - - private object SampleObject1 { - class SampleClassNestedInsideObject1 - object SampleObjectNestedInsideObject1 - interface SampleInterfaceNestedInsideObject1 - } - - object SampleObject2 { - private class SampleClassNestedInsideObject2 - private object SampleObjectNestedInsideObject2 - private interface SampleInterfaceNestedInsideObject2 - } - - private interface SampleInterface1 { - class SampleClassNestedInsideInterface1 - object SampleObjectNestedInsideInterface1 - interface SampleInterfaceNestedInsideInterface1 - } - - interface SampleInterface2 { - private class SampleClassNestedInsideInterface2 - private object SampleObjectNestedInsideInterface2 - private interface SampleInterfaceNestedInsideInterface2 - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-declarations-heaving-visibility-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-declarations-heaving-visibility-modifiers.kttxt deleted file mode 100644 index 80dc99df0b..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-declarations-heaving-visibility-modifiers.kttxt +++ /dev/null @@ -1,43 +0,0 @@ -object SampleTopLevelObject { - private fun sampleFunction1() {} - - fun sampleFunction2() {} - - private class SampleClass1 { - class SampleClassNestedInsideClass1 - object SampleObjectNestedInsideClass1 - interface SampleInterfaceNestedInsideClass1 - companion object SampleCompanionObjectNestedInsideClass1 - } - - class SampleClass2 { - private class SampleClassNestedInsideClass2 - private object SampleObjectNestedInsideClass2 - private interface SampleInterfaceNestedInsideClass2 - private companion object SampleCompanionObjectNestedInsideClass2 - } - - private object SampleObject1 { - class SampleClassNestedInsideObject1 - object SampleObjectNestedInsideObject1 - interface SampleInterfaceNestedInsideObject1 - } - - object SampleObject2 { - private class SampleClassNestedInsideObject2 - private object SampleObjectNestedInsideObject2 - private interface SampleInterfaceNestedInsideObject2 - } - - private interface SampleInterface1 { - class SampleClassNestedInsideInterface1 - object SampleObjectNestedInsideInterface1 - interface SampleInterfaceNestedInsideInterface1 - } - - interface SampleInterface2 { - private class SampleClassNestedInsideInterface2 - private object SampleObjectNestedInsideInterface2 - private interface SampleInterfaceNestedInsideInterface2 - } -} \ No newline at end of file diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 1bc88ab5bd..8214a00a63 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -25,7 +25,6 @@ interface KoScope { * The classes present in the scope. */ fun classes( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence @@ -34,7 +33,6 @@ interface KoScope { * The interfaces present in the scope. */ fun interfaces( - modifiers: List = emptyList(), includeNested: Boolean = false, ): Sequence @@ -42,7 +40,6 @@ interface KoScope { * The objects present in the scope. */ fun objects( - modifiers: List = emptyList(), includeNested: Boolean = false, ): Sequence @@ -50,7 +47,6 @@ interface KoScope { * The companion objects present in the scope. */ fun companionObjects( - modifiers: List = emptyList(), includeNested: Boolean = false, ): Sequence @@ -58,7 +54,6 @@ interface KoScope { * The functions present in the scope. */ fun functions( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence @@ -67,7 +62,6 @@ interface KoScope { * The declarations present in the scope. */ fun declarations( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence @@ -76,7 +70,6 @@ interface KoScope { * The properties present in the scope. */ fun properties( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt index 86b9771749..e65f7366f2 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.api.ext.sequence -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration @@ -63,58 +62,51 @@ inline fun Sequence.withoutTypeOf(): Sequence< * Sequence containing declarations of all types. */ fun Sequence.declarations( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, -): Sequence = flatMap { it.declarations(modifiers, includeNested, includeLocal) } +): Sequence = flatMap { it.declarations(includeNested, includeLocal) } /** * Sequence containing class declarations. */ fun Sequence.classes( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, -): Sequence = flatMap { it.classes(modifiers, includeNested, includeLocal) } +): Sequence = flatMap { it.classes(includeNested, includeLocal) } /** * Sequence containing interface declarations. */ fun Sequence.interfaces( - modifiers: List = emptyList(), includeNested: Boolean = false, -): Sequence = flatMap { it.interfaces(modifiers, includeNested) } +): Sequence = flatMap { it.interfaces(includeNested) } /** * Sequence containing object declarations. */ fun Sequence.objects( - modifiers: List = emptyList(), includeNested: Boolean = false, -): Sequence = flatMap { it.objects(modifiers, includeNested) } +): Sequence = flatMap { it.objects(includeNested) } /** * Sequence containing companion object declarations. */ fun Sequence.companionObjects( - modifiers: List = emptyList(), includeNested: Boolean = false, -): Sequence = flatMap { it.companionObjects(modifiers, includeNested) } +): Sequence = flatMap { it.companionObjects(includeNested) } /** * Sequence containing properties declarations. */ fun Sequence.properties( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, -): Sequence = flatMap { it.properties(modifiers, includeNested, includeLocal) } +): Sequence = flatMap { it.properties(includeNested, includeLocal) } /** * Sequence containing functions declarations. */ fun Sequence.functions( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, -): Sequence = flatMap { it.functions(modifiers, includeNested, includeLocal) } +): Sequence = flatMap { it.functions(includeNested, includeLocal) } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt index 127a4dce6f..1015126350 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.core.declaration -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration import com.lemonappdev.konsist.core.declaration.provider.KoDeclarationProviderUtil @@ -15,9 +14,8 @@ internal abstract class KoComplexDeclarationImpl( override fun representsType(name: String) = name == this.name || name == fullyQualifiedName override fun declarations( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = KoDeclarationProviderUtil - .getKoDeclarations(ktClassOrObject, modifiers, includeNested, includeLocal, this) + .getKoDeclarations(ktClassOrObject, includeNested, includeLocal, this) } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt index 6ac968cc42..7d38505619 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.core.declaration -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.core.cache.KoDeclarationCache @@ -51,11 +50,10 @@ internal class KoFileDeclarationImpl private constructor(private val ktFile: KtF } override fun declarations( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = - KoDeclarationProviderUtil.getKoDeclarations(ktFile, modifiers, includeNested, includeLocal, this) + KoDeclarationProviderUtil.getKoDeclarations(ktFile, includeNested, includeLocal, this) override fun hasAnnotations(vararg names: String) = when { names.isEmpty() -> annotations.isNotEmpty() diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index a73df5ea7f..f0c829bd5e 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.core.declaration.provider -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration @@ -11,102 +10,88 @@ import com.lemonappdev.konsist.api.declaration.KoPropertyDeclaration interface KoDeclarationProvider { fun declarations( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence fun containsDeclarations( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, - ) = declarations(modifiers, includeNested).any { it.name == name && it.hasModifiers(*modifiers.toTypedArray()) } + ) = declarations(includeNested).any { it.name == name } } interface KoClassProvider : KoDeclarationProvider { fun classes( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence = - KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested, includeLocal) + KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested, includeLocal) fun containsClass( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, ): Boolean = - classes(modifiers, includeNested).any { it.name == name } + classes(includeNested).any { it.name == name } } interface KoInterfaceProvider : KoDeclarationProvider { fun interfaces( - modifiers: List = emptyList(), includeNested: Boolean = false, ): Sequence = - KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested) + KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested) fun containsInterface( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, ): Boolean = - interfaces(modifiers, includeNested).any { it.name == name } + interfaces(includeNested).any { it.name == name } } interface KoObjectProvider : KoDeclarationProvider { fun objects( - modifiers: List = emptyList(), includeNested: Boolean = false, - ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested) + ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested) fun containsObject( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, - ): Boolean = objects(modifiers, includeNested).any { it.name == name } + ): Boolean = objects(includeNested).any { it.name == name } } interface KoCompanionObjectProvider : KoDeclarationProvider { fun companionObjects( - modifiers: List = emptyList(), includeNested: Boolean = false, - ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested) + ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested) fun containsCompanionObject( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, - ): Boolean = companionObjects(modifiers, includeNested).any { it.name == name } + ): Boolean = companionObjects(includeNested).any { it.name == name } } interface KoPropertyProvider : KoDeclarationProvider { fun properties( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, - ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested, includeLocal) + ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested, includeLocal) fun containsProperty( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, ): Boolean = - properties(modifiers, includeNested, includeLocal).any { it.name == name } + properties(includeNested, includeLocal).any { it.name == name } } interface KoFunctionProvider : KoDeclarationProvider { fun functions( - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, - ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested, includeLocal) + ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), includeNested, includeLocal) fun containsFunction( name: String, - modifiers: List = emptyList(), includeNested: Boolean = false, includeLocal: Boolean = false, - ): Boolean = functions(modifiers, includeNested, includeLocal).any { it.name == name } + ): Boolean = functions(includeNested, includeLocal).any { it.name == name } } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 04abc53f42..985118e8e9 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.core.declaration.provider -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration @@ -22,7 +21,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getTextWithLocation internal object KoDeclarationProviderUtil { inline fun getKoDeclarations( ktDeclarationContainer: KtDeclarationContainer, - modifiers: List, includeNested: Boolean = false, includeLocal: Boolean = false, parent: KoBaseDeclaration, @@ -48,12 +46,11 @@ internal object KoDeclarationProviderUtil { } .asSequence() - return getKoDeclarations(declarations, modifiers, includeNested, includeLocal) + return getKoDeclarations(declarations, includeNested, includeLocal) } inline fun getKoDeclarations( declarations: Sequence, - modifiers: List, includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence { @@ -89,10 +86,6 @@ internal object KoDeclarationProviderUtil { .filterIsInstance() } - if (modifiers.isNotEmpty()) { - result = result.filter { it.hasModifiers(*modifiers.toTypedArray()) } - } - return result.filterIsInstance() } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 2e452a0005..0ff327334e 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.core.scope -import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.KoScope import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration @@ -19,50 +18,43 @@ class KoScopeImpl( override fun files(): Sequence = koFiles.sortedBy { it.filePath } override fun classes( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = - koFiles.flatMap { it.classes(modifiers, includeNested, includeLocal) } + koFiles.flatMap { it.classes(includeNested, includeLocal) } override fun interfaces( - modifiers: List, includeNested: Boolean, ): Sequence = - koFiles.flatMap { it.interfaces(modifiers, includeNested) } + koFiles.flatMap { it.interfaces(includeNested) } override fun objects( - modifiers: List, includeNested: Boolean, ): Sequence = - koFiles.flatMap { it.objects(modifiers, includeNested) } + koFiles.flatMap { it.objects(includeNested) } override fun companionObjects( - modifiers: List, includeNested: Boolean, ): Sequence = - koFiles.flatMap { it.companionObjects(modifiers, includeNested) } + koFiles.flatMap { it.companionObjects(includeNested) } override fun functions( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = - koFiles.flatMap { it.functions(modifiers, includeNested, includeLocal) } + koFiles.flatMap { it.functions(includeNested, includeLocal) } override fun declarations( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = - koFiles.flatMap { it.declarations(modifiers, includeNested, includeLocal) } + koFiles.flatMap { it.declarations(includeNested, includeLocal) } override fun properties( - modifiers: List, includeNested: Boolean, includeLocal: Boolean, ): Sequence = - koFiles.flatMap { it.properties(modifiers, includeNested, includeLocal) } + koFiles.flatMap { it.properties(includeNested, includeLocal) } override fun imports() = koFiles.flatMap { it.imports } diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt index 0e7614e246..94de5377c4 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt @@ -1,7 +1,5 @@ package com.lemonappdev.konsist.api.ext.sequence -import com.lemonappdev.konsist.api.KoModifier.OPEN -import com.lemonappdev.konsist.api.KoModifier.PUBLIC import com.lemonappdev.konsist.core.declaration.KoClassDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoComplexDeclarationImpl @@ -167,18 +165,17 @@ class KoComplexDeclarationSequenceExtTest { val class2: KoClassDeclarationImpl = mockk() val interface1: KoInterfaceDeclarationImpl = mockk() val property1: KoPropertyDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { declarations(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(class1, function1) + every { declarations(includeNested = true, includeLocal = false) } returns sequenceOf(class1, function1) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { declarations(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(class2, interface1) + every { declarations(includeNested = true, includeLocal = false) } returns sequenceOf(class2, interface1) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { declarations(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(property1) + every { declarations(includeNested = true, includeLocal = false) } returns sequenceOf(property1) } val complexDeclaration4: KoComplexDeclarationImpl = mockk { - every { declarations(modifiers, includeNested = true, includeLocal = false) } returns emptySequence() + every { declarations(includeNested = true, includeLocal = false) } returns emptySequence() } val complexDeclarations = sequenceOf( complexDeclaration1, @@ -188,7 +185,7 @@ class KoComplexDeclarationSequenceExtTest { ) // when - val sut = complexDeclarations.declarations(modifiers, includeNested = true, includeLocal = false) + val sut = complexDeclarations.declarations(includeNested = true, includeLocal = false) // then sut.toList() shouldBeEqualTo listOf(class1, function1, class2, interface1, property1) @@ -200,20 +197,19 @@ class KoComplexDeclarationSequenceExtTest { val class1: KoClassDeclarationImpl = mockk() val class2: KoClassDeclarationImpl = mockk() val class3: KoClassDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { classes(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(class1, class2) + every { classes(includeNested = true, includeLocal = false) } returns sequenceOf(class1, class2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { classes(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(class3) + every { classes(includeNested = true, includeLocal = false) } returns sequenceOf(class3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { classes(modifiers, includeNested = true, includeLocal = false) } returns emptySequence() + every { classes(includeNested = true, includeLocal = false) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.classes(modifiers, includeNested = true, includeLocal = false) + val sut = complexDeclarations.classes(includeNested = true, includeLocal = false) // then sut.toList() shouldBeEqualTo listOf(class1, class2, class3) @@ -225,20 +221,19 @@ class KoComplexDeclarationSequenceExtTest { val interface1: KoInterfaceDeclarationImpl = mockk() val interface2: KoInterfaceDeclarationImpl = mockk() val interface3: KoInterfaceDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { interfaces(modifiers, includeNested = true) } returns sequenceOf(interface1, interface2) + every { interfaces(includeNested = true) } returns sequenceOf(interface1, interface2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { interfaces(modifiers, includeNested = true) } returns sequenceOf(interface3) + every { interfaces(includeNested = true) } returns sequenceOf(interface3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { interfaces(modifiers, includeNested = true) } returns emptySequence() + every { interfaces(includeNested = true) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.interfaces(modifiers, includeNested = true) + val sut = complexDeclarations.interfaces(includeNested = true) // then sut.toList() shouldBeEqualTo listOf(interface1, interface2, interface3) @@ -250,20 +245,19 @@ class KoComplexDeclarationSequenceExtTest { val object1: KoObjectDeclarationImpl = mockk() val object2: KoObjectDeclarationImpl = mockk() val object3: KoObjectDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { objects(modifiers, includeNested = true) } returns sequenceOf(object1, object2) + every { objects(includeNested = true) } returns sequenceOf(object1, object2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { objects(modifiers, includeNested = true) } returns sequenceOf(object3) + every { objects(includeNested = true) } returns sequenceOf(object3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { objects(modifiers, includeNested = true) } returns emptySequence() + every { objects(includeNested = true) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.objects(modifiers, includeNested = true) + val sut = complexDeclarations.objects(includeNested = true) // then sut.toList() shouldBeEqualTo listOf(object1, object2, object3) @@ -275,20 +269,19 @@ class KoComplexDeclarationSequenceExtTest { val companionObject1: KoCompanionObjectDeclarationImpl = mockk() val companionObject2: KoCompanionObjectDeclarationImpl = mockk() val companionObject3: KoCompanionObjectDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns sequenceOf(companionObject1, companionObject2) + every { companionObjects(includeNested = true) } returns sequenceOf(companionObject1, companionObject2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns sequenceOf(companionObject3) + every { companionObjects(includeNested = true) } returns sequenceOf(companionObject3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns emptySequence() + every { companionObjects(includeNested = true) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.companionObjects(modifiers, includeNested = true) + val sut = complexDeclarations.companionObjects(includeNested = true) // then sut.toList() shouldBeEqualTo listOf(companionObject1, companionObject2, companionObject3) @@ -300,20 +293,19 @@ class KoComplexDeclarationSequenceExtTest { val property1: KoPropertyDeclarationImpl = mockk() val property2: KoPropertyDeclarationImpl = mockk() val property3: KoPropertyDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { properties(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(property1, property2) + every { properties(includeNested = true, includeLocal = false) } returns sequenceOf(property1, property2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { properties(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(property3) + every { properties(includeNested = true, includeLocal = false) } returns sequenceOf(property3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { properties(modifiers, includeNested = true, includeLocal = false) } returns emptySequence() + every { properties(includeNested = true, includeLocal = false) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.properties(modifiers, includeNested = true, includeLocal = false) + val sut = complexDeclarations.properties(includeNested = true, includeLocal = false) // then sut.toList() shouldBeEqualTo listOf(property1, property2, property3) @@ -325,20 +317,19 @@ class KoComplexDeclarationSequenceExtTest { val function1: KoFunctionDeclarationImpl = mockk() val function2: KoFunctionDeclarationImpl = mockk() val function3: KoFunctionDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { functions(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(function1, function2) + every { functions(includeNested = true, includeLocal = false) } returns sequenceOf(function1, function2) } val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { functions(modifiers, includeNested = true, includeLocal = false) } returns sequenceOf(function3) + every { functions(includeNested = true, includeLocal = false) } returns sequenceOf(function3) } val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { functions(modifiers, includeNested = true, includeLocal = false) } returns emptySequence() + every { functions(includeNested = true, includeLocal = false) } returns emptySequence() } val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) // when - val sut = complexDeclarations.functions(modifiers, includeNested = true, includeLocal = false) + val sut = complexDeclarations.functions(includeNested = true, includeLocal = false) // then sut.toList() shouldBeEqualTo listOf(function1, function2, function3) From 9eacbf5174608a5e641754da3bae450c4f892f5b Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 09:37:31 +0200 Subject: [PATCH 02/26] add more KoNamedDeclarations for getKoDeclaration method --- .../provider/KoDeclarationProviderUtil.kt | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 985118e8e9..686830dfd1 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -1,32 +1,48 @@ package com.lemonappdev.konsist.core.declaration.provider +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiWhiteSpace import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration +import com.lemonappdev.konsist.core.declaration.KoAnnotationDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoClassDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoComplexDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoFunctionDeclarationImpl +import com.lemonappdev.konsist.core.declaration.KoImportDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoInterfaceDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoObjectDeclarationImpl +import com.lemonappdev.konsist.core.declaration.KoPackageDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoPropertyDeclarationImpl +import com.lemonappdev.konsist.core.declaration.KoTypeAliasDeclarationImpl import com.lemonappdev.konsist.core.exception.KoUnsupportedOperationException +import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclarationContainer +import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.psi.KtImportList import org.jetbrains.kotlin.psi.KtObjectDeclaration +import org.jetbrains.kotlin.psi.KtPackageDirective import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.psiUtil.getTextWithLocation internal object KoDeclarationProviderUtil { - inline fun getKoDeclarations( - ktDeclarationContainer: KtDeclarationContainer, + inline fun getKoDeclarations( + ktElement: KtElement, includeNested: Boolean = false, includeLocal: Boolean = false, parent: KoBaseDeclaration, ): Sequence { - val declarations = ktDeclarationContainer - .declarations + val declarations = ktElement + .containingFile + .children + .filterNot { it is PsiWhiteSpace } + .flattenDeclarations() .mapNotNull { if (it is KtClass && !it.isInterface()) { KoClassDeclarationImpl.getInstance(it, parent) @@ -40,6 +56,14 @@ internal object KoDeclarationProviderUtil { KoPropertyDeclarationImpl.getInstance(it, parent) } else if (it is KtFunction) { KoFunctionDeclarationImpl.getInstance(it, parent) + } else if (it is KtImportDirective) { + KoImportDeclarationImpl.getInstance(it, parent) + } else if (it is KtPackageDirective) { + KoPackageDeclarationImpl.getInstance(it, parent) + } else if (it is KtAnnotationEntry){ + KoAnnotationDeclarationImpl.getInstance(it, parent) + } else if (it is KtTypeAlias){ + KoTypeAliasDeclarationImpl.getInstance(it, parent) } else { throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") } @@ -49,8 +73,8 @@ internal object KoDeclarationProviderUtil { return getKoDeclarations(declarations, includeNested, includeLocal) } - inline fun getKoDeclarations( - declarations: Sequence, + inline fun getKoDeclarations( + declarations: Sequence, includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence { @@ -89,9 +113,9 @@ internal object KoDeclarationProviderUtil { return result.filterIsInstance() } - fun localDeclarations(koFunctions: Sequence): Sequence { - val localDeclarations = mutableListOf() - val nestedDeclarations = mutableListOf() + fun localDeclarations(koFunctions: Sequence): Sequence { + val localDeclarations = mutableListOf() + val nestedDeclarations = mutableListOf() koFunctions.forEach { koFunction -> koFunction.localDeclarations().forEach { @@ -105,4 +129,12 @@ internal object KoDeclarationProviderUtil { return localDeclarations.asSequence() } + + private fun List.flattenDeclarations() = this.flatMap { + if (it is KtImportList) { + it.imports + } else { + listOf(it) + } + } } From 24ba7c1979763e5b42985719758f78634fd0601c Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 09:55:25 +0200 Subject: [PATCH 03/26] change KoDeclaration to KoNamedDeclaration in declarations() --- lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt | 3 ++- .../api/ext/sequence/KoComplexDeclarationSequenceExt.kt | 3 ++- .../konsist/core/declaration/KoComplexDeclarationImpl.kt | 3 ++- .../konsist/core/declaration/KoFileDeclarationImpl.kt | 3 ++- .../konsist/core/declaration/provider/KoDeclarationProvider.kt | 3 ++- .../kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 8214a00a63..5cbda0ec3f 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -7,6 +7,7 @@ import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoImportDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.api.declaration.KoObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoPackageDeclaration import com.lemonappdev.konsist.api.declaration.KoPropertyDeclaration @@ -64,7 +65,7 @@ interface KoScope { fun declarations( includeNested: Boolean = false, includeLocal: Boolean = false, - ): Sequence + ): Sequence /** * The properties present in the scope. diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt index e65f7366f2..1318888578 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt @@ -6,6 +6,7 @@ import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.api.declaration.KoObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoPropertyDeclaration import com.lemonappdev.konsist.api.ext.declaration.representsTypeOf @@ -64,7 +65,7 @@ inline fun Sequence.withoutTypeOf(): Sequence< fun Sequence.declarations( includeNested: Boolean = false, includeLocal: Boolean = false, -): Sequence = flatMap { it.declarations(includeNested, includeLocal) } +): Sequence = flatMap { it.declarations(includeNested, includeLocal) } /** * Sequence containing class declarations. diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt index 1015126350..26e4ff91bc 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoComplexDeclarationImpl.kt @@ -2,6 +2,7 @@ package com.lemonappdev.konsist.core.declaration import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.provider.KoDeclarationProviderUtil import org.jetbrains.kotlin.psi.KtClassOrObject @@ -16,6 +17,6 @@ internal abstract class KoComplexDeclarationImpl( override fun declarations( includeNested: Boolean, includeLocal: Boolean, - ): Sequence = KoDeclarationProviderUtil + ): Sequence = KoDeclarationProviderUtil .getKoDeclarations(ktClassOrObject, includeNested, includeLocal, this) } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt index 7d38505619..401a0befad 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoFileDeclarationImpl.kt @@ -2,6 +2,7 @@ package com.lemonappdev.konsist.core.declaration import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.cache.KoDeclarationCache import com.lemonappdev.konsist.core.declaration.provider.KoDeclarationProviderUtil import com.lemonappdev.konsist.core.util.LocationHelper @@ -52,7 +53,7 @@ internal class KoFileDeclarationImpl private constructor(private val ktFile: KtF override fun declarations( includeNested: Boolean, includeLocal: Boolean, - ): Sequence = + ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(ktFile, includeNested, includeLocal, this) override fun hasAnnotations(vararg names: String) = when { diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index f0c829bd5e..ca148c3125 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -5,6 +5,7 @@ import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.api.declaration.KoObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoPropertyDeclaration @@ -12,7 +13,7 @@ interface KoDeclarationProvider { fun declarations( includeNested: Boolean = false, includeLocal: Boolean = false, - ): Sequence + ): Sequence fun containsDeclarations( name: String, diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 0ff327334e..47e25ad105 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -7,6 +7,7 @@ import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration +import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.api.declaration.KoObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoPropertyDeclaration @@ -47,7 +48,7 @@ class KoScopeImpl( override fun declarations( includeNested: Boolean, includeLocal: Boolean, - ): Sequence = + ): Sequence = koFiles.flatMap { it.declarations(includeNested, includeLocal) } override fun properties( From 6e3f433dbaeaf41c959eb84292c90fbfd0b44252 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 10:49:43 +0200 Subject: [PATCH 04/26] update KoDeclarationProviderUtil.getKoDeclarations method --- .../provider/KoDeclarationProviderUtil.kt | 97 +++++++++---------- 1 file changed, 46 insertions(+), 51 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 686830dfd1..5cabc59b5d 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -18,6 +18,8 @@ import com.lemonappdev.konsist.core.declaration.KoPackageDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoPropertyDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoTypeAliasDeclarationImpl import com.lemonappdev.konsist.core.exception.KoUnsupportedOperationException +import org.jetbrains.kotlin.ir.types.IdSignatureValues.result +import org.jetbrains.kotlin.ir.types.impl.IrErrorClassImpl.declarations import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclarationContainer @@ -38,39 +40,42 @@ internal object KoDeclarationProviderUtil { includeLocal: Boolean = false, parent: KoBaseDeclaration, ): Sequence { - val declarations = ktElement - .containingFile - .children - .filterNot { it is PsiWhiteSpace } - .flattenDeclarations() - .mapNotNull { - if (it is KtClass && !it.isInterface()) { - KoClassDeclarationImpl.getInstance(it, parent) - } else if (it is KtClass && it.isInterface()) { - KoInterfaceDeclarationImpl.getInstance(it, parent) - } else if (it is KtObjectDeclaration && !it.isCompanion()) { - KoObjectDeclarationImpl.getInstance(it, parent) - } else if (it is KtObjectDeclaration && it.isCompanion()) { - KoCompanionObjectDeclarationImpl.getInstance(it, parent) - } else if (it is KtProperty) { - KoPropertyDeclarationImpl.getInstance(it, parent) - } else if (it is KtFunction) { - KoFunctionDeclarationImpl.getInstance(it, parent) - } else if (it is KtImportDirective) { - KoImportDeclarationImpl.getInstance(it, parent) - } else if (it is KtPackageDirective) { - KoPackageDeclarationImpl.getInstance(it, parent) - } else if (it is KtAnnotationEntry){ - KoAnnotationDeclarationImpl.getInstance(it, parent) - } else if (it is KtTypeAlias){ - KoTypeAliasDeclarationImpl.getInstance(it, parent) - } else { - throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") + val declarations: Sequence + if (ktElement is KtDeclarationContainer) { + declarations = ktElement + .declarations + .mapNotNull { + when { + it is KtClass && !it.isInterface() -> KoClassDeclarationImpl.getInstance(it, parent) + it is KtClass && it.isInterface() -> KoInterfaceDeclarationImpl.getInstance(it, parent) + it is KtObjectDeclaration && !it.isCompanion() -> KoObjectDeclarationImpl.getInstance(it, parent) + it is KtObjectDeclaration && it.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(it, parent) + it is KtProperty -> KoPropertyDeclarationImpl.getInstance(it, parent) + it is KtFunction -> KoFunctionDeclarationImpl.getInstance(it, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") + } } - } - .asSequence() - - return getKoDeclarations(declarations, includeNested, includeLocal) + .asSequence() + return getKoDeclarations(declarations, includeNested, includeLocal) + } else { + declarations = ktElement + .containingFile + .children + .filterNot { it is PsiWhiteSpace } + .filterNot { it.text.isBlank() } + .flattenDeclarations() + .mapNotNull { + when (it) { + is KtImportDirective -> KoImportDeclarationImpl.getInstance(it, parent) + is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(it, parent) + is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(it, parent) + is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(it, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") + } + } + .asSequence() + return declarations.filterIsInstance() + } } inline fun getKoDeclarations( @@ -81,17 +86,9 @@ internal object KoDeclarationProviderUtil { var result = if (includeNested) { declarations.flatMap { when (it) { - is KoComplexDeclarationImpl -> { - (listOf(it) + it.declarations(includeNested = true)) - } - - is T -> { - listOf(it) - } - - else -> { - listOf() - } + is KoComplexDeclarationImpl -> (listOf(it) + it.declarations(includeNested = true)) + is T -> listOf(it) + else -> listOf() } } } else { @@ -101,10 +98,9 @@ internal object KoDeclarationProviderUtil { if (includeLocal) { result = result .flatMap { - if (it is KoFunctionDeclarationImpl) { - listOf(it) + it.localDeclarations() + localDeclarations(it.localFunctions()) - } else { - listOf(it) + when (it) { + is KoFunctionDeclarationImpl -> listOf(it) + it.localDeclarations() + localDeclarations(it.localFunctions()) + else -> listOf(it) } } .filterIsInstance() @@ -131,10 +127,9 @@ internal object KoDeclarationProviderUtil { } private fun List.flattenDeclarations() = this.flatMap { - if (it is KtImportList) { - it.imports - } else { - listOf(it) + when (it) { + is KtImportList -> it.imports + else -> listOf(it) } } } From 79447523fd578b23b82c204103a04ec0b8ad7f37 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 12:31:46 +0200 Subject: [PATCH 05/26] update KoDeclarationProviderUtil.getKoDeclarations() method --- .../koscope/KoScopeForDeclarationTest.kt | 5 +- .../com/lemonappdev/konsist/api/KoScope.kt | 1 - .../KoComplexDeclarationSequenceExt.kt | 1 - .../provider/KoDeclarationProvider.kt | 1 - .../provider/KoDeclarationProviderUtil.kt | 83 +++++++++++-------- .../konsist/core/scope/KoScopeImpl.kt | 1 - 6 files changed, 50 insertions(+), 42 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index 245a1421fd..7cf7665ab6 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -7,9 +7,9 @@ import org.junit.jupiter.api.Test class KoScopeForDeclarationTest { @Test - fun `file-contains-class-function-object-interface-property`() { + fun `file-contains-package-class-function-object-interface-property`() { // given - val sut = getSnippetFile("file-contains-class-function-object-interface-property") + val sut = getSnippetFile("file-contains-package-class-function-object-interface-property") // then sut @@ -18,6 +18,7 @@ class KoScopeForDeclarationTest { .toList() .shouldBeEqualTo( listOf( + "samplepackage", "sampleProperty", "sampleFunction", "SampleClass", diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 5cbda0ec3f..f14620f20b 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -2,7 +2,6 @@ package com.lemonappdev.konsist.api import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoImportDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt index 1318888578..caf00c585a 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt @@ -3,7 +3,6 @@ package com.lemonappdev.konsist.api.ext.sequence import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index ca148c3125..bd5ba88b59 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -2,7 +2,6 @@ package com.lemonappdev.konsist.core.declaration.provider import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 5cabc59b5d..cdea06ee86 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -3,7 +3,6 @@ package com.lemonappdev.konsist.core.declaration.provider import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoAnnotationDeclarationImpl @@ -18,12 +17,12 @@ import com.lemonappdev.konsist.core.declaration.KoPackageDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoPropertyDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoTypeAliasDeclarationImpl import com.lemonappdev.konsist.core.exception.KoUnsupportedOperationException -import org.jetbrains.kotlin.ir.types.IdSignatureValues.result -import org.jetbrains.kotlin.ir.types.impl.IrErrorClassImpl.declarations import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclarationContainer import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtImportList @@ -41,40 +40,34 @@ internal object KoDeclarationProviderUtil { parent: KoBaseDeclaration, ): Sequence { val declarations: Sequence - if (ktElement is KtDeclarationContainer) { - declarations = ktElement - .declarations - .mapNotNull { - when { - it is KtClass && !it.isInterface() -> KoClassDeclarationImpl.getInstance(it, parent) - it is KtClass && it.isInterface() -> KoInterfaceDeclarationImpl.getInstance(it, parent) - it is KtObjectDeclaration && !it.isCompanion() -> KoObjectDeclarationImpl.getInstance(it, parent) - it is KtObjectDeclaration && it.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(it, parent) - it is KtProperty -> KoPropertyDeclarationImpl.getInstance(it, parent) - it is KtFunction -> KoFunctionDeclarationImpl.getInstance(it, parent) - else -> throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") - } - } - .asSequence() - return getKoDeclarations(declarations, includeNested, includeLocal) - } else { - declarations = ktElement - .containingFile - .children - .filterNot { it is PsiWhiteSpace } - .filterNot { it.text.isBlank() } - .flattenDeclarations() - .mapNotNull { - when (it) { - is KtImportDirective -> KoImportDeclarationImpl.getInstance(it, parent) - is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(it, parent) - is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(it, parent) - is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(it, parent) - else -> throw KoUnsupportedOperationException("Unknown declaration type: ${it.getTextWithLocation()}") + + return when (ktElement) { + is KtFile -> { + declarations = ktElement + .containingFile + .children + .filterNot { it is PsiWhiteSpace } + .filterNot { it.text.isBlank() } + .flattenDeclarations() + .mapNotNull { + when (it) { + is KtDeclaration -> getInstanceOfKtDeclaration(it, parent) + else -> getInstanceOfOtherDeclaration(it, parent) + } } - } - .asSequence() - return declarations.filterIsInstance() + .asSequence() + getKoDeclarations(declarations, includeNested, includeLocal) + } + + is KtDeclarationContainer -> { + declarations = ktElement + .declarations + .mapNotNull { getInstanceOfKtDeclaration(it, parent) } + .asSequence() + getKoDeclarations(declarations, includeNested, includeLocal) + } + + else -> emptySequence() } } @@ -132,4 +125,22 @@ internal object KoDeclarationProviderUtil { else -> listOf(it) } } + + private fun getInstanceOfKtDeclaration(declaration: KtDeclaration, parent: KoBaseDeclaration) = when { + declaration is KtClass && !declaration.isInterface() -> KoClassDeclarationImpl.getInstance(declaration, parent) + declaration is KtClass && declaration.isInterface() -> KoInterfaceDeclarationImpl.getInstance(declaration, parent) + declaration is KtObjectDeclaration && !declaration.isCompanion() -> KoObjectDeclarationImpl.getInstance(declaration, parent) + declaration is KtObjectDeclaration && declaration.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(declaration, parent) + declaration is KtProperty -> KoPropertyDeclarationImpl.getInstance(declaration, parent) + declaration is KtFunction -> KoFunctionDeclarationImpl.getInstance(declaration, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") + } + + private fun getInstanceOfOtherDeclaration(declaration: PsiElement, parent: KoBaseDeclaration) = when { + declaration is KtImportDirective -> KoImportDeclarationImpl.getInstance(declaration, parent) + declaration is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(declaration, parent) + declaration is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(declaration, parent) + declaration is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(declaration, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") + } } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 47e25ad105..ad0129e29a 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -3,7 +3,6 @@ package com.lemonappdev.konsist.core.scope import com.lemonappdev.konsist.api.KoScope import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration From d95f6d8958797f29b77b28c3a4a44da284814983 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 13:01:30 +0200 Subject: [PATCH 06/26] upd Assert methods --- .../kotlin/com/lemonappdev/konsist/core/verify/Assert.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index b241c60f9a..80ef62010d 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -1,9 +1,10 @@ package com.lemonappdev.konsist.core.verify import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration +import com.lemonappdev.konsist.api.declaration.KoDeclaration +import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl -import com.lemonappdev.konsist.core.declaration.KoFileDeclarationImpl import com.lemonappdev.konsist.core.exception.KoCheckFailedException import com.lemonappdev.konsist.core.exception.KoException import com.lemonappdev.konsist.core.exception.KoInternalException @@ -97,14 +98,14 @@ private fun checkIfSuppressed(declaration: KoDeclarationImpl, testMethodName: St return when { annotationParameter == testMethodName || annotationParameter == "konsist.$testMethodName" -> true - declaration.parent !is KoFileDeclarationImpl -> checkIfSuppressed(declaration.parent as KoDeclarationImpl, testMethodName) + declaration.parent !is KoFileDeclaration -> checkIfSuppressed(declaration.parent as KoDeclarationImpl, testMethodName) fileAnnotationParameter(declaration.parent) == testMethodName -> true fileAnnotationParameter(declaration.parent) == "konsist.$testMethodName" -> true else -> false } } -private fun fileAnnotationParameter(file: KoFileDeclarationImpl) = file +private fun fileAnnotationParameter(file: KoFileDeclaration) = file .annotations .firstOrNull { it.name == "Suppress" } ?.text From 6b445fe3d1fb116c0e7f760993f821ac02adbc32 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 13:04:19 +0200 Subject: [PATCH 07/26] upd test in KoScopeForDeclarationTest to check that declarations() returns samplepackage --- .../koscope/KoScopeForDeclarationTest.kt | 38 +++++++++++++++++++ ...tains-package-and-local-declarations.kttxt | 5 +++ ...ains-package-and-nested-declarations.kttxt | 6 +++ ...-function-object-interface-property.kttxt} | 2 + .../provider/KoDeclarationProviderUtil.kt | 12 +++--- 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/{file-contains-class-function-object-interface-property.kttxt => file-contains-package-class-function-object-interface-property.kttxt} (83%) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index 7cf7665ab6..c2e5593264 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -28,6 +28,44 @@ class KoScopeForDeclarationTest { ) } + @Test + fun `file-contains-package-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-package-and-nested-declarations") + + // then + sut + .declarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "samplepackage", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-package-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-package-and-local-declarations") + + // then + sut + .declarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "samplepackage", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + @Test fun `file-contains-one-class-containing-function`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt new file mode 100644 index 0000000000..8558083cdd --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt @@ -0,0 +1,5 @@ +package com.samplepackage + +fun sampleFunction { + val sampleLocalProperty = 7 +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt new file mode 100644 index 0000000000..137ad7d8f4 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt @@ -0,0 +1,6 @@ +package com.samplepackage + +class SampleClass { + fun sampleNestedFunction() { + } +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-class-function-object-interface-property.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt similarity index 83% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-class-function-object-interface-property.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt index b0c8a043ef..c829a4d41d 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-class-function-object-interface-property.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt @@ -1,3 +1,5 @@ +package com.samplepackage + val sampleProperty: Boolean = true fun sampleFunction() { diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index cdea06ee86..84d72446f1 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclarationContainer import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtFileAnnotationList import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtImportList @@ -122,6 +123,7 @@ internal object KoDeclarationProviderUtil { private fun List.flattenDeclarations() = this.flatMap { when (it) { is KtImportList -> it.imports + is KtFileAnnotationList -> it.annotations else -> listOf(it) } } @@ -136,11 +138,11 @@ internal object KoDeclarationProviderUtil { else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") } - private fun getInstanceOfOtherDeclaration(declaration: PsiElement, parent: KoBaseDeclaration) = when { - declaration is KtImportDirective -> KoImportDeclarationImpl.getInstance(declaration, parent) - declaration is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(declaration, parent) - declaration is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(declaration, parent) - declaration is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(declaration, parent) + private fun getInstanceOfOtherDeclaration(declaration: PsiElement, parent: KoBaseDeclaration) = when (declaration) { + is KtImportDirective -> KoImportDeclarationImpl.getInstance(declaration, parent) + is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(declaration, parent) + is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(declaration, parent) + is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(declaration, parent) else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") } } From 576473aad28edfc0c1ccffb4ec5d98aa819f06c3 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:00:19 +0200 Subject: [PATCH 08/26] upd assert method <- when file has Suppress(testMethod) annotation and we call KoScope.declarations() we must ignore this annotation --- .../com/lemonappdev/konsist/core/verify/Assert.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index 80ef62010d..3c9d25fc33 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -1,7 +1,7 @@ package com.lemonappdev.konsist.core.verify +import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl @@ -29,7 +29,7 @@ private fun Sequence.assert(function: (E) -> Boolean? val checkMethodName = Thread.currentThread().stackTrace[2].methodName throw KoPreconditionFailedException( "Declaration list is empty. Please make sure that list of declarations contain items " + - "before calling the '$checkMethodName' method.", + "before calling the '$checkMethodName' method.", ) } @@ -79,7 +79,13 @@ private fun checkIfAnnotatedWithSuppress(localList: List val testMethodName = Thread.currentThread().stackTrace[4].methodName val declarations: MutableMap = mutableMapOf() - localList.forEach { declarations[it] = checkIfSuppressed(it as KoDeclarationImpl, testMethodName) } + localList + .filterNot { + it is KoAnnotationDeclaration + && (it.text.endsWith("Suppress(\"konsist.$testMethodName\")") + || it.text.endsWith("Suppress(\"$testMethodName\")")) + } + .forEach { declarations[it] = checkIfSuppressed(it as KoDeclarationImpl, testMethodName) } val withoutSuppress = mutableListOf() From 2fd7def54c84fd5a898ae7997d03aaac1dbbe18d Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:14:57 +0200 Subject: [PATCH 09/26] add KoScope.annotations() and tests --- .../scope/koscope/KoScopeForAnnotationTest.kt | 40 +++++++++++++++++++ .../file-contains-annotation.kttxt | 8 ++++ .../file-contains-no-annotation.kttxt | 2 + .../com/lemonappdev/konsist/api/KoScope.kt | 6 +++ .../provider/KoDeclarationProviderUtil.kt | 30 +++++++------- .../konsist/core/scope/KoScopeImpl.kt | 2 + 6 files changed, 73 insertions(+), 15 deletions(-) create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-annotation.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-no-annotation.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt new file mode 100644 index 0000000000..f8207e0588 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt @@ -0,0 +1,40 @@ +package com.lemonappdev.konsist.core.scope.koscope + +import com.lemonappdev.konsist.TestSnippetProvider +import org.amshove.kluent.shouldBeEqualTo +import org.junit.jupiter.api.Test + +class KoScopeForAnnotationTest { + + @Test + fun `file-contains-annotation`() { + // given + val sut = getSnippetFile("file-contains-annotation") + + // then + sut + .annotations() + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf("SampleAnnotation1"), + ) + } + + @Test + fun `file-contains-no-annotation`() { + // given + val sut = getSnippetFile("file-contains-no-annotation") + + // then + sut + .annotations() + .toList() + .shouldBeEqualTo( + emptyList(), + ) + } + + private fun getSnippetFile(fileName: String) = + TestSnippetProvider.getSnippetKoScope("core/scope/koscope/snippet/forannotation/", fileName) +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-annotation.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-annotation.kttxt new file mode 100644 index 0000000000..5f7c6290a3 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-annotation.kttxt @@ -0,0 +1,8 @@ +@file: SampleAnnotation1 + +import com.lemonappdev.konsist.testdata.SampleAnnotation1 +import com.lemonappdev.konsist.testdata.SampleAnnotation2 + +@SampleAnnotation2 +class SampleClass { +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-no-annotation.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-no-annotation.kttxt new file mode 100644 index 0000000000..2f782ab5b3 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forannotation/file-contains-no-annotation.kttxt @@ -0,0 +1,2 @@ +class SampleClass { +} diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index f14620f20b..6ad4837b69 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -1,5 +1,6 @@ package com.lemonappdev.konsist.api +import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration @@ -79,6 +80,11 @@ interface KoScope { */ fun imports(): Sequence + /** + * The annotations present in the scope. + */ + fun annotations(): Sequence + /** * The packages present in the scope. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 84d72446f1..c72c0bdec1 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -123,26 +123,26 @@ internal object KoDeclarationProviderUtil { private fun List.flattenDeclarations() = this.flatMap { when (it) { is KtImportList -> it.imports - is KtFileAnnotationList -> it.annotations + is KtFileAnnotationList -> it.annotationEntries else -> listOf(it) } } - private fun getInstanceOfKtDeclaration(declaration: KtDeclaration, parent: KoBaseDeclaration) = when { - declaration is KtClass && !declaration.isInterface() -> KoClassDeclarationImpl.getInstance(declaration, parent) - declaration is KtClass && declaration.isInterface() -> KoInterfaceDeclarationImpl.getInstance(declaration, parent) - declaration is KtObjectDeclaration && !declaration.isCompanion() -> KoObjectDeclarationImpl.getInstance(declaration, parent) - declaration is KtObjectDeclaration && declaration.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(declaration, parent) - declaration is KtProperty -> KoPropertyDeclarationImpl.getInstance(declaration, parent) - declaration is KtFunction -> KoFunctionDeclarationImpl.getInstance(declaration, parent) - else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") + private fun getInstanceOfKtDeclaration(ktDeclaration: KtDeclaration, parent: KoBaseDeclaration) = when { + ktDeclaration is KtClass && !ktDeclaration.isInterface() -> KoClassDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtClass && ktDeclaration.isInterface() -> KoInterfaceDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtObjectDeclaration && !ktDeclaration.isCompanion() -> KoObjectDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtObjectDeclaration && ktDeclaration.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtProperty -> KoPropertyDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtFunction -> KoFunctionDeclarationImpl.getInstance(ktDeclaration, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${ktDeclaration.getTextWithLocation()}") } - private fun getInstanceOfOtherDeclaration(declaration: PsiElement, parent: KoBaseDeclaration) = when (declaration) { - is KtImportDirective -> KoImportDeclarationImpl.getInstance(declaration, parent) - is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(declaration, parent) - is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(declaration, parent) - is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(declaration, parent) - else -> throw KoUnsupportedOperationException("Unknown declaration type: ${declaration.getTextWithLocation()}") + private fun getInstanceOfOtherDeclaration(psiElement: PsiElement, parent: KoBaseDeclaration) = when (psiElement) { + is KtImportDirective -> KoImportDeclarationImpl.getInstance(psiElement, parent) + is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(psiElement, parent) + is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(psiElement, parent) + is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(psiElement, parent) + else -> throw KoUnsupportedOperationException("Unknown declaration type: ${psiElement.getTextWithLocation()}") } } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index ad0129e29a..dca4f6e64a 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -58,6 +58,8 @@ class KoScopeImpl( override fun imports() = koFiles.flatMap { it.imports } + override fun annotations() = koFiles.flatMap { it.annotations } + override fun packages() = koFiles.mapNotNull { it.packagee } override fun typeAliases() = koFiles.flatMap { it.typeAliases } From d17e0187cb8b926065f03c7648c874f2814fbe73 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:29:32 +0200 Subject: [PATCH 10/26] fix tests after adding new KoScopeTest class --- .../konsist/core/scope/koscope/KoScopeOperatorTest.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt index a0e2c56f9d..647afd9cbc 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt @@ -28,6 +28,7 @@ class KoScopeOperatorTest { .toList() .shouldBeEqualTo( listOf( + "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", "KoScopeForCompanionObjectTest.kt", "KoScopeForDeclarationTest.kt", @@ -62,6 +63,7 @@ class KoScopeOperatorTest { .toList() .shouldBeEqualTo( listOf( + "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", "KoScopeForCompanionObjectTest.kt", "KoScopeForFunctionTest.kt", @@ -112,6 +114,7 @@ class KoScopeOperatorTest { .toList() .shouldBeEqualTo( listOf( + "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", "KoScopeForCompanionObjectTest.kt", "KoScopeForDeclarationTest.kt", @@ -146,6 +149,7 @@ class KoScopeOperatorTest { .toList() .shouldBeEqualTo( listOf( + "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", "KoScopeForCompanionObjectTest.kt", "KoScopeForFunctionTest.kt", From df333f8be44ba5c350baf57d76533bc50cec9581 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:36:28 +0200 Subject: [PATCH 11/26] add tests for KoScope.declarations() <- to be sure that this method returns all declarations (also typealiases, imports, packages, annotations) --- .../koscope/KoScopeForDeclarationTest.kt | 130 +++++++++++++++++- ...le-contains-all-type-of-declarations.kttxt | 24 ++++ ...s-annotations-and-local-declarations.kttxt | 9 ++ ...-annotations-and-nested-declarations.kttxt | 10 ++ ...tains-imports-and-local-declarations.kttxt | 6 + ...ains-imports-and-nested-declarations.kttxt | 7 + ...s-function-object-interface-property.kttxt | 16 --- ...ins-typealias-and-local-declarations.kttxt | 5 + ...ns-typealias-and-nested-declarations.kttxt | 6 + .../provider/KoDeclarationProviderUtil.kt | 2 +- 10 files changed, 196 insertions(+), 19 deletions(-) create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-all-type-of-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index c2e5593264..7711722df1 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -1,15 +1,16 @@ package com.lemonappdev.konsist.core.scope.koscope import com.lemonappdev.konsist.TestSnippetProvider +import com.lemonappdev.konsist.api.declaration.KoImportDeclaration import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test class KoScopeForDeclarationTest { @Test - fun `file-contains-package-class-function-object-interface-property`() { + fun `file-contains-all-type-of-declarations`() { // given - val sut = getSnippetFile("file-contains-package-class-function-object-interface-property") + val sut = getSnippetFile("file-contains-all-type-of-declarations") // then sut @@ -18,12 +19,17 @@ class KoScopeForDeclarationTest { .toList() .shouldBeEqualTo( listOf( + "SampleAnnotation1", + "SampleAnnotation2", "samplepackage", + "com.lemonappdev.konsist.testdata.SampleAnnotation1", + "com.lemonappdev.konsist.testdata.SampleAnnotation2", "sampleProperty", "sampleFunction", "SampleClass", "SampleInterface", "SampleObject", + "SampleTypeAlias", ), ) } @@ -66,6 +72,126 @@ class KoScopeForDeclarationTest { ) } + @Test + fun `file-contains-imports-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-imports-and-nested-declarations") + + // then + sut + .declarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "com.sampleimport1", + "com.sampleimport2", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-imports-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-imports-and-local-declarations") + + // then + sut + .declarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "com.sampleimport1", + "com.sampleimport2", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + + @Test + fun `file-contains-annotations-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-annotations-and-nested-declarations") + + // then + sut + .declarations(includeNested = true) + .filterNot { it is KoImportDeclaration } + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleAnnotation1", + "SampleAnnotation2", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-annotations-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-annotations-and-local-declarations") + + // then + sut + .declarations(includeLocal = true) + .filterNot { it is KoImportDeclaration } + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleAnnotation1", + "SampleAnnotation2", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + + @Test + fun `file-contains-typealias-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-typealias-and-nested-declarations") + + // then + sut + .declarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleClass", + "sampleNestedFunction", + "SampleTypeAlias", + ), + ) + } + + @Test + fun `file-contains-typealias-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-typealias-and-local-declarations") + + // then + sut + .declarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "sampleFunction", + "sampleLocalProperty", + "SampleTypeAlias" + ), + ) + } + @Test fun `file-contains-one-class-containing-function`() { // given diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-all-type-of-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-all-type-of-declarations.kttxt new file mode 100644 index 0000000000..7c5ebd23cb --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-all-type-of-declarations.kttxt @@ -0,0 +1,24 @@ +@file:SampleAnnotation1 +@file:SampleAnnotation2 + +package com.samplepackage + +import com.lemonappdev.konsist.testdata.SampleAnnotation1 +import com.lemonappdev.konsist.testdata.SampleAnnotation2 + +val sampleProperty: Boolean = true + +fun sampleFunction() { +} + +class SampleClass { +} + +interface SampleInterface { +} + +@SampleAnnotation1 +object SampleObject { +} + +typealias SampleTypeAlias = () -> Int diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt new file mode 100644 index 0000000000..c7f6bbc859 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt @@ -0,0 +1,9 @@ +@file:SampleAnnotation1 +@file:SampleAnnotation2 + +import com.lemonappdev.konsist.testdata.SampleAnnotation1 +import com.lemonappdev.konsist.testdata.SampleAnnotation2 + +fun sampleFunction { + val sampleLocalProperty = 7 +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt new file mode 100644 index 0000000000..b471c7b0a6 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt @@ -0,0 +1,10 @@ +@file:SampleAnnotation1 +@file:SampleAnnotation2 + +import com.lemonappdev.konsist.testdata.SampleAnnotation1 +import com.lemonappdev.konsist.testdata.SampleAnnotation2 + +class SampleClass { + fun sampleNestedFunction() { + } +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt new file mode 100644 index 0000000000..c1ff6476d7 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt @@ -0,0 +1,6 @@ +import com.sampleimport1 +import com.sampleimport2 + +fun sampleFunction { + val sampleLocalProperty = 7 +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt new file mode 100644 index 0000000000..59d83087f2 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt @@ -0,0 +1,7 @@ +import com.sampleimport1 +import com.sampleimport2 + +class SampleClass { + fun sampleNestedFunction() { + } +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt deleted file mode 100644 index c829a4d41d..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-class-function-object-interface-property.kttxt +++ /dev/null @@ -1,16 +0,0 @@ -package com.samplepackage - -val sampleProperty: Boolean = true - -fun sampleFunction() { -} - -class SampleClass { -} - -interface SampleInterface { -} - -object SampleObject { -} - diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt new file mode 100644 index 0000000000..338e0f7508 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt @@ -0,0 +1,5 @@ +fun sampleFunction { + val sampleLocalProperty = 7 +} + +typealias SampleTypeAlias = () -> Int diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt new file mode 100644 index 0000000000..427d8c6223 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt @@ -0,0 +1,6 @@ +class SampleClass { + fun sampleNestedFunction() { + } +} + +typealias SampleTypeAlias = () -> Int diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index c72c0bdec1..82aaa3ac9f 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -135,6 +135,7 @@ internal object KoDeclarationProviderUtil { ktDeclaration is KtObjectDeclaration && ktDeclaration.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtProperty -> KoPropertyDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtFunction -> KoFunctionDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(ktDeclaration, parent) else -> throw KoUnsupportedOperationException("Unknown declaration type: ${ktDeclaration.getTextWithLocation()}") } @@ -142,7 +143,6 @@ internal object KoDeclarationProviderUtil { is KtImportDirective -> KoImportDeclarationImpl.getInstance(psiElement, parent) is KtPackageDirective -> KoPackageDeclarationImpl.getInstance(psiElement, parent) is KtAnnotationEntry -> KoAnnotationDeclarationImpl.getInstance(psiElement, parent) - is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(psiElement, parent) else -> throw KoUnsupportedOperationException("Unknown declaration type: ${psiElement.getTextWithLocation()}") } } From de468fe25aff43484631cf5f451cacfc075c01b8 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:40:21 +0200 Subject: [PATCH 12/26] fix spotless and detekt --- .../core/scope/koscope/KoScopeForDeclarationTest.kt | 2 +- .../declaration/provider/KoDeclarationProviderUtil.kt | 3 ++- .../com/lemonappdev/konsist/core/verify/Assert.kt | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index 7711722df1..1e7ea9bf60 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -187,7 +187,7 @@ class KoScopeForDeclarationTest { listOf( "sampleFunction", "sampleLocalProperty", - "SampleTypeAlias" + "SampleTypeAlias", ), ) } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 82aaa3ac9f..212ff86b62 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -132,7 +132,8 @@ internal object KoDeclarationProviderUtil { ktDeclaration is KtClass && !ktDeclaration.isInterface() -> KoClassDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtClass && ktDeclaration.isInterface() -> KoInterfaceDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtObjectDeclaration && !ktDeclaration.isCompanion() -> KoObjectDeclarationImpl.getInstance(ktDeclaration, parent) - ktDeclaration is KtObjectDeclaration && ktDeclaration.isCompanion() -> KoCompanionObjectDeclarationImpl.getInstance(ktDeclaration, parent) + ktDeclaration is KtObjectDeclaration && ktDeclaration.isCompanion() -> + KoCompanionObjectDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtProperty -> KoPropertyDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtFunction -> KoFunctionDeclarationImpl.getInstance(ktDeclaration, parent) ktDeclaration is KtTypeAlias -> KoTypeAliasDeclarationImpl.getInstance(ktDeclaration, parent) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index 3c9d25fc33..1ae2e04092 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -29,7 +29,7 @@ private fun Sequence.assert(function: (E) -> Boolean? val checkMethodName = Thread.currentThread().stackTrace[2].methodName throw KoPreconditionFailedException( "Declaration list is empty. Please make sure that list of declarations contain items " + - "before calling the '$checkMethodName' method.", + "before calling the '$checkMethodName' method.", ) } @@ -81,9 +81,11 @@ private fun checkIfAnnotatedWithSuppress(localList: List localList .filterNot { - it is KoAnnotationDeclaration - && (it.text.endsWith("Suppress(\"konsist.$testMethodName\")") - || it.text.endsWith("Suppress(\"$testMethodName\")")) + it is KoAnnotationDeclaration && + ( + it.text.endsWith("Suppress(\"konsist.$testMethodName\")") || + it.text.endsWith("Suppress(\"$testMethodName\")") + ) } .forEach { declarations[it] = checkIfSuppressed(it as KoDeclarationImpl, testMethodName) } From ffea674243f717c1db501d7c87929a0e729eebd0 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 15:48:56 +0200 Subject: [PATCH 13/26] add comment and format code --- .../core/scope/koscope/KoScopeForAnnotationTest.kt | 8 ++------ .../kotlin/com/lemonappdev/konsist/core/verify/Assert.kt | 1 + 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt index f8207e0588..5354795e74 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForAnnotationTest.kt @@ -16,9 +16,7 @@ class KoScopeForAnnotationTest { .annotations() .map { it.name } .toList() - .shouldBeEqualTo( - listOf("SampleAnnotation1"), - ) + .shouldBeEqualTo(listOf("SampleAnnotation1")) } @Test @@ -30,9 +28,7 @@ class KoScopeForAnnotationTest { sut .annotations() .toList() - .shouldBeEqualTo( - emptyList(), - ) + .shouldBeEqualTo(emptyList()) } private fun getSnippetFile(fileName: String) = diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index 1ae2e04092..b3f2e72ff0 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -79,6 +79,7 @@ private fun checkIfAnnotatedWithSuppress(localList: List val testMethodName = Thread.currentThread().stackTrace[4].methodName val declarations: MutableMap = mutableMapOf() + // First we need to exclude (if exist) file suppress test annotation localList .filterNot { it is KoAnnotationDeclaration && From fa77e1f52a0121a05398881ad5d6de84c880f22f Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 17:09:14 +0200 Subject: [PATCH 14/26] rename declarations() for namedDeclarations() and add kDocs to PsiDeclaration instead of KoDeclaration --- .../kopsideclaration/KoPsiDeclarationTest.kt | 2 +- .../koscope/KoScopeForDeclarationTest.kt | 24 ++-- .../konsist/core/verify/assert/AssertTest.kt | 12 +- .../lemonappdev/konsist/api/ApiKonsistTest.kt | 2 +- .../com/lemonappdev/konsist/api/KoScope.kt | 4 +- .../konsist/api/declaration/KoDeclaration.kt | 10 -- .../api/declaration/KoPsiDeclaration.kt | 10 ++ .../ext/sequence/KoDeclarationSequenceExt.kt | 28 ---- .../sequence/KoPsiDeclarationSequenceExt.kt | 30 +++++ .../core/declaration/KoDeclarationImpl.kt | 11 -- .../core/declaration/KoPsiDeclarationImpl.kt | 12 ++ .../provider/KoDeclarationProvider.kt | 2 +- .../konsist/core/scope/KoScopeImpl.kt | 2 +- .../lemonappdev/konsist/core/verify/Assert.kt | 14 +- .../sequence/KoDeclarationSequenceExtTest.kt | 123 ----------------- .../KoPsiDeclarationSequenceExtTest.kt | 126 ++++++++++++++++++ 16 files changed, 210 insertions(+), 202 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kopsideclaration/KoPsiDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kopsideclaration/KoPsiDeclarationTest.kt index c90640beb8..51d67963b0 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kopsideclaration/KoPsiDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kopsideclaration/KoPsiDeclarationTest.kt @@ -133,7 +133,7 @@ class KoPsiDeclarationTest { fun `text`() { // given val sut = getSnippetFile("text") - .declarations() + .namedDeclarations() .first() // then diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index 1e7ea9bf60..fd9078945a 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -14,7 +14,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations() + .namedDeclarations() .map { it.name } .toList() .shouldBeEqualTo( @@ -41,7 +41,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -60,7 +60,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeLocal = true) + .namedDeclarations(includeLocal = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -79,7 +79,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -99,7 +99,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeLocal = true) + .namedDeclarations(includeLocal = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -119,7 +119,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .filterNot { it is KoImportDeclaration } .map { it.name } .toList() @@ -140,7 +140,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeLocal = true) + .namedDeclarations(includeLocal = true) .filterNot { it is KoImportDeclaration } .map { it.name } .toList() @@ -161,7 +161,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -180,7 +180,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeLocal = true) + .namedDeclarations(includeLocal = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -199,7 +199,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -217,7 +217,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .map { it.name } .toList() .shouldBeEqualTo( @@ -236,7 +236,7 @@ class KoScopeForDeclarationTest { // then sut - .declarations(includeNested = false) + .namedDeclarations(includeNested = false) .map { it.name } .toList() .shouldBeEqualTo(listOf("SampleClass")) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/verify/assert/AssertTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/verify/assert/AssertTest.kt index a0c00bcc54..7470baf127 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/verify/assert/AssertTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/verify/assert/AssertTest.kt @@ -170,7 +170,7 @@ class AssertTest { fun `assert-suppress-by-konsist-and-name-at-file-level`() { // given val sut = getSnippetFile("assert-suppress-by-konsist-and-name-at-file-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } @@ -180,7 +180,7 @@ class AssertTest { fun `assert-suppress-by-name-at-file-level`() { // given val sut = getSnippetFile("assert-suppress-by-name-at-file-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } @@ -191,7 +191,7 @@ class AssertTest { // given val sut = getSnippetFile("assert-suppress-by-konsist-and-name-at-declaration-parent-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } @@ -202,7 +202,7 @@ class AssertTest { // given val sut = getSnippetFile("assert-suppress-by-name-at-declaration-parent-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } @@ -212,7 +212,7 @@ class AssertTest { fun `assert-suppress-by-konsist-and-name-at-declaration-level`() { // given val sut = getSnippetFile("assert-suppress-by-konsist-and-name-at-declaration-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } @@ -222,7 +222,7 @@ class AssertTest { fun `assert-suppress-by-name-at-declaration-level`() { // given val sut = getSnippetFile("assert-suppress-by-name-at-declaration-level") - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) // then sut.assert { it.name.endsWith("Text") } diff --git a/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt b/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt index 875fcad426..0c96d8c43c 100644 --- a/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt +++ b/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt @@ -7,7 +7,7 @@ class ApiKonsistTest { @Test fun `every api declaration has kdoc`() { apiPackageScope - .declarations(includeNested = true) + .namedDeclarations(includeNested = true) .assert { it.hasKDoc() } } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 6ad4837b69..a35719b03a 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -60,9 +60,9 @@ interface KoScope { ): Sequence /** - * The declarations present in the scope. + * The namedDeclarations present in the scope. */ - fun declarations( + fun namedDeclarations( includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoDeclaration.kt index 6f5c81d11a..8b3f808a0f 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoDeclaration.kt @@ -27,11 +27,6 @@ interface KoDeclaration : KoNamedDeclaration { */ val modifiers: List - /** - * Documentation pf the declaration. - */ - val kDoc: KoKDocDeclaration? - /** * Whether the parameter has public modifier. */ @@ -77,11 +72,6 @@ interface KoDeclaration : KoNamedDeclaration { */ fun hasModifiers(vararg koModifiers: KoModifier): Boolean - /** - * Whether the declaration has kdoc. - */ - fun hasKDoc(): Boolean - /** * Whether the declaration resides in a package. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt index 66d91a759e..31b608290f 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt @@ -29,6 +29,16 @@ interface KoPsiDeclaration { */ val locationWithText: String + /** + * Documentation pf the declaration. + */ + val kDoc: KoKDocDeclaration? + + /** + * Whether the declaration has kdoc. + */ + fun hasKDoc(): Boolean + /** * Whatever declaration reside in file path. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt index dce23901c0..1ae0bd589b 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt @@ -163,34 +163,6 @@ fun Sequence.withoutPackage(vararg packages: String): Seq packages.all { packagee -> it.resideOutsidePackage(packagee) } } -/** - * Sequence containing declarations that have KDoc. - */ -fun Sequence.withKDoc(): Sequence = filter { it.hasKDoc() } - -/** - * Sequence containing declarations that don't have the KDoc. - */ -fun Sequence.withoutKDoc(): Sequence = filterNot { it.hasKDoc() } - -/** - * Sequence containing declarations that have KDoc tags. - */ -fun Sequence.withKDocWithTags(vararg tags: KoKDocTag): Sequence = filter { it.kDoc?.hasTags(*tags) ?: false } - -/** - * Sequence containing declarations that don't have the KDoc tags. - */ -fun Sequence.withSomeKDocWithTags(vararg tags: KoKDocTag): Sequence = filter { - tags.any { tag -> it.kDoc?.hasTags(tag) ?: false } -} - -/** - * Sequence containing declarations that don't have the KDoc tags. - */ -fun Sequence.withoutKDocWithTags(vararg tags: KoKDocTag): Sequence = - filterNot { it.kDoc?.hasTags(*tags) ?: false } - /** * Print the declarations. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt index 6155f163b3..62dd001b74 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt @@ -1,7 +1,37 @@ package com.lemonappdev.konsist.api.ext.sequence +import com.lemonappdev.konsist.api.KoKDocTag import com.lemonappdev.konsist.api.declaration.KoPsiDeclaration +/** + * Sequence containing declarations that have KDoc. + */ +fun Sequence.withKDoc(): Sequence = filter { it.hasKDoc() } + +/** + * Sequence containing declarations that don't have the KDoc. + */ +fun Sequence.withoutKDoc(): Sequence = filterNot { it.hasKDoc() } + +/** + * Sequence containing declarations that have KDoc tags. + */ +fun Sequence.withKDocWithTags(vararg tags: KoKDocTag): Sequence = filter { it.kDoc?.hasTags(*tags) ?: false } + +/** + * Sequence containing declarations that don't have the KDoc tags. + */ +fun Sequence.withSomeKDocWithTags(vararg tags: KoKDocTag): Sequence = filter { + tags.any { tag -> it.kDoc?.hasTags(tag) ?: false } +} + +/** + * Sequence containing declarations that don't have the KDoc tags. + */ +fun Sequence.withoutKDocWithTags(vararg tags: KoKDocTag): Sequence = + filterNot { it.kDoc?.hasTags(*tags) ?: false } + + /** * Sequence containing declarations that have file path. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt index 398bdbd3bd..ba813fbb20 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt @@ -57,15 +57,6 @@ internal abstract class KoDeclarationImpl( ?: emptyList() } - override val kDoc by lazy { - val kDocElement = ktTypeParameterListOwner - .children - .filterIsInstance() - .firstOrNull() - - kDocElement?.let { KoKDocDeclarationImpl(kDocElement) } - } - override fun hasPublicModifier() = hasModifiers(KoModifier.PUBLIC) override fun isPublicOrDefault() = ktTypeParameterListOwner.isPublic @@ -96,8 +87,6 @@ internal abstract class KoDeclarationImpl( else -> modifiers.containsAll(koModifiers.toList()) } - override fun hasKDoc() = kDoc != null - override fun resideInPackage(packagee: String) = LocationHelper.resideInLocation(packagee, this.packagee) override fun resideOutsidePackage(packagee: String) = !resideInPackage(packagee) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoPsiDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoPsiDeclarationImpl.kt index 1fcbadc89a..3a9aadc7cc 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoPsiDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoPsiDeclarationImpl.kt @@ -3,6 +3,7 @@ package com.lemonappdev.konsist.core.declaration import com.intellij.psi.PsiElement import com.lemonappdev.konsist.api.declaration.KoPsiDeclaration import com.lemonappdev.konsist.core.util.LocationHelper +import org.jetbrains.kotlin.kdoc.psi.api.KDocElement import org.jetbrains.kotlin.psi.psiUtil.getTextWithLocation import java.io.File @@ -46,6 +47,17 @@ internal open class KoPsiDeclarationImpl(private val psiElement: PsiElement) : K override val locationWithText by lazy { "Location: $location \nDeclaration:\n$text" } + override val kDoc by lazy { + val kDocElement = psiElement + .children + .filterIsInstance() + .firstOrNull() + + kDocElement?.let { KoKDocDeclarationImpl(kDocElement) } + } + + override fun hasKDoc() = kDoc != null + override fun resideInFilePath(path: String) = LocationHelper.resideInLocation(path, filePath) override fun resideInProjectFilePath(path: String) = LocationHelper.resideInLocation(path, projectFilePath) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index bd5ba88b59..c2d5a5e76e 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -14,7 +14,7 @@ interface KoDeclarationProvider { includeLocal: Boolean = false, ): Sequence - fun containsDeclarations( + fun containsNamedDeclarations( name: String, includeNested: Boolean = false, ) = declarations(includeNested).any { it.name == name } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index dca4f6e64a..331b16dd41 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -44,7 +44,7 @@ class KoScopeImpl( ): Sequence = koFiles.flatMap { it.functions(includeNested, includeLocal) } - override fun declarations( + override fun namedDeclarations( includeNested: Boolean, includeLocal: Boolean, ): Sequence = diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index b3f2e72ff0..0a5230d6fc 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -2,6 +2,7 @@ package com.lemonappdev.konsist.core.verify import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration +import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl @@ -29,11 +30,12 @@ private fun Sequence.assert(function: (E) -> Boolean? val checkMethodName = Thread.currentThread().stackTrace[2].methodName throw KoPreconditionFailedException( "Declaration list is empty. Please make sure that list of declarations contain items " + - "before calling the '$checkMethodName' method.", + "before calling the '$checkMethodName' method.", ) } - val notSuppressedDeclarations = checkIfAnnotatedWithSuppress(localList) + val notSuppressedDeclarations = + localList.filterNot { it is KoDeclaration } + checkIfAnnotatedWithSuppress(localList.filterIsInstance()) val result = notSuppressedDeclarations.groupBy { lastDeclaration = it @@ -83,10 +85,10 @@ private fun checkIfAnnotatedWithSuppress(localList: List localList .filterNot { it is KoAnnotationDeclaration && - ( - it.text.endsWith("Suppress(\"konsist.$testMethodName\")") || - it.text.endsWith("Suppress(\"$testMethodName\")") - ) + ( + it.text.endsWith("Suppress(\"konsist.$testMethodName\")") || + it.text.endsWith("Suppress(\"$testMethodName\")") + ) } .forEach { declarations[it] = checkIfSuppressed(it as KoDeclarationImpl, testMethodName) } diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt index c32d06691d..3f99dfd8a9 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt @@ -599,127 +599,4 @@ class KoDeclarationSequenceExtTest { // then sut.toList() shouldBeEqualTo listOf(declaration3) } - - @Test - fun `withKDoc() returns declaration with any kDoc`() { - // given - val declaration1: KoDeclarationImpl = mockk { - every { hasKDoc() } returns true - } - val declaration2: KoDeclarationImpl = mockk { - every { hasKDoc() } returns false - } - val declarations = sequenceOf(declaration1, declaration2) - - // when - val sut = declarations.withKDoc() - - // then - sut.toList() shouldBeEqualTo listOf(declaration1) - } - - @Test - fun `withoutKDoc() returns declaration without any kDoc`() { - // given - val declaration1: KoDeclarationImpl = mockk { - every { hasKDoc() } returns true - } - val declaration2: KoDeclarationImpl = mockk { - every { hasKDoc() } returns false - } - val declarations = sequenceOf(declaration1, declaration2) - - // when - val sut = declarations.withoutKDoc() - - // then - sut.toList() shouldBeEqualTo listOf(declaration2) - } - - @Test - fun `withKDocWithTags(String) returns declaration with all of given tags`() { - // given - val tag1 = SINCE - val tag2 = SEE - val kDoc1: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1, tag2) } returns true - } - val declaration1: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc1 - } - val kDoc2: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1, tag2) } returns false - } - val declaration2: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc2 - } - val declarations = sequenceOf(declaration1, declaration2) - - // when - val sut = declarations.withKDocWithTags(tag1, tag2) - - // then - sut.toList() shouldBeEqualTo listOf(declaration1) - } - - @Test - fun `withoutKDocWithTags(String) returns declaration without any of given tags`() { - // given - val tag1 = SINCE - val tag2 = SEE - val kDoc1: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1, tag2) } returns true - } - val declaration1: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc1 - } - val kDoc2: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1, tag2) } returns false - } - val declaration2: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc2 - } - val declarations = sequenceOf(declaration1, declaration2) - - // when - val sut = declarations.withoutKDocWithTags(tag1, tag2) - - // then - sut.toList() shouldBeEqualTo listOf(declaration2) - } - - @Test - fun `withSomeKDocWithTags(String) returns declarations with at least one of given tags`() { - // given - val tag1 = SINCE - val tag2 = SEE - val kDoc1: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1) } returns true - every { hasTags(tag2) } returns true - } - val declaration1: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc1 - } - val kDoc2: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1) } returns true - every { hasTags(tag2) } returns false - } - val declaration2: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc2 - } - val kDoc3: KoKDocDeclarationImpl = mockk { - every { hasTags(tag1) } returns false - every { hasTags(tag2) } returns false - } - val declaration3: KoDeclarationImpl = mockk { - every { kDoc } returns kDoc3 - } - val declarations = sequenceOf(declaration1, declaration2, declaration3) - - // when - val sut = declarations.withSomeKDocWithTags(tag1, tag2) - - // then - sut.toList() shouldBeEqualTo listOf(declaration1, declaration2) - } } diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt index 74ccff3c40..0ea0860ae3 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt @@ -1,5 +1,8 @@ package com.lemonappdev.konsist.api.ext.sequence +import com.lemonappdev.konsist.api.KoKDocTag +import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl +import com.lemonappdev.konsist.core.declaration.KoKDocDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoPsiDeclarationImpl import io.mockk.every import io.mockk.mockk @@ -7,6 +10,129 @@ import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test class KoPsiDeclarationSequenceExtTest { + @Test + fun `withKDoc() returns psiDeclaration with any kDoc`() { + // given + val psiDeclaration1: KoPsiDeclarationImpl = mockk { + every { hasKDoc() } returns true + } + val psiDeclaration2: KoPsiDeclarationImpl = mockk { + every { hasKDoc() } returns false + } + val psiDeclarations = sequenceOf(psiDeclaration1, psiDeclaration2) + + // when + val sut = psiDeclarations.withKDoc() + + // then + sut.toList() shouldBeEqualTo listOf(psiDeclaration1) + } + + @Test + fun `withoutKDoc() returns psiDeclaration without any kDoc`() { + // given + val psiDeclaration1: KoPsiDeclarationImpl = mockk { + every { hasKDoc() } returns true + } + val psiDeclaration2: KoPsiDeclarationImpl = mockk { + every { hasKDoc() } returns false + } + val psiDeclarations = sequenceOf(psiDeclaration1, psiDeclaration2) + + // when + val sut = psiDeclarations.withoutKDoc() + + // then + sut.toList() shouldBeEqualTo listOf(psiDeclaration2) + } + + @Test + fun `withKDocWithTags(String) returns psiDeclaration with all of given tags`() { + // given + val tag1 = KoKDocTag.SINCE + val tag2 = KoKDocTag.SEE + val kDoc1: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1, tag2) } returns true + } + val psiDeclaration1: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc1 + } + val kDoc2: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1, tag2) } returns false + } + val psiDeclaration2: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc2 + } + val psiDeclarations = sequenceOf(psiDeclaration1, psiDeclaration2) + + // when + val sut = psiDeclarations.withKDocWithTags(tag1, tag2) + + // then + sut.toList() shouldBeEqualTo listOf(psiDeclaration1) + } + + @Test + fun `withoutKDocWithTags(String) returns psiDeclaration without any of given tags`() { + // given + val tag1 = KoKDocTag.SINCE + val tag2 = KoKDocTag.SEE + val kDoc1: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1, tag2) } returns true + } + val psiDeclaration1: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc1 + } + val kDoc2: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1, tag2) } returns false + } + val psiDeclaration2: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc2 + } + val psiDeclarations = sequenceOf(psiDeclaration1, psiDeclaration2) + + // when + val sut = psiDeclarations.withoutKDocWithTags(tag1, tag2) + + // then + sut.toList() shouldBeEqualTo listOf(psiDeclaration2) + } + + @Test + fun `withSomeKDocWithTags(String) returns psiDeclarations with at least one of given tags`() { + // given + val tag1 = KoKDocTag.SINCE + val tag2 = KoKDocTag.SEE + val kDoc1: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1) } returns true + every { hasTags(tag2) } returns true + } + val psiDeclaration1: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc1 + } + val kDoc2: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1) } returns true + every { hasTags(tag2) } returns false + } + val psiDeclaration2: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc2 + } + val kDoc3: KoKDocDeclarationImpl = mockk { + every { hasTags(tag1) } returns false + every { hasTags(tag2) } returns false + } + val psiDeclaration3: KoPsiDeclarationImpl = mockk { + every { kDoc } returns kDoc3 + } + val psiDeclarations = sequenceOf(psiDeclaration1, psiDeclaration2, psiDeclaration3) + + // when + val sut = psiDeclarations.withSomeKDocWithTags(tag1, tag2) + + // then + sut.toList() shouldBeEqualTo listOf(psiDeclaration1, psiDeclaration2) + } + @Test fun `withFilePath(String) returns psiDeclarations with one of given paths`() { // given From e09eba7b69b8200d8d59a7409615d8594537b043 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 17:52:23 +0200 Subject: [PATCH 15/26] add KoScope.declarations() method and test --- .../koscope/KoScopeForDeclarationTest.kt | 215 +-------------- .../koscope/KoScopeForNamedDeclarationTest.kt | 247 ++++++++++++++++++ ...tains-all-type-of-named-declarations.kttxt | 24 ++ ...s-annotations-and-local-declarations.kttxt | 0 ...-annotations-and-nested-declarations.kttxt | 0 ...tains-imports-and-local-declarations.kttxt | 0 ...ains-imports-and-nested-declarations.kttxt | 0 ...ass-containing-function-and-property.kttxt | 0 ...ntains-one-class-containing-function.kttxt | 0 ...tains-package-and-local-declarations.kttxt | 0 ...ains-package-and-nested-declarations.kttxt | 0 ...ins-typealias-and-local-declarations.kttxt | 0 ...ns-typealias-and-nested-declarations.kttxt | 0 .../com/lemonappdev/konsist/api/KoScope.kt | 11 +- .../konsist/core/scope/KoScopeImpl.kt | 7 + 15 files changed, 289 insertions(+), 215 deletions(-) create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForNamedDeclarationTest.kt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-all-type-of-named-declarations.kttxt rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-annotations-and-local-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-annotations-and-nested-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-imports-and-local-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-imports-and-nested-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-one-class-containing-function-and-property.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-one-class-containing-function.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-package-and-local-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-package-and-nested-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-typealias-and-local-declarations.kttxt (100%) rename lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/{fordeclaration => fornameddeclaration}/file-contains-typealias-and-nested-declarations.kttxt (100%) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index fd9078945a..b2726d0a33 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -14,16 +14,11 @@ class KoScopeForDeclarationTest { // then sut - .namedDeclarations() + .declarations() .map { it.name } .toList() .shouldBeEqualTo( listOf( - "SampleAnnotation1", - "SampleAnnotation2", - "samplepackage", - "com.lemonappdev.konsist.testdata.SampleAnnotation1", - "com.lemonappdev.konsist.testdata.SampleAnnotation2", "sampleProperty", "sampleFunction", "SampleClass", @@ -34,214 +29,6 @@ class KoScopeForDeclarationTest { ) } - @Test - fun `file-contains-package-and-nested-declarations`() { - // given - val sut = getSnippetFile("file-contains-package-and-nested-declarations") - - // then - sut - .namedDeclarations(includeNested = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "samplepackage", - "SampleClass", - "sampleNestedFunction", - ), - ) - } - - @Test - fun `file-contains-package-and-local-declarations`() { - // given - val sut = getSnippetFile("file-contains-package-and-local-declarations") - - // then - sut - .namedDeclarations(includeLocal = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "samplepackage", - "sampleFunction", - "sampleLocalProperty", - ), - ) - } - - @Test - fun `file-contains-imports-and-nested-declarations`() { - // given - val sut = getSnippetFile("file-contains-imports-and-nested-declarations") - - // then - sut - .namedDeclarations(includeNested = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "com.sampleimport1", - "com.sampleimport2", - "SampleClass", - "sampleNestedFunction", - ), - ) - } - - @Test - fun `file-contains-imports-and-local-declarations`() { - // given - val sut = getSnippetFile("file-contains-imports-and-local-declarations") - - // then - sut - .namedDeclarations(includeLocal = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "com.sampleimport1", - "com.sampleimport2", - "sampleFunction", - "sampleLocalProperty", - ), - ) - } - - @Test - fun `file-contains-annotations-and-nested-declarations`() { - // given - val sut = getSnippetFile("file-contains-annotations-and-nested-declarations") - - // then - sut - .namedDeclarations(includeNested = true) - .filterNot { it is KoImportDeclaration } - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "SampleAnnotation1", - "SampleAnnotation2", - "SampleClass", - "sampleNestedFunction", - ), - ) - } - - @Test - fun `file-contains-annotations-and-local-declarations`() { - // given - val sut = getSnippetFile("file-contains-annotations-and-local-declarations") - - // then - sut - .namedDeclarations(includeLocal = true) - .filterNot { it is KoImportDeclaration } - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "SampleAnnotation1", - "SampleAnnotation2", - "sampleFunction", - "sampleLocalProperty", - ), - ) - } - - @Test - fun `file-contains-typealias-and-nested-declarations`() { - // given - val sut = getSnippetFile("file-contains-typealias-and-nested-declarations") - - // then - sut - .namedDeclarations(includeNested = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "SampleClass", - "sampleNestedFunction", - "SampleTypeAlias", - ), - ) - } - - @Test - fun `file-contains-typealias-and-local-declarations`() { - // given - val sut = getSnippetFile("file-contains-typealias-and-local-declarations") - - // then - sut - .namedDeclarations(includeLocal = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "sampleFunction", - "sampleLocalProperty", - "SampleTypeAlias", - ), - ) - } - - @Test - fun `file-contains-one-class-containing-function`() { - // given - val sut = getSnippetFile("file-contains-one-class-containing-function") - - // then - sut - .namedDeclarations(includeNested = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "SampleClass", - "sampleNestedFunction", - ), - ) - } - - @Test - fun `file-contains-one-class-containing-function-and-property includeNested true`() { - // given - val sut = getSnippetFile("file-contains-one-class-containing-function-and-property") - - // then - sut - .namedDeclarations(includeNested = true) - .map { it.name } - .toList() - .shouldBeEqualTo( - listOf( - "SampleClass", - "sampleNestedProperty", - "sampleNestedFunction", - ), - ) - } - - @Test - fun `file-contains-one-class-containing-function-and-property includeNested false`() { - // given - val sut = getSnippetFile("file-contains-one-class-containing-function-and-property") - - // then - sut - .namedDeclarations(includeNested = false) - .map { it.name } - .toList() - .shouldBeEqualTo(listOf("SampleClass")) - } - private fun getSnippetFile(fileName: String) = TestSnippetProvider.getSnippetKoScope("core/scope/koscope/snippet/fordeclaration/", fileName) } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForNamedDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForNamedDeclarationTest.kt new file mode 100644 index 0000000000..6dc575cecf --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForNamedDeclarationTest.kt @@ -0,0 +1,247 @@ +package com.lemonappdev.konsist.core.scope.koscope + +import com.lemonappdev.konsist.TestSnippetProvider +import com.lemonappdev.konsist.api.declaration.KoImportDeclaration +import org.amshove.kluent.shouldBeEqualTo +import org.junit.jupiter.api.Test + +class KoScopeForNamedDeclarationTest { + + @Test + fun `file-contains-all-type-of-named-declarations`() { + // given + val sut = getSnippetFile("file-contains-all-type-of-named-declarations") + + // then + sut + .namedDeclarations() + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleAnnotation1", + "SampleAnnotation2", + "samplepackage", + "com.lemonappdev.konsist.testdata.SampleAnnotation1", + "com.lemonappdev.konsist.testdata.SampleAnnotation2", + "sampleProperty", + "sampleFunction", + "SampleClass", + "SampleInterface", + "SampleObject", + "SampleTypeAlias", + ), + ) + } + + @Test + fun `file-contains-package-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-package-and-nested-declarations") + + // then + sut + .namedDeclarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "samplepackage", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-package-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-package-and-local-declarations") + + // then + sut + .namedDeclarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "samplepackage", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + + @Test + fun `file-contains-imports-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-imports-and-nested-declarations") + + // then + sut + .namedDeclarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "com.sampleimport1", + "com.sampleimport2", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-imports-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-imports-and-local-declarations") + + // then + sut + .namedDeclarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "com.sampleimport1", + "com.sampleimport2", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + + @Test + fun `file-contains-annotations-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-annotations-and-nested-declarations") + + // then + sut + .namedDeclarations(includeNested = true) + .filterNot { it is KoImportDeclaration } + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleAnnotation1", + "SampleAnnotation2", + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-annotations-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-annotations-and-local-declarations") + + // then + sut + .namedDeclarations(includeLocal = true) + .filterNot { it is KoImportDeclaration } + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleAnnotation1", + "SampleAnnotation2", + "sampleFunction", + "sampleLocalProperty", + ), + ) + } + + @Test + fun `file-contains-typealias-and-nested-declarations`() { + // given + val sut = getSnippetFile("file-contains-typealias-and-nested-declarations") + + // then + sut + .namedDeclarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleClass", + "sampleNestedFunction", + "SampleTypeAlias", + ), + ) + } + + @Test + fun `file-contains-typealias-and-local-declarations`() { + // given + val sut = getSnippetFile("file-contains-typealias-and-local-declarations") + + // then + sut + .namedDeclarations(includeLocal = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "sampleFunction", + "sampleLocalProperty", + "SampleTypeAlias", + ), + ) + } + + @Test + fun `file-contains-one-class-containing-function`() { + // given + val sut = getSnippetFile("file-contains-one-class-containing-function") + + // then + sut + .namedDeclarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleClass", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-one-class-containing-function-and-property includeNested true`() { + // given + val sut = getSnippetFile("file-contains-one-class-containing-function-and-property") + + // then + sut + .namedDeclarations(includeNested = true) + .map { it.name } + .toList() + .shouldBeEqualTo( + listOf( + "SampleClass", + "sampleNestedProperty", + "sampleNestedFunction", + ), + ) + } + + @Test + fun `file-contains-one-class-containing-function-and-property includeNested false`() { + // given + val sut = getSnippetFile("file-contains-one-class-containing-function-and-property") + + // then + sut + .namedDeclarations(includeNested = false) + .map { it.name } + .toList() + .shouldBeEqualTo(listOf("SampleClass")) + } + + private fun getSnippetFile(fileName: String) = + TestSnippetProvider.getSnippetKoScope("core/scope/koscope/snippet/fornameddeclaration/", fileName) +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-all-type-of-named-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-all-type-of-named-declarations.kttxt new file mode 100644 index 0000000000..7c5ebd23cb --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-all-type-of-named-declarations.kttxt @@ -0,0 +1,24 @@ +@file:SampleAnnotation1 +@file:SampleAnnotation2 + +package com.samplepackage + +import com.lemonappdev.konsist.testdata.SampleAnnotation1 +import com.lemonappdev.konsist.testdata.SampleAnnotation2 + +val sampleProperty: Boolean = true + +fun sampleFunction() { +} + +class SampleClass { +} + +interface SampleInterface { +} + +@SampleAnnotation1 +object SampleObject { +} + +typealias SampleTypeAlias = () -> Int diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-annotations-and-local-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-local-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-annotations-and-local-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-annotations-and-nested-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-annotations-and-nested-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-annotations-and-nested-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-imports-and-local-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-local-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-imports-and-local-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-imports-and-nested-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-imports-and-nested-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-imports-and-nested-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-one-class-containing-function-and-property.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-one-class-containing-function-and-property.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-one-class-containing-function-and-property.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-one-class-containing-function-and-property.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-one-class-containing-function.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-one-class-containing-function.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-one-class-containing-function.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-one-class-containing-function.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-package-and-local-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-local-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-package-and-local-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-package-and-nested-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-package-and-nested-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-package-and-nested-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-typealias-and-local-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-local-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-typealias-and-local-declarations.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-typealias-and-nested-declarations.kttxt similarity index 100% rename from lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fordeclaration/file-contains-typealias-and-nested-declarations.kttxt rename to lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/fornameddeclaration/file-contains-typealias-and-nested-declarations.kttxt diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index a35719b03a..401fa5130d 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -3,6 +3,7 @@ package com.lemonappdev.konsist.api import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration +import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoImportDeclaration @@ -60,13 +61,21 @@ interface KoScope { ): Sequence /** - * The namedDeclarations present in the scope. + * The named declarations present in the scope. */ fun namedDeclarations( includeNested: Boolean = false, includeLocal: Boolean = false, ): Sequence + /** + * The declarations present in the scope. + */ + fun declarations( + includeNested: Boolean = false, + includeLocal: Boolean = false, + ): Sequence + /** * The properties present in the scope. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 331b16dd41..6a0421ad45 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -3,6 +3,7 @@ package com.lemonappdev.konsist.core.scope import com.lemonappdev.konsist.api.KoScope import com.lemonappdev.konsist.api.declaration.KoClassDeclaration import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration +import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration @@ -50,6 +51,12 @@ class KoScopeImpl( ): Sequence = koFiles.flatMap { it.declarations(includeNested, includeLocal) } + override fun declarations( + includeNested: Boolean, + includeLocal: Boolean, + ): Sequence = namedDeclarations(includeNested, includeLocal) + .filterIsInstance() + override fun properties( includeNested: Boolean, includeLocal: Boolean, From 5140de3c8442f72fef4bb086e6041d62ff55301d Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 17:57:41 +0200 Subject: [PATCH 16/26] fix konsist test --- .../konsist/core/scope/koscope/KoScopeOperatorTest.kt | 4 ++++ .../kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt | 2 +- .../main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt index 647afd9cbc..0de8c16ef3 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt @@ -36,6 +36,7 @@ class KoScopeOperatorTest { "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", + "KoScopeForNamedDeclarationTest.kt", "KoScopeForObjectTest.kt", "KoScopeForPackageTest.kt", "KoScopeForPropertyTest.kt", @@ -69,6 +70,7 @@ class KoScopeOperatorTest { "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", + "KoScopeForNamedDeclarationTest.kt", "KoScopeForObjectTest.kt", "KoScopeForPackageTest.kt", "KoScopeForPropertyTest.kt", @@ -122,6 +124,7 @@ class KoScopeOperatorTest { "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", + "KoScopeForNamedDeclarationTest.kt", "KoScopeForObjectTest.kt", "KoScopeForPackageTest.kt", "KoScopeForPropertyTest.kt", @@ -155,6 +158,7 @@ class KoScopeOperatorTest { "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", + "KoScopeForNamedDeclarationTest.kt", "KoScopeForObjectTest.kt", "KoScopeForPackageTest.kt", "KoScopeForPropertyTest.kt", diff --git a/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt b/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt index 0c96d8c43c..875fcad426 100644 --- a/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt +++ b/lib/src/konsistTest/kotlin/com/lemonappdev/konsist/api/ApiKonsistTest.kt @@ -7,7 +7,7 @@ class ApiKonsistTest { @Test fun `every api declaration has kdoc`() { apiPackageScope - .namedDeclarations(includeNested = true) + .declarations(includeNested = true) .assert { it.hasKDoc() } } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index 0a5230d6fc..0392ad6719 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -34,8 +34,7 @@ private fun Sequence.assert(function: (E) -> Boolean? ) } - val notSuppressedDeclarations = - localList.filterNot { it is KoDeclaration } + checkIfAnnotatedWithSuppress(localList.filterIsInstance()) + val notSuppressedDeclarations = checkIfAnnotatedWithSuppress(localList) val result = notSuppressedDeclarations.groupBy { lastDeclaration = it From 19d7743d11c6d0fb17c35c7128189af2c41517b2 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 17:58:16 +0200 Subject: [PATCH 17/26] fix spotless --- .../core/scope/koscope/KoScopeForDeclarationTest.kt | 1 - .../api/ext/sequence/KoDeclarationSequenceExt.kt | 1 - .../api/ext/sequence/KoPsiDeclarationSequenceExt.kt | 1 - .../konsist/core/declaration/KoDeclarationImpl.kt | 1 - .../com/lemonappdev/konsist/core/verify/Assert.kt | 11 +++++------ .../api/ext/sequence/KoDeclarationSequenceExtTest.kt | 3 --- .../ext/sequence/KoPsiDeclarationSequenceExtTest.kt | 1 - 7 files changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt index b2726d0a33..8c0684b7b7 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForDeclarationTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.scope.koscope import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.declaration.KoImportDeclaration import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt index 1ae0bd589b..a3d5f7f058 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExt.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.api.ext.sequence -import com.lemonappdev.konsist.api.KoKDocTag import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.ext.declaration.hasAnnotationOf diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt index 62dd001b74..2b82a3db35 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExt.kt @@ -31,7 +31,6 @@ fun Sequence.withSomeKDocWithTags(vararg tags: KoKDocT fun Sequence.withoutKDocWithTags(vararg tags: KoKDocTag): Sequence = filterNot { it.kDoc?.hasTags(*tags) ?: false } - /** * Sequence containing declarations that have file path. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt index ba813fbb20..d133bb3e15 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoDeclarationImpl.kt @@ -5,7 +5,6 @@ import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.core.exception.KoInternalException import com.lemonappdev.konsist.core.util.LocationHelper -import org.jetbrains.kotlin.kdoc.psi.api.KDocElement import org.jetbrains.kotlin.psi.KtTypeParameterListOwner import org.jetbrains.kotlin.psi.psiUtil.isPublic import org.jetbrains.kotlin.psi.psiUtil.isTopLevelKtOrJavaMember diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt index 0392ad6719..b3f2e72ff0 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/verify/Assert.kt @@ -2,7 +2,6 @@ package com.lemonappdev.konsist.core.verify import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration -import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl @@ -30,7 +29,7 @@ private fun Sequence.assert(function: (E) -> Boolean? val checkMethodName = Thread.currentThread().stackTrace[2].methodName throw KoPreconditionFailedException( "Declaration list is empty. Please make sure that list of declarations contain items " + - "before calling the '$checkMethodName' method.", + "before calling the '$checkMethodName' method.", ) } @@ -84,10 +83,10 @@ private fun checkIfAnnotatedWithSuppress(localList: List localList .filterNot { it is KoAnnotationDeclaration && - ( - it.text.endsWith("Suppress(\"konsist.$testMethodName\")") || - it.text.endsWith("Suppress(\"$testMethodName\")") - ) + ( + it.text.endsWith("Suppress(\"konsist.$testMethodName\")") || + it.text.endsWith("Suppress(\"$testMethodName\")") + ) } .forEach { declarations[it] = checkIfSuppressed(it as KoDeclarationImpl, testMethodName) } diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt index 3f99dfd8a9..503cc4dde5 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoDeclarationSequenceExtTest.kt @@ -1,12 +1,9 @@ package com.lemonappdev.konsist.api.ext.sequence -import com.lemonappdev.konsist.api.KoKDocTag.SEE -import com.lemonappdev.konsist.api.KoKDocTag.SINCE import com.lemonappdev.konsist.api.KoModifier.OPEN import com.lemonappdev.konsist.api.KoModifier.PROTECTED import com.lemonappdev.konsist.core.declaration.KoAnnotationDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl -import com.lemonappdev.konsist.core.declaration.KoKDocDeclarationImpl import com.lemonappdev.konsist.testdata.SampleAnnotation import com.lemonappdev.konsist.testdata.SampleAnnotation1 import com.lemonappdev.konsist.testdata.SampleAnnotation2 diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt index 0ea0860ae3..2bfebd5625 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoPsiDeclarationSequenceExtTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.api.ext.sequence import com.lemonappdev.konsist.api.KoKDocTag -import com.lemonappdev.konsist.core.declaration.KoDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoKDocDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoPsiDeclarationImpl import io.mockk.every From e590e8d60f516b83e3004e2c446688b6a8f2e115 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 18:06:59 +0200 Subject: [PATCH 18/26] rename kDoc --- .../com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt index 31b608290f..7ebf6f5061 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoPsiDeclaration.kt @@ -35,7 +35,7 @@ interface KoPsiDeclaration { val kDoc: KoKDocDeclaration? /** - * Whether the declaration has kdoc. + * Whether the declaration has kDoc. */ fun hasKDoc(): Boolean From 2063266a227b4627db754e871b2768490a600a67 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Wed, 10 May 2023 18:20:33 +0200 Subject: [PATCH 19/26] rename containsNamedDeclarations -> containsDeclarations --- .../konsist/core/declaration/provider/KoDeclarationProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index c2d5a5e76e..bd5ba88b59 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -14,7 +14,7 @@ interface KoDeclarationProvider { includeLocal: Boolean = false, ): Sequence - fun containsNamedDeclarations( + fun containsDeclarations( name: String, includeNested: Boolean = false, ) = declarations(includeNested).any { it.name == name } From 77d96cbce697f6d6f9bb624caf29659d1dce7bc5 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 08:56:08 +0200 Subject: [PATCH 20/26] add companion property for KoObjectDeclaration --- ...lexDeclarationExtForCompanionObjectTest.kt | 30 -- .../companion-object-represents-type.kttxt | 5 - .../KoDeclarationExtForCompanionObjectTest.kt | 30 -- ...n-object-has-two-annotations-of-type.kttxt | 8 - .../KoCompanionObjectDeclarationTest.kt | 43 --- .../companion-object-has-declared-name.kttxt | 4 - ...ompanion-object-has-no-declared-name.kttxt | 4 - ...omplexDeclarationForCompanionObjectTest.kt | 302 --------------- ...rations-heaving-visibility-modifiers.kttxt | 45 --- ...mpanion-object-contains-declarations.kttxt | 13 - ...n-object-contains-local-declarations.kttxt | 18 - ...-object-contains-nested-declarations.kttxt | 24 -- ...nion-object-contains-no-declarations.kttxt | 3 - .../companion-object-represents-type.kttxt | 5 - .../KoDeclarationForCompanionObjectTest.kt | 357 ------------------ .../companion-object-has-annotation.kttxt | 5 - ...nion-object-has-fully-qualified-name.kttxt | 4 - ...ect-has-internal-visibility-modifier.kttxt | 2 - .../companion-object-has-kdoc.kttxt | 8 - ...ifiers-and-annotation-with-parameter.kttxt | 7 - ...ers-and-annotation-without-parameter.kttxt | 7 - ...object-has-modifiers-and-annotations.kttxt | 8 - .../companion-object-has-modifiers.kttxt | 2 - .../companion-object-has-no-annotation.kttxt | 2 - .../companion-object-has-no-kdoc.kttxt | 2 - .../companion-object-has-no-modifiers.kttxt | 2 - ...on-object-has-no-visibility-modifier.kttxt | 2 - ...ject-has-private-visibility-modifier.kttxt | 2 - ...panion-object-has-protected-modifier.kttxt | 2 - ...ct-has-protected-visibility-modifier.kttxt | 2 - ...companion-object-has-public-modifier.kttxt | 2 - ...bject-has-public-visibility-modifier.kttxt | 2 - ...object-has-two-annotations-of-kclass.kttxt | 7 - ...companion-object-has-two-annotations.kttxt | 7 - .../companion-object-has-two-modifiers.kttxt | 2 - .../companion-object-is-in-package.kttxt | 4 - .../companion-object-is-not-in-package.kttxt | 2 - .../companion-object-is-not-top-level.kttxt | 5 - .../companion-object-is-top-level.kttxt | 2 - .../KoObjectDeclarationTest.kt | 43 +++ .../snippet/companion-object-with-name.kttxt | 1 + .../companion-object-without-name.kttxt | 3 + .../snippet/object-without-modifiers.kttxt | 1 + .../koscope/KoScopeForCompanionObjectTest.kt | 68 ---- .../file-contains-no-companion-object.kttxt | 2 - .../file-contains-one-companion-object.kttxt | 3 - .../file-contains-two-companion-objects.kttxt | 7 - .../com/lemonappdev/konsist/api/KoScope.kt | 8 - .../api/declaration/KoComplexDeclaration.kt | 2 - .../api/declaration/KoFileDeclaration.kt | 2 - .../api/declaration/KoObjectDeclaration.kt | 5 + .../KoComplexDeclarationSequenceExt.kt | 8 - .../declaration/KoObjectDeclarationImpl.kt | 11 + .../provider/KoDeclarationProvider.kt | 13 - .../provider/KoDeclarationProviderUtil.kt | 4 +- .../konsist/core/scope/KoScopeImpl.kt | 6 - 56 files changed, 65 insertions(+), 1103 deletions(-) delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/KoComplexDeclarationExtForCompanionObjectTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/KoDeclarationExtForCompanionObjectTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-type.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/KoCompanionObjectDeclarationTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-declared-name.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-no-declared-name.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-local-declarations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-nested-declarations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-no-declarations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/KoDeclarationForCompanionObjectTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-annotation.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-fully-qualified-name.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-internal-visibility-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-kdoc.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-with-parameter.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-without-parameter.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-annotation.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-kdoc.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-visibility-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-private-visibility-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-visibility-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-visibility-modifier.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-kclass.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-in-package.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-in-package.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-top-level.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-top-level.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-with-name.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt create mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/object-without-modifiers.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForCompanionObjectTest.kt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-no-companion-object.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-one-companion-object.kttxt delete mode 100644 lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-two-companion-objects.kttxt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/KoComplexDeclarationExtForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/KoComplexDeclarationExtForCompanionObjectTest.kt deleted file mode 100644 index d6590bc4b1..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/KoComplexDeclarationExtForCompanionObjectTest.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.lemonappdev.konsist.api.ext.declaration.kocomplexdeclaration - -import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.ext.declaration.representsTypeOf -import com.lemonappdev.konsist.testdata.SampleTopLevelInterface.SampleCompanionObject -import com.lemonappdev.konsist.testdata.SampleType -import org.amshove.kluent.assertSoftly -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoComplexDeclarationExtForCompanionObjectTest { - @Test - fun `companion-object-represents-type`() { - // given - val sut = getSnippetFile("companion-object-represents-type") - .interfaces() - .first() - .companionObjects() - .first() - - // then - assertSoftly(sut) { - representsTypeOf() shouldBeEqualTo true - representsTypeOf() shouldBeEqualTo false - } - } - - private fun getSnippetFile(fileName: String) = - TestSnippetProvider.getSnippetKoScope("api/ext/declaration/kocomplexdeclaration/snippet/forcompanionobject/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt deleted file mode 100644 index 5a8ce9e015..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt +++ /dev/null @@ -1,5 +0,0 @@ -package com.lemonappdev.konsist.testdata - -interface SampleTopLevelInterface { - companion object SampleCompanionObject {} -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/KoDeclarationExtForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/KoDeclarationExtForCompanionObjectTest.kt deleted file mode 100644 index 78705996a8..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/KoDeclarationExtForCompanionObjectTest.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.lemonappdev.konsist.api.ext.declaration.kodeclaration - -import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.ext.declaration.hasAnnotationOf -import com.lemonappdev.konsist.testdata.NonExistingAnnotation -import com.lemonappdev.konsist.testdata.SampleAnnotation1 -import com.lemonappdev.konsist.testdata.SampleAnnotation2 -import org.amshove.kluent.assertSoftly -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoDeclarationExtForCompanionObjectTest { - @Test - fun `companion-object-has-two-annotations-of-type`() { - // given - val sut = getSnippetFile("companion-object-has-two-annotations-of-type") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - hasAnnotationOf() shouldBeEqualTo true - hasAnnotationOf() shouldBeEqualTo true - hasAnnotationOf() shouldBeEqualTo false - } - } - - private fun getSnippetFile(fileName: String) = - TestSnippetProvider.getSnippetKoScope("api/ext/declaration/kodeclaration/snippet/forcompanionobject/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-type.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-type.kttxt deleted file mode 100644 index bcc0e0b740..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/api/ext/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-type.kttxt +++ /dev/null @@ -1,8 +0,0 @@ -import com.lemonappdev.konsist.testdata.SampleAnnotation -import com.lemonappdev.konsist.testdata.SampleAnnotation1 -import com.lemonappdev.konsist.testdata.SampleAnnotation2 - -@SampleAnnotation1 -@SampleAnnotation2 -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/KoCompanionObjectDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/KoCompanionObjectDeclarationTest.kt deleted file mode 100644 index ddef7b64bc..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/KoCompanionObjectDeclarationTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kocompanionobjectdeclaration - -import com.lemonappdev.konsist.TestSnippetProvider -import org.amshove.kluent.assertSoftly -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoCompanionObjectDeclarationTest { - @Test - fun `companion-object-has-declared-name`() { - // given - val sut = getSnippetFile("companion-object-has-declared-name") - .classes() - .first() - .companionObjects() - .first() - - // then - assertSoftly(sut) { - name shouldBeEqualTo "SampleCompanionObject" - hasName() shouldBeEqualTo true - } - } - - @Test - fun `companion-object-has-no-declared-name`() { - // given - val sut = getSnippetFile("companion-object-has-no-declared-name") - .classes() - .first() - .companionObjects() - .first() - - // then - assertSoftly(sut) { - name shouldBeEqualTo "Companion" - hasName() shouldBeEqualTo false - } - } - - private fun getSnippetFile(fileName: String) = - TestSnippetProvider.getSnippetKoScope("core/declaration/kocompanionobjectdeclaration/snippet/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-declared-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-declared-name.kttxt deleted file mode 100644 index 7e73cf5ea2..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-declared-name.kttxt +++ /dev/null @@ -1,4 +0,0 @@ -class SampleTopLevelClass { - companion object SampleCompanionObject { - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-no-declared-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-no-declared-name.kttxt deleted file mode 100644 index 3ad1580a38..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocompanionobjectdeclaration/snippet/companion-object-has-no-declared-name.kttxt +++ /dev/null @@ -1,4 +0,0 @@ -class SampleTopLevelClass { - companion object { - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt deleted file mode 100644 index 6cf1371084..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForCompanionObjectTest.kt +++ /dev/null @@ -1,302 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kocomplexdeclaration - -import com.lemonappdev.konsist.TestSnippetProvider -import com.lemonappdev.konsist.api.KoModifier -import org.amshove.kluent.assertSoftly -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoComplexDeclarationForCompanionObjectTest { - - @Test - fun `companion-object-contains-no-declared-name`() { - // given - val sut = getSnippetFile("companion-object-contains-no-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - sut - .declarations(includeNested = true, includeLocal = true) - .toList() - .map { it.name } - .shouldBeEqualTo(emptyList()) - } - - @Test - fun `companion-object-contains-no-declarations`() { - // given - val sut = getSnippetFile("companion-object-contains-no-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - sut - .declarations(includeNested = true, includeLocal = true) - .toList() - .map { it.name } - .shouldBeEqualTo(emptyList()) - } - - @Test - fun `companion-object-contains-declarations includeNested true includeLocal true`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleProperty", - "sampleFunction", - "SampleClass", - "SampleObject", - "SampleInterface", - ) - - sut - .declarations(includeNested = true, includeLocal = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-declarations includeNested true includeLocal false`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleProperty", - "sampleFunction", - "SampleClass", - "SampleObject", - "SampleInterface", - ) - - sut - .declarations(includeNested = true, includeLocal = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-declarations includeNested false includeLocal true`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleProperty", - "sampleFunction", - "SampleClass", - "SampleObject", - "SampleInterface", - ) - - sut - .declarations(includeNested = false, includeLocal = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-nested-declarations includeNested true`() { - // given - val sut = getSnippetFile("companion-object-contains-nested-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction", - "SampleClass", - "SampleClassNestedInsideClass", - "SampleObjectNestedInsideClass", - "SampleInterfaceNestedInsideClass", - "SampleCompanionObjectNestedInsideClass", - "SampleObject", - "SampleClassNestedInsideObject", - "SampleObjectNestedInsideObject", - "SampleInterfaceNestedInsideObject", - "SampleInterface", - "SampleClassNestedInsideInterface", - "SampleObjectNestedInsideInterface", - "SampleInterfaceNestedInsideInterface", - ) - - sut - .declarations(includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-nested-declarations includeNested false`() { - // given - val sut = getSnippetFile("companion-object-contains-nested-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction", - "SampleClass", - "SampleObject", - "SampleInterface", - ) - - sut - .declarations(includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-local-declarations includeLocal true`() { - // given - val sut = getSnippetFile("companion-object-contains-local-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction", - "sampleLocalProperty1", - "sampleLocalFunction1", - "sampleLocalProperty2", - "sampleLocalFunction2", - "SampleLocalClass1", - "sampleLocalFunction2", - ) - - sut - .declarations(includeLocal = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-local-declarations includeLocal false`() { - // given - val sut = getSnippetFile("companion-object-contains-local-declarations") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf("sampleFunction") - - sut - .declarations(includeLocal = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-declarations-heaving-visibility-modifiers includeNested = true`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleClassNestedInsideClass2", - "SampleObjectNestedInsideClass2", - "SampleInterfaceNestedInsideClass2", - "SampleCompanionObjectNestedInsideClass2", - "SampleObject1", - "SampleClassNestedInsideObject2", - "SampleObjectNestedInsideObject2", - "SampleInterfaceNestedInsideObject2", - "SampleInterface1", - "SampleClassNestedInsideInterface2", - "SampleObjectNestedInsideInterface2", - "SampleInterfaceNestedInsideInterface2", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-contains-declarations-heaving-visibility-modifiers includeNested = false`() { - // given - val sut = getSnippetFile("companion-object-contains-declarations-heaving-visibility-modifiers") - .classes() - .first() - .companionObjects() - .first() - - // then - val expected = listOf( - "sampleFunction1", - "SampleClass1", - "SampleObject1", - "SampleInterface1", - ) - - sut - .declarations(listOf(KoModifier.PRIVATE), includeNested = false) - .toList() - .map { it.name } - .shouldBeEqualTo(expected) - } - - @Test - fun `companion-object-represents-type`() { - // given - val sut = getSnippetFile("companion-object-represents-type") - .interfaces() - .first() - .companionObjects() - .first() - - // then - assertSoftly(sut) { - representsType("SampleCompanionObject") shouldBeEqualTo true - representsType("SampleType") shouldBeEqualTo false - representsType("com.lemonappdev.konsist.testdata.SampleTopLevelInterface.SampleCompanionObject") shouldBeEqualTo true - representsType("com.lemonappdev.konsist.testdata.SampleType") shouldBeEqualTo false - } - } - - private fun getSnippetFile(fileName: String) = - TestSnippetProvider.getSnippetKoScope("core/declaration/kocomplexdeclaration/snippet/forcompanionobject/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt deleted file mode 100644 index e2c2f17800..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations-heaving-visibility-modifiers.kttxt +++ /dev/null @@ -1,45 +0,0 @@ -class SampleTopLevelClass { - companion object SampleTopLevelCompanionObject { - private fun sampleFunction1() {} - - fun sampleFunction2() {} - - private class SampleClass1 { - class SampleClassNestedInsideClass1 - object SampleObjectNestedInsideClass1 - interface SampleInterfaceNestedInsideClass1 - companion object SampleCompanionObjectNestedInsideClass1 - } - - class SampleClass2 { - private class SampleClassNestedInsideClass2 - private object SampleObjectNestedInsideClass2 - private interface SampleInterfaceNestedInsideClass2 - private companion object SampleCompanionObjectNestedInsideClass2 - } - - private object SampleObject1 { - class SampleClassNestedInsideObject1 - object SampleObjectNestedInsideObject1 - interface SampleInterfaceNestedInsideObject1 - } - - object SampleObject2 { - private class SampleClassNestedInsideObject2 - private object SampleObjectNestedInsideObject2 - private interface SampleInterfaceNestedInsideObject2 - } - - private interface SampleInterface1 { - class SampleClassNestedInsideInterface1 - object SampleObjectNestedInsideInterface1 - interface SampleInterfaceNestedInsideInterface1 - } - - interface SampleInterface2 { - private class SampleClassNestedInsideInterface2 - private object SampleObjectNestedInsideInterface2 - private interface SampleInterfaceNestedInsideInterface2 - } - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations.kttxt deleted file mode 100644 index daf3b31964..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-declarations.kttxt +++ /dev/null @@ -1,13 +0,0 @@ -class SampleTopLevelClass { - companion object SampleTopLevelCompanionObject { - val sampleProperty: Boolean = true - - fun sampleFunction() {} - - class SampleClass - - object SampleObject - - interface SampleInterface - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-local-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-local-declarations.kttxt deleted file mode 100644 index 33d1be0b96..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-local-declarations.kttxt +++ /dev/null @@ -1,18 +0,0 @@ -class SampleTopLevelClass { - companion object SampleTopLevelCompanionObject { - fun sampleFunction() { - val sampleLocalProperty1: Boolean = true - - fun sampleLocalFunction1() { - val sampleLocalProperty2: Boolean = true - - fun sampleLocalFunction2() { - class SampleLocalClass1 { - fun sampleLocalFunction2() { - } - } - } - } - } - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-nested-declarations.kttxt deleted file mode 100644 index 756f109125..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-nested-declarations.kttxt +++ /dev/null @@ -1,24 +0,0 @@ -class SampleTopLevelClass { - companion object SampleTopLevelCompanionObject { - fun sampleFunction() { } - - class SampleClass { - class SampleClassNestedInsideClass - object SampleObjectNestedInsideClass - interface SampleInterfaceNestedInsideClass - companion object SampleCompanionObjectNestedInsideClass - } - - object SampleObject { - class SampleClassNestedInsideObject - object SampleObjectNestedInsideObject - interface SampleInterfaceNestedInsideObject - } - - interface SampleInterface { - class SampleClassNestedInsideInterface - object SampleObjectNestedInsideInterface - interface SampleInterfaceNestedInsideInterface - } - } -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-no-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-no-declarations.kttxt deleted file mode 100644 index 2c94455403..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-contains-no-declarations.kttxt +++ /dev/null @@ -1,3 +0,0 @@ -class SampleTopLevelClass { - companion object SampleCompanionObject -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt deleted file mode 100644 index 5a8ce9e015..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forcompanionobject/companion-object-represents-type.kttxt +++ /dev/null @@ -1,5 +0,0 @@ -package com.lemonappdev.konsist.testdata - -interface SampleTopLevelInterface { - companion object SampleCompanionObject {} -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/KoDeclarationForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/KoDeclarationForCompanionObjectTest.kt deleted file mode 100644 index 1adc08fa9a..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/KoDeclarationForCompanionObjectTest.kt +++ /dev/null @@ -1,357 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kodeclaration - -import com.lemonappdev.konsist.TestSnippetProvider.getSnippetKoScope -import com.lemonappdev.konsist.api.KoModifier.COMPANION -import com.lemonappdev.konsist.api.KoModifier.FINAL -import com.lemonappdev.konsist.api.KoModifier.PRIVATE -import com.lemonappdev.konsist.api.KoModifier.PROTECTED -import com.lemonappdev.konsist.api.KoModifier.PUBLIC -import com.lemonappdev.konsist.testdata.NonExistingAnnotation -import com.lemonappdev.konsist.testdata.SampleAnnotation1 -import com.lemonappdev.konsist.testdata.SampleAnnotation2 -import org.amshove.kluent.assertSoftly -import org.amshove.kluent.shouldBeEqualTo -import org.amshove.kluent.shouldHaveSize -import org.amshove.kluent.shouldNotBeEqualTo -import org.junit.jupiter.api.Test - -class KoDeclarationForCompanionObjectTest { - @Test - fun `companion-object-is-top-level`() { - // given - val sut = getSnippetFile("companion-object-is-top-level") - .companionObjects(includeNested = true) - .first() - - // then - sut.isTopLevel() shouldBeEqualTo true - } - - @Test - fun `companion-object-is-not-top-level`() { - // given - val sut = getSnippetFile("companion-object-is-not-top-level") - .companionObjects(includeNested = true) - .first { it.name == "SampleNestedCompanionObject" } - - // then - sut.isTopLevel() shouldBeEqualTo false - } - - @Test - fun `companion-object-has-no-annotation`() { - // given - val sut = getSnippetFile("companion-object-has-no-annotation") - .companionObjects() - .first() - - // then - sut.annotations shouldHaveSize 0 - } - - @Test - fun `companion-object-has-annotation`() { - // given - val sut = getSnippetFile("companion-object-has-annotation") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - annotations shouldHaveSize 1 - hasAnnotations("SampleAnnotation") shouldBeEqualTo true - hasAnnotations("NonExistingAnnotation") shouldBeEqualTo false - hasAnnotations("com.lemonappdev.konsist.testdata.SampleAnnotation") shouldBeEqualTo true - hasAnnotations("com.lemonappdev.konsist.testdata.NonExistingAnnotation") shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-two-annotations`() { - // given - val sut = getSnippetFile("companion-object-has-two-annotations") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - annotations shouldHaveSize 2 - hasAnnotations("SampleAnnotation1") shouldBeEqualTo true - hasAnnotations("SampleAnnotation2") shouldBeEqualTo true - hasAnnotations("SampleAnnotation1", "SampleAnnotation1") shouldBeEqualTo true - hasAnnotations("NonExistingAnnotation") shouldBeEqualTo false - hasAnnotations("SampleAnnotation1", "NonExistingAnnotation") shouldBeEqualTo false - hasAnnotations("com.lemonappdev.konsist.testdata.SampleAnnotation1") shouldBeEqualTo true - hasAnnotations("com.lemonappdev.konsist.testdata.SampleAnnotation2") shouldBeEqualTo true - hasAnnotations("com.lemonappdev.konsist.testdata.NonExistingAnnotation") shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-two-annotations-of-kclass`() { - // given - val sut = getSnippetFile("companion-object-has-two-annotations-of-kclass") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - annotations shouldHaveSize 2 - hasAnnotationsOf(SampleAnnotation1::class) shouldBeEqualTo true - hasAnnotationsOf(SampleAnnotation2::class) shouldBeEqualTo true - hasAnnotationsOf(SampleAnnotation1::class, SampleAnnotation2::class) shouldBeEqualTo true - hasAnnotationsOf(NonExistingAnnotation::class) shouldBeEqualTo false - hasAnnotationsOf(SampleAnnotation1::class, NonExistingAnnotation::class) shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-no-visibility-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-no-visibility-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - isPublicOrDefault() shouldBeEqualTo true - hasPublicModifier() shouldBeEqualTo false - hasPrivateModifier() shouldBeEqualTo false - hasProtectedModifier() shouldBeEqualTo false - hasInternalModifier() shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-public-visibility-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-public-visibility-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - isPublicOrDefault() shouldBeEqualTo true - hasPublicModifier() shouldBeEqualTo true - hasPrivateModifier() shouldBeEqualTo false - hasProtectedModifier() shouldBeEqualTo false - hasInternalModifier() shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-private-visibility-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-private-visibility-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - isPublicOrDefault() shouldBeEqualTo false - hasPublicModifier() shouldBeEqualTo false - hasPrivateModifier() shouldBeEqualTo true - hasProtectedModifier() shouldBeEqualTo false - hasInternalModifier() shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-protected-visibility-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-protected-visibility-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - isPublicOrDefault() shouldBeEqualTo false - hasPublicModifier() shouldBeEqualTo false - hasPrivateModifier() shouldBeEqualTo false - hasProtectedModifier() shouldBeEqualTo true - hasInternalModifier() shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-internal-visibility-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-internal-visibility-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - isPublicOrDefault() shouldBeEqualTo false - hasPublicModifier() shouldBeEqualTo false - hasPrivateModifier() shouldBeEqualTo false - hasProtectedModifier() shouldBeEqualTo false - hasInternalModifier() shouldBeEqualTo true - } - } - - @Test - fun `companion-object-has-fully-qualified-name`() { - // given - val sut = getSnippetFile("companion-object-has-fully-qualified-name") - .companionObjects() - .first() - - // then - sut.fullyQualifiedName shouldBeEqualTo "com.samplepackage.SampleCompanionObject" - } - - @Test - fun `companion-object-is-in-package`() { - // given - val sut = getSnippetFile("companion-object-is-in-package") - .companionObjects() - .first() - - // then - sut.packagee shouldBeEqualTo "com.samplepackage" - } - - @Test - fun `companion-object-is-not-in-package`() { - // given - val sut = getSnippetFile("companion-object-is-not-in-package") - .companionObjects() - .first() - - // then - sut.packagee shouldBeEqualTo "" - } - - @Test - fun `companion-object-has-modifiers`() { - // given - val sut = getSnippetFile("companion-object-has-modifiers") - .companionObjects() - .first() - - // then - sut.modifiers shouldBeEqualTo listOf(PROTECTED, FINAL, COMPANION) - } - - @Test - fun `companion-object-has-modifiers-and-annotation-with-parameter`() { - // given - val sut = getSnippetFile("companion-object-has-modifiers-and-annotation-with-parameter") - .companionObjects() - .first() - - // then - sut.modifiers shouldBeEqualTo listOf(PROTECTED, FINAL, COMPANION) - } - - @Test - fun `companion-object-has-modifiers-and-annotation-without-parameter`() { - // given - val sut = getSnippetFile("companion-object-has-modifiers-and-annotation-without-parameter") - .companionObjects() - .first() - - // then - sut.modifiers shouldBeEqualTo listOf(PROTECTED, FINAL, COMPANION) - } - - @Test - fun `companion-object-has-modifiers-and-annotations`() { - // given - val sut = getSnippetFile("companion-object-has-modifiers-and-annotations") - .companionObjects() - .first() - - // then - sut.modifiers shouldBeEqualTo listOf(PROTECTED, FINAL, COMPANION) - } - - @Test - fun `companion-object-has-protected-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-protected-modifier") - .companionObjects() - .first() - - // then - sut.hasModifiers() shouldBeEqualTo true - } - - @Test - fun `companion-object-has-public-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-public-modifier") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - hasModifiers(PUBLIC) shouldBeEqualTo true - hasModifiers(PRIVATE) shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-two-modifiers`() { - // given - val sut = getSnippetFile("companion-object-has-two-modifiers") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - hasModifiers(PROTECTED) shouldBeEqualTo true - hasModifiers(FINAL) shouldBeEqualTo true - hasModifiers(PRIVATE) shouldBeEqualTo false - hasModifiers(PROTECTED, FINAL) shouldBeEqualTo true - hasModifiers(FINAL, PROTECTED) shouldBeEqualTo true - hasModifiers(FINAL, PRIVATE) shouldBeEqualTo false - hasModifiers(PROTECTED, FINAL, PRIVATE) shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-no-modifier`() { - // given - val sut = getSnippetFile("companion-object-has-no-modifiers") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - hasModifiers() shouldBeEqualTo true - hasModifiers(PRIVATE) shouldBeEqualTo false - } - } - - @Test - fun `companion-object-has-kdoc`() { - // given - val sut = getSnippetFile("companion-object-has-kdoc") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - kDoc shouldNotBeEqualTo null - hasKDoc() shouldBeEqualTo true - } - } - - @Test - fun `companion-object-has-no-kdoc`() { - // given - val sut = getSnippetFile("companion-object-has-no-kdoc") - .companionObjects() - .first() - - // then - assertSoftly(sut) { - kDoc shouldBeEqualTo null - hasKDoc() shouldBeEqualTo false - } - } - - private fun getSnippetFile(fileName: String) = getSnippetKoScope("core/declaration/kodeclaration/snippet/forcompanionobject/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-annotation.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-annotation.kttxt deleted file mode 100644 index a87fd26919..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-annotation.kttxt +++ /dev/null @@ -1,5 +0,0 @@ -import com.lemonappdev.konsist.testdata.SampleAnnotation - -@SampleAnnotation -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-fully-qualified-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-fully-qualified-name.kttxt deleted file mode 100644 index 7b34759858..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-fully-qualified-name.kttxt +++ /dev/null @@ -1,4 +0,0 @@ -package com.samplepackage - -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-internal-visibility-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-internal-visibility-modifier.kttxt deleted file mode 100644 index 1a0e070501..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-internal-visibility-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -internal companion object SampleCompanionObject { -} \ No newline at end of file diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-kdoc.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-kdoc.kttxt deleted file mode 100644 index 6cd6a99d9a..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-kdoc.kttxt +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Sample Description - * - * @since 1.0.0 - * @see example sample description - */ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-with-parameter.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-with-parameter.kttxt deleted file mode 100644 index 28b2e249ed..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-with-parameter.kttxt +++ /dev/null @@ -1,7 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kodeclaration.snippet.forcompanionobject - -import com.lemonappdev.konsist.testdata.SampleAnnotationWithParameter - -@SampleAnnotationWithParameter(sampleParameter = " parameter description ") -protected final companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-without-parameter.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-without-parameter.kttxt deleted file mode 100644 index 7f039d8994..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotation-without-parameter.kttxt +++ /dev/null @@ -1,7 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kodeclaration.snippet.forcompanionobject - -import com.lemonappdev.konsist.testdata.SampleAnnotation - -@SampleAnnotation -protected final companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotations.kttxt deleted file mode 100644 index 04b95efdec..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers-and-annotations.kttxt +++ /dev/null @@ -1,8 +0,0 @@ -package com.lemonappdev.konsist.core.declaration.kodeclaration.snippet.forcompanionobject - -import com.lemonappdev.konsist.testdata.SampleAnnotation -import com.lemonappdev.konsist.testdata.SampleAnnotationWithParameter - -@SampleAnnotation @SampleAnnotationWithParameter(sampleParameter = " parameter description ") -protected final companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers.kttxt deleted file mode 100644 index bce2736e0d..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-modifiers.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -protected final companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-annotation.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-annotation.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-annotation.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-kdoc.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-kdoc.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-kdoc.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-modifiers.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-modifiers.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-visibility-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-visibility-modifier.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-no-visibility-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-private-visibility-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-private-visibility-modifier.kttxt deleted file mode 100644 index 12191fe49c..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-private-visibility-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -private companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-modifier.kttxt deleted file mode 100644 index dec983602b..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -protected companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-visibility-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-visibility-modifier.kttxt deleted file mode 100644 index dec983602b..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-protected-visibility-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -protected companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-modifier.kttxt deleted file mode 100644 index 3b874b881b..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -public companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-visibility-modifier.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-visibility-modifier.kttxt deleted file mode 100644 index 3b874b881b..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-public-visibility-modifier.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -public companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-kclass.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-kclass.kttxt deleted file mode 100644 index 108e38e1b3..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations-of-kclass.kttxt +++ /dev/null @@ -1,7 +0,0 @@ -import com.lemonappdev.konsist.testdata.SampleAnnotation1 -import com.lemonappdev.konsist.testdata.SampleAnnotation2 - -@SampleAnnotation1 -@SampleAnnotation2 -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations.kttxt deleted file mode 100644 index 108e38e1b3..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-annotations.kttxt +++ /dev/null @@ -1,7 +0,0 @@ -import com.lemonappdev.konsist.testdata.SampleAnnotation1 -import com.lemonappdev.konsist.testdata.SampleAnnotation2 - -@SampleAnnotation1 -@SampleAnnotation2 -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-modifiers.kttxt deleted file mode 100644 index bce2736e0d..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-has-two-modifiers.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -protected final companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-in-package.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-in-package.kttxt deleted file mode 100644 index 7b34759858..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-in-package.kttxt +++ /dev/null @@ -1,4 +0,0 @@ -package com.samplepackage - -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-in-package.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-in-package.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-in-package.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-top-level.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-top-level.kttxt deleted file mode 100644 index b46acff79f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-not-top-level.kttxt +++ /dev/null @@ -1,5 +0,0 @@ -class SampleClass { - companion object SampleNestedCompanionObject {} -} - -companion object SampleCompanionObject {} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-top-level.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-top-level.kttxt deleted file mode 100644 index e11eac849f..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kodeclaration/snippet/forcompanionobject/companion-object-is-top-level.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -companion object SampleCompanionObject { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt index bd760f947f..dc8f849486 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt @@ -1,6 +1,7 @@ package com.lemonappdev.konsist.core.declaration.koobjectdeclaration import com.lemonappdev.konsist.TestSnippetProvider.getSnippetKoScope +import org.amshove.kluent.assertSoftly import org.amshove.kluent.shouldBeEqualTo import org.junit.jupiter.api.Test @@ -27,5 +28,47 @@ class KoObjectDeclarationTest { sut.hasDataModifier() shouldBeEqualTo true } + @Test + fun `companion-object-with-name`() { + // given + val sut = getSnippetFile("companion-object-with-name") + .objects() + .first() + + // then + assertSoftly (sut) { + sut.hasCompanionModifier() shouldBeEqualTo true + sut.name shouldBeEqualTo "SampleObject" + } + } + + @Test + fun `companion-object-without-name`() { + // given + val sut = getSnippetFile("companion-object-without-name") + .objects() + .first() + + // then + assertSoftly (sut) { + sut.hasCompanionModifier() shouldBeEqualTo true + sut.name shouldBeEqualTo "Companion" + } + } + + @Test + fun `object-without-modifiers`() { + // given + val sut = getSnippetFile("object-without-modifiers") + .objects() + .first() + + // then + assertSoftly (sut) { + sut.hasDataModifier() shouldBeEqualTo false + sut.hasCompanionModifier() shouldBeEqualTo false + } + } + private fun getSnippetFile(fileName: String) = getSnippetKoScope("core/declaration/koobjectdeclaration/snippet/", fileName) } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-with-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-with-name.kttxt new file mode 100644 index 0000000000..47289611b8 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-with-name.kttxt @@ -0,0 +1 @@ +companion object SampleObject diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt new file mode 100644 index 0000000000..8d8c6d9cf8 --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt @@ -0,0 +1,3 @@ +companion object { + +} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/object-without-modifiers.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/object-without-modifiers.kttxt new file mode 100644 index 0000000000..5d91d44a5b --- /dev/null +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/object-without-modifiers.kttxt @@ -0,0 +1 @@ +object SampleObject diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForCompanionObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForCompanionObjectTest.kt deleted file mode 100644 index c1d69188ec..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeForCompanionObjectTest.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.lemonappdev.konsist.core.scope.koscope - -import com.lemonappdev.konsist.TestSnippetProvider -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoScopeForCompanionObjectTest { - @Test - fun `file-contains-one-companion-object`() { - // given - val sut = getSnippetFile("file-contains-one-companion-object") - - // then - sut - .companionObjects(includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo( - listOf("SampleCompanionObject"), - ) - } - - @Test - fun `file-contains-no-companion-object`() { - // given - val sut = getSnippetFile("file-contains-no-companion-object") - - // then - sut - .companionObjects(includeNested = true) - .toList() - .shouldBeEqualTo( - emptyList(), - ) - } - - @Test - fun `file-contains-two-companion-objects includeNested true`() { - // given - val sut = getSnippetFile("file-contains-two-companion-objects") - - // then - sut - .companionObjects(includeNested = true) - .toList() - .map { it.name } - .shouldBeEqualTo( - listOf("SampleCompanionObject1", "SampleCompanionObject2"), - ) - } - - @Test - fun `file-contains-two-companion-objects includeNested false`() { - // given - val sut = getSnippetFile("file-contains-two-companion-objects") - - // then - sut - .companionObjects(includeNested = false) - .toList() - .shouldBeEqualTo( - emptyList(), - ) - } - - private fun getSnippetFile(fileName: String) = - TestSnippetProvider.getSnippetKoScope("core/scope/koscope/snippet/forcompanionobject/", fileName) -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-no-companion-object.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-no-companion-object.kttxt deleted file mode 100644 index 2f782ab5b3..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-no-companion-object.kttxt +++ /dev/null @@ -1,2 +0,0 @@ -class SampleClass { -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-one-companion-object.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-one-companion-object.kttxt deleted file mode 100644 index 523cb1e503..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-one-companion-object.kttxt +++ /dev/null @@ -1,3 +0,0 @@ -class SampleClass { - companion object SampleCompanionObject -} diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-two-companion-objects.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-two-companion-objects.kttxt deleted file mode 100644 index 482447181c..0000000000 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/snippet/forcompanionobject/file-contains-two-companion-objects.kttxt +++ /dev/null @@ -1,7 +0,0 @@ -class SampleClass1 { - companion object SampleCompanionObject1 -} - -class SampleClass2 { - companion object SampleCompanionObject2 -} diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 1bc88ab5bd..9e55dcc775 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -46,14 +46,6 @@ interface KoScope { includeNested: Boolean = false, ): Sequence - /** - * The companion objects present in the scope. - */ - fun companionObjects( - modifiers: List = emptyList(), - includeNested: Boolean = false, - ): Sequence - /** * The functions present in the scope. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt index bdfca7d5d6..3b867195bb 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.api.declaration import com.lemonappdev.konsist.core.declaration.provider.KoClassProvider -import com.lemonappdev.konsist.core.declaration.provider.KoCompanionObjectProvider import com.lemonappdev.konsist.core.declaration.provider.KoFunctionProvider import com.lemonappdev.konsist.core.declaration.provider.KoInterfaceProvider import com.lemonappdev.konsist.core.declaration.provider.KoObjectProvider @@ -15,7 +14,6 @@ interface KoComplexDeclaration : KoClassProvider, KoInterfaceProvider, KoObjectProvider, - KoCompanionObjectProvider, KoPropertyProvider, KoFunctionProvider { /** diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoFileDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoFileDeclaration.kt index 926955f7a9..674b27e8fa 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoFileDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoFileDeclaration.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.api.declaration import com.lemonappdev.konsist.core.declaration.provider.KoClassProvider -import com.lemonappdev.konsist.core.declaration.provider.KoCompanionObjectProvider import com.lemonappdev.konsist.core.declaration.provider.KoDeclarationProvider import com.lemonappdev.konsist.core.declaration.provider.KoFunctionProvider import com.lemonappdev.konsist.core.declaration.provider.KoInterfaceProvider @@ -18,7 +17,6 @@ interface KoFileDeclaration : KoClassProvider, KoInterfaceProvider, KoObjectProvider, - KoCompanionObjectProvider, KoPropertyProvider, KoFunctionProvider { diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoObjectDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoObjectDeclaration.kt index 348337691f..dca372f5bb 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoObjectDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoObjectDeclaration.kt @@ -8,4 +8,9 @@ interface KoObjectDeclaration : KoComplexDeclaration { * Whether this object has a data modifier. */ fun hasDataModifier(): Boolean + + /** + * Whether this object has a companion modifier. + */ + fun hasCompanionModifier(): Boolean } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt index 86b9771749..84e5ddf4d8 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt @@ -93,14 +93,6 @@ fun Sequence.objects( includeNested: Boolean = false, ): Sequence = flatMap { it.objects(modifiers, includeNested) } -/** - * Sequence containing companion object declarations. - */ -fun Sequence.companionObjects( - modifiers: List = emptyList(), - includeNested: Boolean = false, -): Sequence = flatMap { it.companionObjects(modifiers, includeNested) } - /** * Sequence containing properties declarations. */ diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoObjectDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoObjectDeclarationImpl.kt index 262b8676eb..8449370e46 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoObjectDeclarationImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoObjectDeclarationImpl.kt @@ -12,8 +12,19 @@ internal class KoObjectDeclarationImpl( ) : KoComplexDeclarationImpl(ktObjectDeclaration, parent), KoObjectDeclaration { + + override val name: String by lazy { + if (hasCompanionModifier() && super.name == "") { + "Companion" + } else { + super.name + } + } + override fun hasDataModifier() = hasModifiers(KoModifier.DATA) + override fun hasCompanionModifier() = hasModifiers(KoModifier.COMPANION) + internal companion object { private val cache = KoDeclarationCache() diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index a73df5ea7f..ce739c4aaa 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -67,19 +67,6 @@ interface KoObjectProvider : KoDeclarationProvider { ): Boolean = objects(modifiers, includeNested).any { it.name == name } } -interface KoCompanionObjectProvider : KoDeclarationProvider { - fun companionObjects( - modifiers: List = emptyList(), - includeNested: Boolean = false, - ): Sequence = KoDeclarationProviderUtil.getKoDeclarations(declarations(), modifiers, includeNested) - - fun containsCompanionObject( - name: String, - modifiers: List = emptyList(), - includeNested: Boolean = false, - ): Boolean = companionObjects(modifiers, includeNested).any { it.name == name } -} - interface KoPropertyProvider : KoDeclarationProvider { fun properties( modifiers: List = emptyList(), diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 04abc53f42..e5973feaa6 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -34,10 +34,8 @@ internal object KoDeclarationProviderUtil { KoClassDeclarationImpl.getInstance(it, parent) } else if (it is KtClass && it.isInterface()) { KoInterfaceDeclarationImpl.getInstance(it, parent) - } else if (it is KtObjectDeclaration && !it.isCompanion()) { + } else if (it is KtObjectDeclaration) { KoObjectDeclarationImpl.getInstance(it, parent) - } else if (it is KtObjectDeclaration && it.isCompanion()) { - KoCompanionObjectDeclarationImpl.getInstance(it, parent) } else if (it is KtProperty) { KoPropertyDeclarationImpl.getInstance(it, parent) } else if (it is KtFunction) { diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 2e452a0005..a1db77230f 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -37,12 +37,6 @@ class KoScopeImpl( ): Sequence = koFiles.flatMap { it.objects(modifiers, includeNested) } - override fun companionObjects( - modifiers: List, - includeNested: Boolean, - ): Sequence = - koFiles.flatMap { it.companionObjects(modifiers, includeNested) } - override fun functions( modifiers: List, includeNested: Boolean, From 8903e4d3184b574effb4bcc18198da9302f92b36 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 09:09:12 +0200 Subject: [PATCH 21/26] add extensions for object declaration --- ...KoCompanionObjectDeclarationSequenceExt.kt | 13 --- .../KoObjectDeclarationSequenceExt.kt | 22 +++++ ...mpanionObjectDeclarationSequenceExtTest.kt | 45 ---------- .../KoComplexDeclarationSequenceExtTest.kt | 25 ------ .../KoObjectDeclarationSequenceExtTest.kt | 89 +++++++++++++++++++ 5 files changed, 111 insertions(+), 83 deletions(-) delete mode 100644 lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExt.kt delete mode 100644 lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExtTest.kt diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExt.kt deleted file mode 100644 index bea8aa9b11..0000000000 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExt.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.lemonappdev.konsist.api.ext.sequence - -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration - -/** - * Sequence containing declarations that have name. - */ -fun Sequence.withName(): Sequence = filter { it.hasName() } - -/** - * Sequence containing declarations that don't have name. - */ -fun Sequence.withoutName(): Sequence = filterNot { it.hasName() } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt index ab36d9c3c5..339b11dd46 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt @@ -11,3 +11,25 @@ fun Sequence.withDataModifier(): Sequence.withoutDataModifier(): Sequence = filterNot { it.hasDataModifier() } + +/** + * Sequence containing all declarations that have 'companion' modifier. + */ +fun Sequence.withCompanionModifier(): Sequence = filter { it.hasCompanionModifier() } + +/** + * Sequence containing all declarations that don't have 'companion' modifier. + */ +fun Sequence.withoutCompanionModifier(): Sequence = filterNot { it.hasCompanionModifier() } + +/** + * Sequence containing declarations that have not defaulted name. + */ +fun Sequence.withNamedCompanionObject(): Sequence = + filter { it.hasCompanionModifier() && it.name != "Companion" } + +/** + * Sequence containing declarations that have defaulted name. + */ +fun Sequence.withoutNamedCompanionObject(): Sequence = + filter { it.hasCompanionModifier() && it.name == "Companion" } diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExtTest.kt deleted file mode 100644 index 0e37e89f69..0000000000 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoCompanionObjectDeclarationSequenceExtTest.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.lemonappdev.konsist.api.ext.sequence - -import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl -import io.mockk.every -import io.mockk.mockk -import org.amshove.kluent.shouldBeEqualTo -import org.junit.jupiter.api.Test - -class KoCompanionObjectDeclarationSequenceExtTest { - @Test - fun `withName() returns companion object with name`() { - // given - val companionObject1: KoCompanionObjectDeclarationImpl = mockk { - every { hasName() } returns true - } - val companionObject2: KoCompanionObjectDeclarationImpl = mockk { - every { hasName() } returns false - } - val companionObjects = sequenceOf(companionObject1, companionObject2) - - // when - val sut = companionObjects.withName() - - // then - sut.toList() shouldBeEqualTo listOf(companionObject1) - } - - @Test - fun `withoutName() returns companion object without name`() { - // given - val companionObject1: KoCompanionObjectDeclarationImpl = mockk { - every { hasName() } returns true - } - val companionObject2: KoCompanionObjectDeclarationImpl = mockk { - every { hasName() } returns false - } - val companionObjects = sequenceOf(companionObject1, companionObject2) - - // when - val sut = companionObjects.withoutName() - - // then - sut.toList() shouldBeEqualTo listOf(companionObject2) - } -} diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt index 0e7614e246..80166a6b85 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt @@ -269,31 +269,6 @@ class KoComplexDeclarationSequenceExtTest { sut.toList() shouldBeEqualTo listOf(object1, object2, object3) } - @Test - fun `companionObjects() returns companion objects from all complex declarations`() { - // given - val companionObject1: KoCompanionObjectDeclarationImpl = mockk() - val companionObject2: KoCompanionObjectDeclarationImpl = mockk() - val companionObject3: KoCompanionObjectDeclarationImpl = mockk() - val modifiers = listOf(OPEN, PUBLIC) - val complexDeclaration1: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns sequenceOf(companionObject1, companionObject2) - } - val complexDeclaration2: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns sequenceOf(companionObject3) - } - val complexDeclaration3: KoComplexDeclarationImpl = mockk { - every { companionObjects(modifiers, includeNested = true) } returns emptySequence() - } - val complexDeclarations = sequenceOf(complexDeclaration1, complexDeclaration2, complexDeclaration3) - - // when - val sut = complexDeclarations.companionObjects(modifiers, includeNested = true) - - // then - sut.toList() shouldBeEqualTo listOf(companionObject1, companionObject2, companionObject3) - } - @Test fun `properties() returns properties from all complex declarations`() { // given diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt index 81305b0fcc..e5a39db16a 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt @@ -1,5 +1,6 @@ package com.lemonappdev.konsist.api.ext.sequence +import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoObjectDeclarationImpl import io.mockk.every import io.mockk.mockk @@ -42,4 +43,92 @@ class KoObjectDeclarationSequenceExtTest { // then sut.toList() shouldBeEqualTo listOf(object2) } + + @Test + fun `withCompanionModifier() returns object with companion modifier`() { + // given + val object1: KoObjectDeclarationImpl = mockk { + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { hasCompanionModifier() } returns false + } + val objects = sequenceOf(object1, object2) + + // when + val sut = objects.withCompanionModifier() + + // then + sut.toList() shouldBeEqualTo listOf(object1) + } + + @Test + fun `withoutCompanionModifier() returns object without companion modifier`() { + // given + val object1: KoObjectDeclarationImpl = mockk { + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { hasCompanionModifier() } returns false + } + val objects = sequenceOf(object1, object2) + + // when + val sut = objects.withoutCompanionModifier() + + // then + sut.toList() shouldBeEqualTo listOf(object2) + } + + @Test + fun `withNamedCompanionObject() returns object without default name`() { + // given + val object1: KoObjectDeclarationImpl = mockk { + every { name } returns "name" + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns true + + } + val object3: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns false + + } + val objects = sequenceOf(object1, object2, object3) + + // when + val sut = objects.withNamedCompanionObject() + + // then + sut.toList() shouldBeEqualTo listOf(object1) + } + + @Test + fun `withoutNamedCompanionObject() returns object with default name`() { + // given + val object1: KoObjectDeclarationImpl = mockk { + every { name } returns "name" + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns true + + } + val object3: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns false + + } + val objects = sequenceOf(object1, object2, object3) + + // when + val sut = objects.withoutNamedCompanionObject() + + // then + sut.toList() shouldBeEqualTo listOf(object2) + } } From ac7399782b4f2aad4144fc7287317f705bf6ad35 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 09:13:11 +0200 Subject: [PATCH 22/26] fix KoScopeOperatorTest --- .../konsist/core/scope/koscope/KoScopeOperatorTest.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt index 0de8c16ef3..16fcbd7b64 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/scope/koscope/KoScopeOperatorTest.kt @@ -30,7 +30,6 @@ class KoScopeOperatorTest { listOf( "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", - "KoScopeForCompanionObjectTest.kt", "KoScopeForDeclarationTest.kt", "KoScopeForDeclarationTest.kt", "KoScopeForFunctionTest.kt", @@ -66,7 +65,6 @@ class KoScopeOperatorTest { listOf( "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", - "KoScopeForCompanionObjectTest.kt", "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", @@ -118,7 +116,6 @@ class KoScopeOperatorTest { listOf( "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", - "KoScopeForCompanionObjectTest.kt", "KoScopeForDeclarationTest.kt", "KoScopeForDeclarationTest.kt", "KoScopeForFunctionTest.kt", @@ -154,7 +151,6 @@ class KoScopeOperatorTest { listOf( "KoScopeForAnnotationTest.kt", "KoScopeForClassTest.kt", - "KoScopeForCompanionObjectTest.kt", "KoScopeForFunctionTest.kt", "KoScopeForImportTest.kt", "KoScopeForInterfaceTest.kt", From 51aee47d06da1febfbffd6f0ae3936564e8fa185 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 09:18:08 +0200 Subject: [PATCH 23/26] remove KoCompanionObjectDeclaration --- .../KoObjectDeclarationTest.kt | 6 ++--- .../com/lemonappdev/konsist/api/KoScope.kt | 1 - .../KoCompanionObjectDeclaration.kt | 11 --------- .../KoComplexDeclarationSequenceExt.kt | 1 - .../KoCompanionObjectDeclarationImpl.kt | 23 ------------------- .../provider/KoDeclarationProvider.kt | 1 - .../provider/KoDeclarationProviderUtil.kt | 1 - .../konsist/core/scope/KoScopeImpl.kt | 1 - .../KoComplexDeclarationSequenceExtTest.kt | 1 - .../KoObjectDeclarationSequenceExtTest.kt | 5 ---- 10 files changed, 3 insertions(+), 48 deletions(-) delete mode 100644 lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoCompanionObjectDeclaration.kt delete mode 100644 lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoCompanionObjectDeclarationImpl.kt diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt index dc8f849486..0a8c35e75f 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt @@ -36,7 +36,7 @@ class KoObjectDeclarationTest { .first() // then - assertSoftly (sut) { + assertSoftly(sut) { sut.hasCompanionModifier() shouldBeEqualTo true sut.name shouldBeEqualTo "SampleObject" } @@ -50,7 +50,7 @@ class KoObjectDeclarationTest { .first() // then - assertSoftly (sut) { + assertSoftly(sut) { sut.hasCompanionModifier() shouldBeEqualTo true sut.name shouldBeEqualTo "Companion" } @@ -64,7 +64,7 @@ class KoObjectDeclarationTest { .first() // then - assertSoftly (sut) { + assertSoftly(sut) { sut.hasDataModifier() shouldBeEqualTo false sut.hasCompanionModifier() shouldBeEqualTo false } diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt index 7c03b5b052..174a4e1912 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/KoScope.kt @@ -2,7 +2,6 @@ package com.lemonappdev.konsist.api import com.lemonappdev.konsist.api.declaration.KoAnnotationDeclaration import com.lemonappdev.konsist.api.declaration.KoClassDeclaration -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoCompanionObjectDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoCompanionObjectDeclaration.kt deleted file mode 100644 index 56e9d64471..0000000000 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoCompanionObjectDeclaration.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.lemonappdev.konsist.api.declaration - -/** - * Represents a companion object declaration. - */ -interface KoCompanionObjectDeclaration : KoComplexDeclaration { - /** - * Returns `true` if this companion object has a name. - */ - fun hasName(): Boolean -} diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt index bb80ce681b..beab09e222 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExt.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.api.ext.sequence import com.lemonappdev.konsist.api.declaration.KoClassDeclaration -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoComplexDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoCompanionObjectDeclarationImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoCompanionObjectDeclarationImpl.kt deleted file mode 100644 index 8d05dd26f3..0000000000 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/KoCompanionObjectDeclarationImpl.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.lemonappdev.konsist.core.declaration - -import com.lemonappdev.konsist.api.declaration.KoBaseDeclaration -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration -import com.lemonappdev.konsist.core.cache.KoDeclarationCache -import org.jetbrains.kotlin.psi.KtObjectDeclaration - -internal class KoCompanionObjectDeclarationImpl private constructor( - ktObjectDeclaration: KtObjectDeclaration, - parent: KoBaseDeclaration, -) : - KoComplexDeclarationImpl(ktObjectDeclaration, parent), KoCompanionObjectDeclaration { - override fun hasName() = name != DEFAULT_COMPANION_OBJECT_NAME - - internal companion object { - private val cache = KoDeclarationCache() - - internal const val DEFAULT_COMPANION_OBJECT_NAME = "Companion" - - internal fun getInstance(ktObjectDeclaration: KtObjectDeclaration, parent: KoBaseDeclaration) = - cache.getOrCreateInstance(ktObjectDeclaration, parent) { KoCompanionObjectDeclarationImpl(ktObjectDeclaration, parent) } - } -} diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt index 664e8963db..e5c7d646bb 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProvider.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.core.declaration.provider import com.lemonappdev.konsist.api.declaration.KoClassDeclaration -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoInterfaceDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt index 35c629f16e..12768f9814 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/declaration/provider/KoDeclarationProviderUtil.kt @@ -7,7 +7,6 @@ import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration import com.lemonappdev.konsist.api.declaration.KoNamedDeclaration import com.lemonappdev.konsist.core.declaration.KoAnnotationDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoClassDeclarationImpl -import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoComplexDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoFunctionDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoImportDeclarationImpl diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt index 5f1afd9924..f2f7a1f6bf 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/core/scope/KoScopeImpl.kt @@ -2,7 +2,6 @@ package com.lemonappdev.konsist.core.scope import com.lemonappdev.konsist.api.KoScope import com.lemonappdev.konsist.api.declaration.KoClassDeclaration -import com.lemonappdev.konsist.api.declaration.KoCompanionObjectDeclaration import com.lemonappdev.konsist.api.declaration.KoDeclaration import com.lemonappdev.konsist.api.declaration.KoFileDeclaration import com.lemonappdev.konsist.api.declaration.KoFunctionDeclaration diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt index 7958ad4d1f..ce6231857f 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoComplexDeclarationSequenceExtTest.kt @@ -1,7 +1,6 @@ package com.lemonappdev.konsist.api.ext.sequence import com.lemonappdev.konsist.core.declaration.KoClassDeclarationImpl -import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoComplexDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoFunctionDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoInterfaceDeclarationImpl diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt index e5a39db16a..6b8e61f8e5 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt @@ -1,6 +1,5 @@ package com.lemonappdev.konsist.api.ext.sequence -import com.lemonappdev.konsist.core.declaration.KoCompanionObjectDeclarationImpl import com.lemonappdev.konsist.core.declaration.KoObjectDeclarationImpl import io.mockk.every import io.mockk.mockk @@ -90,12 +89,10 @@ class KoObjectDeclarationSequenceExtTest { val object2: KoObjectDeclarationImpl = mockk { every { name } returns "Companion" every { hasCompanionModifier() } returns true - } val object3: KoObjectDeclarationImpl = mockk { every { name } returns "Companion" every { hasCompanionModifier() } returns false - } val objects = sequenceOf(object1, object2, object3) @@ -116,12 +113,10 @@ class KoObjectDeclarationSequenceExtTest { val object2: KoObjectDeclarationImpl = mockk { every { name } returns "Companion" every { hasCompanionModifier() } returns true - } val object3: KoObjectDeclarationImpl = mockk { every { name } returns "Companion" every { hasCompanionModifier() } returns false - } val objects = sequenceOf(object1, object2, object3) From 6220f4a837fb2c56be3c27bb72cdff614aa12300 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 09:25:31 +0200 Subject: [PATCH 24/26] remove companion objects from tests --- .../kocomplexdeclaration/KoComplexDeclarationForClassTest.kt | 5 ----- .../KoComplexDeclarationForInterfaceTest.kt | 4 ---- .../KoComplexDeclarationForObjectTest.kt | 1 - .../snippet/forclass/class-contains-declarations.kttxt | 2 -- .../forclass/class-contains-nested-declarations.kttxt | 2 -- .../forinterface/interface-contains-declarations.kttxt | 2 -- .../interface-contains-nested-declarations.kttxt | 1 - .../forobject/object-contains-nested-declarations.kttxt | 1 - .../koobjectdeclaration/KoObjectDeclarationTest.kt | 2 +- .../snippet/companion-object-without-name.kttxt | 5 +++-- .../kotlin/com/lemonappdev/konsist/testdata/TestData.kt | 4 ---- .../konsist/api/declaration/KoComplexDeclaration.kt | 2 +- 12 files changed, 5 insertions(+), 26 deletions(-) diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt index d9dcac32c6..35475319d4 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForClassTest.kt @@ -35,7 +35,6 @@ class KoComplexDeclarationForClassTest { "SampleClass", "SampleInterface", "SampleObject", - "SampleCompanionObject", ) sut @@ -59,7 +58,6 @@ class KoComplexDeclarationForClassTest { "SampleClass", "SampleInterface", "SampleObject", - "SampleCompanionObject", ) sut @@ -83,7 +81,6 @@ class KoComplexDeclarationForClassTest { "SampleClass", "SampleInterface", "SampleObject", - "SampleCompanionObject", ) sut @@ -107,7 +104,6 @@ class KoComplexDeclarationForClassTest { "SampleClassNestedInsideClass", "SampleObjectNestedInsideClass", "SampleInterfaceNestedInsideClass", - "SampleCompanionObjectNestedInsideClass", "SampleObject", "SampleClassNestedInsideObject", "SampleObjectNestedInsideObject", @@ -116,7 +112,6 @@ class KoComplexDeclarationForClassTest { "SampleClassNestedInsideInterface", "SampleObjectNestedInsideInterface", "SampleInterfaceNestedInsideInterface", - "SampleCompanionObjectNestedInsideInterface", ) sut.declarations(includeNested = true, includeLocal = true).toList() diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt index a618a07cbf..0c07ba29dc 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForInterfaceTest.kt @@ -35,7 +35,6 @@ class KoComplexDeclarationForInterfaceTest { "SampleClass", "SampleObject", "SampleInterface", - "SampleCompanionObject", ) sut @@ -59,7 +58,6 @@ class KoComplexDeclarationForInterfaceTest { "SampleClass", "SampleObject", "SampleInterface", - "SampleCompanionObject", ) sut @@ -83,7 +81,6 @@ class KoComplexDeclarationForInterfaceTest { "SampleClass", "SampleObject", "SampleInterface", - "SampleCompanionObject", ) sut @@ -107,7 +104,6 @@ class KoComplexDeclarationForInterfaceTest { "SampleClassNestedInsideClass", "SampleObjectNestedInsideClass", "SampleInterfaceNestedInsideClass", - "SampleCompanionObjectNestedInsideClass", "SampleObject", "SampleClassNestedInsideObject", "SampleObjectNestedInsideObject", diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt index 0c01e9986b..1ddba244ab 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/KoComplexDeclarationForObjectTest.kt @@ -104,7 +104,6 @@ class KoComplexDeclarationForObjectTest { "SampleClassNestedInsideClass", "SampleObjectNestedInsideClass", "SampleInterfaceNestedInsideClass", - "SampleCompanionObjectNestedInsideClass", "SampleObject", "SampleClassNestedInsideObject", "SampleObjectNestedInsideObject", diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations.kttxt index b9b43a1f08..6406016242 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-declarations.kttxt @@ -8,6 +8,4 @@ class SampleTopLevelClass { interface SampleInterface object SampleObject - - companion object SampleCompanionObject } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-nested-declarations.kttxt index 1d076e34f1..78cb1b6bf6 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-nested-declarations.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forclass/class-contains-nested-declarations.kttxt @@ -5,7 +5,6 @@ class SampleTopLevelClass { class SampleClassNestedInsideClass object SampleObjectNestedInsideClass interface SampleInterfaceNestedInsideClass - companion object SampleCompanionObjectNestedInsideClass } object SampleObject { @@ -18,6 +17,5 @@ class SampleTopLevelClass { class SampleClassNestedInsideInterface object SampleObjectNestedInsideInterface interface SampleInterfaceNestedInsideInterface - companion object SampleCompanionObjectNestedInsideInterface } } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations.kttxt index f5a812e619..11635e0aaf 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-declarations.kttxt @@ -8,6 +8,4 @@ interface SampleTopLevelInterface { object SampleObject interface SampleInterface - - companion object SampleCompanionObject } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-nested-declarations.kttxt index 74755c6ac4..e2205677c7 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-nested-declarations.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forinterface/interface-contains-nested-declarations.kttxt @@ -5,7 +5,6 @@ interface SampleTopLevelInterface { class SampleClassNestedInsideClass object SampleObjectNestedInsideClass interface SampleInterfaceNestedInsideClass - companion object SampleCompanionObjectNestedInsideClass } object SampleObject { diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-nested-declarations.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-nested-declarations.kttxt index ee6fec695d..a748870526 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-nested-declarations.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/kocomplexdeclaration/snippet/forobject/object-contains-nested-declarations.kttxt @@ -5,7 +5,6 @@ object SampleTopLevelObject { class SampleClassNestedInsideClass object SampleObjectNestedInsideClass interface SampleInterfaceNestedInsideClass - companion object SampleCompanionObjectNestedInsideClass } object SampleObject { diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt index 0a8c35e75f..e2ea5b3551 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/KoObjectDeclarationTest.kt @@ -46,7 +46,7 @@ class KoObjectDeclarationTest { fun `companion-object-without-name`() { // given val sut = getSnippetFile("companion-object-without-name") - .objects() + .objects(includeNested = true) .first() // then diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt index 8d8c6d9cf8..5f6a1adc6b 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/core/declaration/koobjectdeclaration/snippet/companion-object-without-name.kttxt @@ -1,3 +1,4 @@ -companion object { - +class SampleClass{ + companion object { + } } diff --git a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/testdata/TestData.kt b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/testdata/TestData.kt index 6dd5bf3e1c..52dbfa9ceb 100644 --- a/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/testdata/TestData.kt +++ b/lib/src/integrationTest/kotlin/com/lemonappdev/konsist/testdata/TestData.kt @@ -20,10 +20,6 @@ interface SampleInterface2 object SampleObject -interface SampleTopLevelInterface { - companion object SampleCompanionObject -} - annotation class NonExistingAnnotation @Target( diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt index 3b867195bb..5969277c90 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/declaration/KoComplexDeclaration.kt @@ -7,7 +7,7 @@ import com.lemonappdev.konsist.core.declaration.provider.KoObjectProvider import com.lemonappdev.konsist.core.declaration.provider.KoPropertyProvider /** - * Represents a complex declaration, such as a class, interface, object, companion object, etc. + * Represents a complex declaration, such as a class, interface, object, etc. */ interface KoComplexDeclaration : KoDeclaration, From d83cc6499d1d94a9bbf2d72e0b368217df2461e3 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 11:46:50 +0200 Subject: [PATCH 25/26] add new extensions --- .../KoObjectDeclarationSequenceExt.kt | 18 ++++- .../KoObjectDeclarationSequenceExtTest.kt | 68 +++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt index 339b11dd46..9ddbee663c 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt @@ -23,13 +23,27 @@ fun Sequence.withCompanionModifier(): Sequence.withoutCompanionModifier(): Sequence = filterNot { it.hasCompanionModifier() } /** - * Sequence containing declarations that have not defaulted name. + * Sequence containing declarations that have 'companion' modifier and not defaulted name. */ fun Sequence.withNamedCompanionObject(): Sequence = filter { it.hasCompanionModifier() && it.name != "Companion" } /** - * Sequence containing declarations that have defaulted name. + * Sequence containing declarations that have 'companion' modifier and defaulted name. */ fun Sequence.withoutNamedCompanionObject(): Sequence = filter { it.hasCompanionModifier() && it.name == "Companion" } + +/** + * Sequence containing declarations that have 'companion' modifier and name. + */ +fun Sequence.withNamedCompanionObjectAs(vararg names: String): Sequence = filter { + it.hasCompanionModifier() && names.any { name -> it.name == name } +} + +/** + * Sequence containing declarations that have 'companion' modifier and don't have name. + */ +fun Sequence.withoutNamedCompanionObjectAs(vararg names: String): Sequence = filter { + it.hasCompanionModifier() && names.none { name -> it.name == name } +} diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt index 6b8e61f8e5..a16b29c87d 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt @@ -126,4 +126,72 @@ class KoObjectDeclarationSequenceExtTest { // then sut.toList() shouldBeEqualTo listOf(object2) } + + @Test + fun `withNamedCompanionObjectAs() returns companion objects with any of given name`() { + // given + val name1 = "name1" + val name2 = "name2" + val object1: KoObjectDeclarationImpl = mockk { + every { name } returns name1 + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { name } returns name2 + every { hasCompanionModifier() } returns true + } + val object3: KoObjectDeclarationImpl = mockk { + every { name } returns "OtherName" + every { hasCompanionModifier() } returns true + } + val object4: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns true + } + val object5: KoObjectDeclarationImpl = mockk { + every { name } returns name1 + every { hasCompanionModifier() } returns false + } + val objects = sequenceOf(object1, object2, object3, object4, object5) + + // when + val sut = objects.withNamedCompanionObjectAs(name1, name2) + + // then + sut.toList() shouldBeEqualTo listOf(object1, object2) + } + + @Test + fun `withoutNamedCompanionObjectAs() returns companion objects with none of given name`() { + // given + val name1 = "name1" + val name2 = "name2" + val object1: KoObjectDeclarationImpl = mockk { + every { name } returns name1 + every { hasCompanionModifier() } returns true + } + val object2: KoObjectDeclarationImpl = mockk { + every { name } returns name2 + every { hasCompanionModifier() } returns true + } + val object3: KoObjectDeclarationImpl = mockk { + every { name } returns "OtherName" + every { hasCompanionModifier() } returns true + } + val object4: KoObjectDeclarationImpl = mockk { + every { name } returns "Companion" + every { hasCompanionModifier() } returns true + } + val object5: KoObjectDeclarationImpl = mockk { + every { name } returns name1 + every { hasCompanionModifier() } returns false + } + val objects = sequenceOf(object1, object2, object3, object4, object5) + + // when + val sut = objects.withoutNamedCompanionObjectAs(name1, name2) + + // then + sut.toList() shouldBeEqualTo listOf(object3, object4) + } } From 87c9e62ba37290d03b8ccf2f90cd8a1a4e7e0ba1 Mon Sep 17 00:00:00 2001 From: "natalia.peterwas" Date: Thu, 11 May 2023 14:51:29 +0200 Subject: [PATCH 26/26] remove unnecessary extensions --- .../KoObjectDeclarationSequenceExt.kt | 26 ---- .../KoObjectDeclarationSequenceExtTest.kt | 116 ------------------ 2 files changed, 142 deletions(-) diff --git a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt index 9ddbee663c..efc61b5679 100644 --- a/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt +++ b/lib/src/main/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExt.kt @@ -21,29 +21,3 @@ fun Sequence.withCompanionModifier(): Sequence.withoutCompanionModifier(): Sequence = filterNot { it.hasCompanionModifier() } - -/** - * Sequence containing declarations that have 'companion' modifier and not defaulted name. - */ -fun Sequence.withNamedCompanionObject(): Sequence = - filter { it.hasCompanionModifier() && it.name != "Companion" } - -/** - * Sequence containing declarations that have 'companion' modifier and defaulted name. - */ -fun Sequence.withoutNamedCompanionObject(): Sequence = - filter { it.hasCompanionModifier() && it.name == "Companion" } - -/** - * Sequence containing declarations that have 'companion' modifier and name. - */ -fun Sequence.withNamedCompanionObjectAs(vararg names: String): Sequence = filter { - it.hasCompanionModifier() && names.any { name -> it.name == name } -} - -/** - * Sequence containing declarations that have 'companion' modifier and don't have name. - */ -fun Sequence.withoutNamedCompanionObjectAs(vararg names: String): Sequence = filter { - it.hasCompanionModifier() && names.none { name -> it.name == name } -} diff --git a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt index a16b29c87d..99393cfbc3 100644 --- a/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt +++ b/lib/src/test/kotlin/com/lemonappdev/konsist/api/ext/sequence/KoObjectDeclarationSequenceExtTest.kt @@ -78,120 +78,4 @@ class KoObjectDeclarationSequenceExtTest { // then sut.toList() shouldBeEqualTo listOf(object2) } - - @Test - fun `withNamedCompanionObject() returns object without default name`() { - // given - val object1: KoObjectDeclarationImpl = mockk { - every { name } returns "name" - every { hasCompanionModifier() } returns true - } - val object2: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns true - } - val object3: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns false - } - val objects = sequenceOf(object1, object2, object3) - - // when - val sut = objects.withNamedCompanionObject() - - // then - sut.toList() shouldBeEqualTo listOf(object1) - } - - @Test - fun `withoutNamedCompanionObject() returns object with default name`() { - // given - val object1: KoObjectDeclarationImpl = mockk { - every { name } returns "name" - every { hasCompanionModifier() } returns true - } - val object2: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns true - } - val object3: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns false - } - val objects = sequenceOf(object1, object2, object3) - - // when - val sut = objects.withoutNamedCompanionObject() - - // then - sut.toList() shouldBeEqualTo listOf(object2) - } - - @Test - fun `withNamedCompanionObjectAs() returns companion objects with any of given name`() { - // given - val name1 = "name1" - val name2 = "name2" - val object1: KoObjectDeclarationImpl = mockk { - every { name } returns name1 - every { hasCompanionModifier() } returns true - } - val object2: KoObjectDeclarationImpl = mockk { - every { name } returns name2 - every { hasCompanionModifier() } returns true - } - val object3: KoObjectDeclarationImpl = mockk { - every { name } returns "OtherName" - every { hasCompanionModifier() } returns true - } - val object4: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns true - } - val object5: KoObjectDeclarationImpl = mockk { - every { name } returns name1 - every { hasCompanionModifier() } returns false - } - val objects = sequenceOf(object1, object2, object3, object4, object5) - - // when - val sut = objects.withNamedCompanionObjectAs(name1, name2) - - // then - sut.toList() shouldBeEqualTo listOf(object1, object2) - } - - @Test - fun `withoutNamedCompanionObjectAs() returns companion objects with none of given name`() { - // given - val name1 = "name1" - val name2 = "name2" - val object1: KoObjectDeclarationImpl = mockk { - every { name } returns name1 - every { hasCompanionModifier() } returns true - } - val object2: KoObjectDeclarationImpl = mockk { - every { name } returns name2 - every { hasCompanionModifier() } returns true - } - val object3: KoObjectDeclarationImpl = mockk { - every { name } returns "OtherName" - every { hasCompanionModifier() } returns true - } - val object4: KoObjectDeclarationImpl = mockk { - every { name } returns "Companion" - every { hasCompanionModifier() } returns true - } - val object5: KoObjectDeclarationImpl = mockk { - every { name } returns name1 - every { hasCompanionModifier() } returns false - } - val objects = sequenceOf(object1, object2, object3, object4, object5) - - // when - val sut = objects.withoutNamedCompanionObjectAs(name1, name2) - - // then - sut.toList() shouldBeEqualTo listOf(object3, object4) - } }