Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

callMethod not compatible with kotlin when Context is null #107

Open
yueban opened this issue Jan 6, 2020 · 0 comments
Open

callMethod not compatible with kotlin when Context is null #107

yueban opened this issue Jan 6, 2020 · 0 comments

Comments

@yueban
Copy link

yueban commented Jan 6, 2020

when using kotlin language. If I invoke fire on a stateMachine instance without any context. It failed on invoking transition method.

here is the code:

// init fsm
val builder = StateMachineBuilderFactory.create(
    CallStateMachine::class.java, FSMState::class.java, FSMEvent::class.java, CallContext::class.java
)
builder.externalTransition().from(FSMState.UnInit).to(FSMState.Initing).on(FSMEvent.doLogin).callMethod(FSMMethods.doLogin.name)
builder.newStateMachine(FSMState.UnInit, StateMachineConfiguration.create().enableDebugMode(true))

// fire event
fsm.fire(CallStateMachineWrapper.FSMEvent.doLogin);

here is the log:

Error during transition
org.squirrelframework.foundation.exception.SquirrelRuntimeException: 00010012 : couldn't invoke 'public final void com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$CallStateMachine.doLogin(com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$FSMState,com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$FSMState,com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$FSMEvent,com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$CallContext)' with [UnInit, Initing, doLogin, null] on com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperOld$CallStateMachine@3712b94: null.
	at org.squirrelframework.foundation.util.ReflectUtils.invoke(ReflectUtils.java:337)
	at org.squirrelframework.foundation.fsm.impl.MethodCallActionImpl.invokeMethod(MethodCallActionImpl.java:91)
	at org.squirrelframework.foundation.fsm.impl.MethodCallActionImpl.execute(MethodCallActionImpl.java:69)
	at org.squirrelframework.foundation.fsm.impl.MethodCallActionProxyImpl.execute(MethodCallActionProxyImpl.java:47)
	at org.squirrelframework.foundation.fsm.impl.AbstractExecutionService$ActionContext.run(AbstractExecutionService.java:307)
	at org.squirrelframework.foundation.fsm.impl.AbstractExecutionService.doExecute(AbstractExecutionService.java:81)
	at org.squirrelframework.foundation.fsm.impl.AbstractExecutionService.executeActions(AbstractExecutionService.java:132)
	at org.squirrelframework.foundation.fsm.impl.AbstractExecutionService.execute(AbstractExecutionService.java:140)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.processEvent(AbstractStateMachine.java:165)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.processEvents(AbstractStateMachine.java:215)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.internalFire(AbstractStateMachine.java:248)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.fire(AbstractStateMachine.java:268)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.fire(AbstractStateMachine.java:279)
	at org.squirrelframework.foundation.fsm.impl.AbstractStateMachine.fire(AbstractStateMachine.java:293)
	at com.yueban.squirrelstatemachinedemo.CallStateMachineWrapperTest.test(CallStateMachineWrapperTest.java:13)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant