📄 smcvbgenerator.java
字号:
indent2 = _indent + " "; } else { indent2 = _indent + " "; } // Save away the transition name in case it is // need in an UndefinedTransitionException. _source.print(indent2); _source.print("_transition = \""); _source.print(trans.getName()); _source.println("\""); _source.print(indent2); _source.print("State."); _source.print(trans.getName()); _source.print("(Me"); for (SmcParameter param: params) { _source.print(", "); _source.print(param.getName()); } _source.println(")"); _source.print(indent2); _source.println("_transition = \"\""); // If the -sync flag was specified, then output // the "End SyncLock". if (Smc.isSynchronized() == true) { _source.print(_indent); _source.println(" End SyncLock"); } _source.print(_indent); _source.println(" End Sub"); _source.println(); } } // If serialization is one, then output the GetObjectData // and deserialize constructor. if (Smc.isSerial() == true) { // Output the ValueOf method. _source.print(_indent); _source.print(" Public Function ValueOf("); _source.print("ByVal stateId As Integer) As "); _source.print(context); _source.println("State"); _source.println(); _source.print(_indent); _source.println( " Return _States(stateId)"); _source.print(_indent); _source.println(" End Function"); _source.println(); _source.print(_indent); _source.print(" Private Sub GetObjectData("); _source.println( "ByVal info As SerializationInfo, _"); _source.print(_indent); _source.print(" "); _source.println( "ByVal context As StreamingContext) _"); _source.print(_indent); _source.print(" "); _source.println( "Implements ISerializable.GetObjectData"); _source.println(); _source.print(_indent); _source.println( " Dim stackSize As Integer = 0"); _source.print(_indent); _source.println(" Dim index As Integer"); _source.print(_indent); _source.println(" Dim it As IEnumerator"); _source.println(); _source.print(_indent); _source.println( " If Not IsNothing(_stateStack) _"); _source.print(_indent); _source.println(" Then"); _source.print(_indent); _source.println( " stackSize = _stateStack.Count"); _source.print(_indent); _source.println( " it = _stateStack.GetEnumerator()"); _source.print(_indent); _source.println(" End If"); _source.println(); _source.print(_indent); _source.print(" "); _source.println( "info.AddValue(\"stackSize\", stackSize)"); _source.println(); _source.print(_indent); _source.println(" index = 0"); _source.print(_indent); _source.println(" While index < stackSize"); _source.print(_indent); _source.println(" info.AddValue( _"); _source.print(_indent); _source.print(" "); _source.println( "String.Concat(\"stackItem\", index), _"); _source.print(_indent); _source.println( " it.Current.Id)"); _source.print(_indent); _source.println( " it.MoveNext()"); _source.print(_indent); _source.println( " index += 1"); _source.print(_indent); _source.println(" End While"); _source.println(); _source.print(_indent); _source.println( " info.AddValue(\"state\", _state.Id)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); _source.print(_indent); _source.print(" Private Sub New("); _source.println( "ByVal info As SerializationInfo, _"); _source.print(_indent); _source.print(" "); _source.println( "ByVal context As StreamingContext)"); _source.println(); _source.print(_indent); _source.println(" Dim stackSize As Integer"); _source.print(_indent); _source.println(" Dim stateId As Integer"); _source.println(); _source.print(_indent); _source.print(" stackSize = "); _source.println("info.GetInt32(\"stackSize\")"); _source.print(_indent); _source.println(" If stackSize > 0 _"); _source.print(_indent); _source.println(" Then"); _source.print(_indent); _source.println(" Dim index As Integer"); _source.println(); _source.print(_indent); _source.println( " _stateStack = New Stack()"); _source.print(_indent); _source.println( " index = stackSize - 1"); _source.print(_indent); _source.println( " While index >= 0"); _source.print(_indent); _source.println( " stateId = _"); _source.print(_indent); _source.println( " info.GetInt32( _"); _source.print(_indent); _source.print(" "); _source.println( "String.Concat(\"stackItem\", index))"); _source.print(_indent); _source.print(" "); _source.println( "_stateStack.Push(_States(stateId))"); _source.print(_indent); _source.println( " index -= 1"); _source.print(_indent); _source.println( " End While"); _source.print(_indent); _source.println(" End If"); _source.println(); _source.print(_indent); _source.println( " stateId = info.GetInt32(\"state\")"); _source.print(_indent); _source.println(" _state = _States(stateId)"); _source.println(); _source.print(_indent); _source.println(" End Sub"); _source.println(); } // The context class declaration is complete. _source.print(_indent); _source.println("End Class"); _source.println(); // Declare the root application state class. _source.print(_indent); _source.print("Public MustInherit Class "); _source.print(context); _source.println("State"); _source.print(_indent); _source.println(" Inherits statemap.State"); _source.println(); // If reflection is on, then generate the abstract // Transitions property. if (Smc.isReflection() == true) { _source.print(_indent); _source.println( " '------------------------------------------------------------"); _source.print(_indent); _source.println(" ' Properties"); _source.print(_indent); _source.println(" '"); _source.println(); _source.print(_indent); _source.print(" Public MustOverride ReadOnly "); _source.println( "Property Transitions() As IDictionary"); _source.println(); } _source.print(_indent); _source.println( " '------------------------------------------------------------"); _source.print(_indent); _source.println(" ' Member methods"); _source.print(_indent); _source.println(" '"); _source.println(); _source.print(_indent); _source.print(" Protected Sub New("); _source.println( "ByVal name As String, ByVal id As Integer)"); _source.println(); _source.print(_indent); _source.println(" MyBase.New(name, id)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); _source.print(_indent); _source.print(" Public Overridable Sub Entry("); _source.print("ByRef context As "); _source.print(context); _source.println("Context)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); _source.print(_indent); _source.print(" Public Overridable Sub Exit_("); _source.print("ByRef context As "); _source.print(context); _source.println("Context)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); // Generate the default transition definitions. for (SmcTransition trans: transitions) { // Don't generate the Default transition here. if (trans.getName().equals("Default") == false) { _source.print(_indent); _source.print(" Public Overridable Sub "); _source.print(trans.getName()); _source.print("(ByRef context As "); _source.print(context); _source.print("Context"); for (SmcParameter param: trans.getParameters()) { _source.print(", "); param.accept(this); } _source.println(")"); _source.println(); // If this method is reached, that means that // this transition was passed to a state which // does not define the transition. Call the // state's default transition method. // Note: "Default" is a VB keyword, so use // "Default_" instead. _source.print(_indent); _source.println(" Default_(context)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); } } // Generate the overall Default transition for all maps. // Note: "Default" is a VB keyword, so use "Default_" // instead. _source.print(_indent); _source.print(" Public Overridable Sub Default_("); _source.print("ByRef context As "); _source.print(context); _source.println("Context)"); _source.println(); if (Smc.isDebug() == true) { _source.println("#If TRACE Then"); _source.print(_indent); _source.print(" Trace.WriteLine("); _source.println("\"TRANSITION : Default\")"); _source.println("#End If"); _source.println(); } _source.print(_indent); _source.print(" Throw "); _source.println( "New statemap.TransitionUndefinedException( _"); _source.print(_indent); _source.println( " String.Concat(\"State: \", _"); _source.print(_indent); _source.println(" context.State.Name, _"); _source.print(_indent); _source.println(" \", Transition: \", _"); _source.print(_indent); _source.println( " context.GetTransition()))"); _source.print(_indent); _source.println(" End Sub"); // End of the application class' state class. _source.print(_indent); _source.println("End Class"); // Have each map print out its source code now. for (SmcMap map: maps) { map.accept(this); } // If a package has been specified, then generate // the End tag now. if (packageName != null && packageName.length() > 0) { _source.println(); _source.println("End Namespace"); } return; } // end of visit(SmcFSM) public void visit(SmcMap map) { List<SmcTransition> definedDefaultTransitions; SmcState defaultState = map.getDefaultState(); String context = map.getFSM().getContext(); String mapName = map.getName(); List<SmcState> states = map.getStates(); String stateName; // Initialize the default transition list to all the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -