Skip to content

Commit cc6106d

Browse files
committed
[refactoring] Move files into folders (breaking change)
This will break existing client code. But I have to store files in more structured way
1 parent 86f737d commit cc6106d

File tree

94 files changed

+707
-279
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+707
-279
lines changed

kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/CoroutinesLibCoroutineAbstraction.kt kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/coroutines/CoroutinesLibCoroutineAbstraction.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.coroutines
22

33
import kotlinx.coroutines.*
44

kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/CoroutinesStateMachine.kt kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/statemachine/CoroutinesStateMachine.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.statemachine
22

33
import kotlinx.coroutines.CoroutineScope
4+
import ru.nsk.kstatemachine.coroutines.CoroutinesLibCoroutineAbstraction
5+
import ru.nsk.kstatemachine.coroutines.createStateMachine
6+
import ru.nsk.kstatemachine.state.ChildMode
47

58
/**
69
* Suspendable analog of [createStdLibStateMachine] function, with Kotlin Coroutines support.

kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/StateMachineFlow.kt kstatemachine-coroutines/src/commonMain/kotlin/ru/nsk/kstatemachine/statemachine/StateMachineFlow.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.statemachine
22

33
import kotlinx.coroutines.flow.*
4-
import ru.nsk.kstatemachine.StateMachineNotification.*
4+
import ru.nsk.kstatemachine.statemachine.StateMachineNotification.*
5+
import ru.nsk.kstatemachine.state.IState
6+
import ru.nsk.kstatemachine.state.activeStates
7+
import ru.nsk.kstatemachine.transition.TransitionParams
58

69
sealed class StateMachineNotification(val machine: StateMachine) {
710
class Started(machine: StateMachine) : StateMachineNotification(machine)

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/DefaultState.kt

-67
This file was deleted.

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/LibraryUtils.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package ru.nsk.kstatemachine
22

3+
import ru.nsk.kstatemachine.state.IState
4+
import ru.nsk.kstatemachine.state.InternalState
5+
import ru.nsk.kstatemachine.statemachine.StateMachine
6+
37
/**
4-
* [forEach] analog which ignores internal state machines
8+
* [forEach] analog which ignores internal [StateMachine]s
59
*/
610
internal suspend fun Iterable<InternalState>.forEachState(block: suspend (InternalState) -> Unit) {
711
forEach { if (it !is StateMachine) block(it) }

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/StateMachine.kt

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
1-
package ru.nsk.kstatemachine
2-
3-
import ru.nsk.kstatemachine.StateMachine.PendingEventHandler
1+
package ru.nsk.kstatemachine.statemachine
2+
3+
import ru.nsk.kstatemachine.coroutines.CoroutineAbstraction
4+
import ru.nsk.kstatemachine.coroutines.StdLibCoroutineAbstraction
5+
import ru.nsk.kstatemachine.coroutines.createStateMachine
6+
import ru.nsk.kstatemachine.event.DestroyEvent
7+
import ru.nsk.kstatemachine.event.Event
8+
import ru.nsk.kstatemachine.event.StopEvent
9+
import ru.nsk.kstatemachine.event.UndoEvent
10+
import ru.nsk.kstatemachine.state.ChildMode
11+
import ru.nsk.kstatemachine.state.IState
12+
import ru.nsk.kstatemachine.state.State
13+
import ru.nsk.kstatemachine.statemachine.StateMachine.PendingEventHandler
14+
import ru.nsk.kstatemachine.transition.EventAndArgument
15+
import ru.nsk.kstatemachine.transition.Transition
16+
import ru.nsk.kstatemachine.transition.TransitionParams
417
import ru.nsk.kstatemachine.visitors.CoVisitor
518
import ru.nsk.kstatemachine.visitors.Visitor
619

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/TreeAlgorithms.kt

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package ru.nsk.kstatemachine
22

3+
import ru.nsk.kstatemachine.state.InternalNode
4+
import ru.nsk.kstatemachine.state.requireParentNode
5+
36
/**
47
* @return Path from [targetState] to the lowest common ancestor (lca).
58
* Path order: Lca and its parent if [addLcaParent] is true are last elements in resulting list.

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/CoroutineAbstraction.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/coroutines/CoroutineAbstraction.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.coroutines
22

3+
import ru.nsk.kstatemachine.state.ChildMode
4+
import ru.nsk.kstatemachine.statemachine.BuildingStateMachine
5+
import ru.nsk.kstatemachine.statemachine.StateMachine
6+
import ru.nsk.kstatemachine.statemachine.StateMachineImpl
37
import kotlin.coroutines.Continuation
48
import kotlin.coroutines.EmptyCoroutineContext
59
import kotlin.coroutines.startCoroutine

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/DataExtractor.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/event/DataExtractor.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.event
2+
3+
import ru.nsk.kstatemachine.state.DataState
4+
import ru.nsk.kstatemachine.transition.TransitionParams
25

36
/**
47
* Allows to extract data for [DataState] from any [Event]

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/TransitionParams.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/event/Event.kt

+7-27
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.event
2+
3+
import ru.nsk.kstatemachine.state.*
4+
import ru.nsk.kstatemachine.statemachine.StateMachine
5+
import ru.nsk.kstatemachine.statemachine.processEventBlocking
26

37
/**
48
* Base interface for events which may trigger transitions of [StateMachine]
@@ -64,29 +68,5 @@ internal class DestroyEvent(val stop: Boolean) : GeneratedEvent
6468
* @param event original event
6569
* @param argument original argument
6670
*/
67-
class WrappedEvent(val event: Event, val argument: Any?) : Event
68-
69-
@StateMachineDslMarker
70-
data class TransitionParams<E : Event>(
71-
val transition: Transition<E>,
72-
val direction: TransitionDirection,
73-
val event: E,
74-
/**
75-
* This parameter may be used to pass arbitrary data with the event,
76-
* so there is no need to define [Event] subclasses every time.
77-
* Subclassing should be preferred if the event always contains data of some type.
78-
*/
79-
val argument: Any? = null,
80-
)
81-
82-
/**
83-
* Convenience property for unwrapping original event.
84-
* If the event is not [WrappedEvent] this is same as [TransitionParams.event] property
85-
*/
86-
val TransitionParams<*>.unwrappedEvent get() = if (event is WrappedEvent) event.event else event
87-
88-
/**
89-
* Convenience property for unwrapping original argument.
90-
* If the event is not [WrappedEvent] this is same as [TransitionParams.argument] property
91-
*/
92-
val TransitionParams<*>.unwrappedArgument get() = if (event is WrappedEvent) event.argument else argument
71+
class WrappedEvent(val event: Event, val argument: Any?) :
72+
Event

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/EventMatcher.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/event/EventMatcher.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.event
22

3+
import ru.nsk.kstatemachine.state.IState
4+
import ru.nsk.kstatemachine.transition.Transition
5+
import ru.nsk.kstatemachine.transition.TransitionBuilder
36
import kotlin.reflect.KClass
47

58
/**

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/MetaInfo.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/metainfo/MetaInfo.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.metainfo
2+
3+
import ru.nsk.kstatemachine.state.IState
4+
import ru.nsk.kstatemachine.transition.Transition
25

36
/**
47
* Additional static (designed to be immutable) info for library primitives like [IState] [Transition] etc.

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/BaseStateImpl.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/BaseStateImpl.kt

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
package ru.nsk.kstatemachine
2-
3-
import ru.nsk.kstatemachine.ChildMode.EXCLUSIVE
4-
import ru.nsk.kstatemachine.ChildMode.PARALLEL
5-
import ru.nsk.kstatemachine.TransitionType.EXTERNAL
1+
package ru.nsk.kstatemachine.state
2+
3+
import ru.nsk.kstatemachine.*
4+
import ru.nsk.kstatemachine.event.Event
5+
import ru.nsk.kstatemachine.event.FinishedEvent
6+
import ru.nsk.kstatemachine.metainfo.MetaInfo
7+
import ru.nsk.kstatemachine.state.ChildMode.EXCLUSIVE
8+
import ru.nsk.kstatemachine.state.ChildMode.PARALLEL
9+
import ru.nsk.kstatemachine.statemachine.StateMachine
10+
import ru.nsk.kstatemachine.statemachine.destroyBlocking
11+
import ru.nsk.kstatemachine.statemachine.machineNotify
12+
import ru.nsk.kstatemachine.transition.*
13+
import ru.nsk.kstatemachine.transition.TransitionType.EXTERNAL
614

715
/**
816
* Base [IState] implementation for all states

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/DefaultDataState.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/DefaultDataState.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.state
22

3-
import ru.nsk.kstatemachine.ChildMode.EXCLUSIVE
3+
import ru.nsk.kstatemachine.event.*
4+
import ru.nsk.kstatemachine.state.ChildMode.EXCLUSIVE
5+
import ru.nsk.kstatemachine.transition.TransitionParams
46

57
/** inline constructor function */
68
inline fun <reified D : Any> defaultDataState(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package ru.nsk.kstatemachine.state
2+
3+
import ru.nsk.kstatemachine.state.ChildMode.EXCLUSIVE
4+
5+
/**
6+
* The most common state
7+
*/
8+
open class DefaultState(name: String? = null, childMode: ChildMode = EXCLUSIVE) :
9+
BaseStateImpl(name, childMode), State
10+
11+
open class DefaultFinalState(name: String? = null) : DefaultState(name), FinalState

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/IState.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/IState.kt

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
1-
package ru.nsk.kstatemachine
2-
1+
package ru.nsk.kstatemachine.state
2+
3+
import ru.nsk.kstatemachine.event.DataExtractor
4+
import ru.nsk.kstatemachine.event.defaultDataExtractor
5+
import ru.nsk.kstatemachine.metainfo.MetaInfo
6+
import ru.nsk.kstatemachine.state.pseudo.DefaultChoiceDataState
7+
import ru.nsk.kstatemachine.state.pseudo.DefaultChoiceState
8+
import ru.nsk.kstatemachine.state.pseudo.DefaultHistoryState
9+
import ru.nsk.kstatemachine.statemachine.StateMachine
10+
import ru.nsk.kstatemachine.statemachine.StateMachineDslMarker
11+
import ru.nsk.kstatemachine.transition.EventAndArgument
12+
import ru.nsk.kstatemachine.transition.TransitionDirection
13+
import ru.nsk.kstatemachine.transition.TransitionDirectionProducerPolicy
14+
import ru.nsk.kstatemachine.transition.TransitionParams
315
import ru.nsk.kstatemachine.visitors.CoVisitor
416
import ru.nsk.kstatemachine.visitors.GetActiveStatesVisitor
517
import ru.nsk.kstatemachine.visitors.Visitor

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/InternalState.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/InternalState.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.state
22

3-
import ru.nsk.kstatemachine.TransitionDirectionProducerPolicy.DefaultPolicy
3+
import ru.nsk.kstatemachine.PathNode
4+
import ru.nsk.kstatemachine.event.Event
5+
import ru.nsk.kstatemachine.transition.*
6+
import ru.nsk.kstatemachine.transition.TransitionDirectionProducerPolicy.DefaultPolicy
47

58
/**
69
* Contains tree composition api for [InternalState].

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/StateGroupListener.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/StateGroupListener.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.state
22

3+
import ru.nsk.kstatemachine.transition.TransitionParams
34
import kotlin.properties.Delegates.observable
45

56
interface GroupListener {

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/StateListener.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/StateListener.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.state
2+
3+
import ru.nsk.kstatemachine.statemachine.InternalStateMachine
4+
import ru.nsk.kstatemachine.statemachine.runDelayingException
5+
import ru.nsk.kstatemachine.transition.TransitionParams
26

37
internal suspend inline fun InternalState.stateNotify(crossinline block: suspend IState.Listener.() -> Unit) {
48
val machine = machine as InternalStateMachine

kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/TransitionStateApi.kt kstatemachine/src/commonMain/kotlin/ru/nsk/kstatemachine/state/TransitionStateApi.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
package ru.nsk.kstatemachine
1+
package ru.nsk.kstatemachine.state
22

3-
import ru.nsk.kstatemachine.EventMatcher.Companion.isInstanceOf
4-
import ru.nsk.kstatemachine.TransitionType.LOCAL
3+
import ru.nsk.kstatemachine.event.*
4+
import ru.nsk.kstatemachine.event.EventMatcher.Companion.isInstanceOf
5+
import ru.nsk.kstatemachine.metainfo.MetaInfo
6+
import ru.nsk.kstatemachine.transition.*
7+
import ru.nsk.kstatemachine.transition.TransitionType.LOCAL
58

69
/**
710
* Helper interface for [IState] to keep transitions logic separately.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package ru.nsk.kstatemachine.state.pseudo
2+
3+
import ru.nsk.kstatemachine.event.Event
4+
import ru.nsk.kstatemachine.state.*
5+
import ru.nsk.kstatemachine.transition.Transition
6+
import ru.nsk.kstatemachine.transition.TransitionParams
7+
8+
open class BasePseudoState(name: String?) : BaseStateImpl(name, ChildMode.EXCLUSIVE), PseudoState {
9+
override suspend fun doEnter(transitionParams: TransitionParams<*>) = internalError()
10+
override suspend fun doExit(transitionParams: TransitionParams<*>) = internalError()
11+
12+
override fun <L : IState.Listener> addListener(listener: L) =
13+
throw UnsupportedOperationException("PseudoState $this can not have listeners")
14+
15+
override fun <S : IState> addState(state: S, init: StateBlock<S>?) =
16+
throw UnsupportedOperationException("PseudoState $this can not have child states")
17+
18+
19+
override fun <E : Event> addTransition(transition: Transition<E>) =
20+
throw UnsupportedOperationException("PseudoState $this can not have transitions")
21+
22+
private fun internalError(): Nothing =
23+
error("Internal error, PseudoState $this can not be entered or exited, looks that machine is purely configured")
24+
}

0 commit comments

Comments
 (0)