Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
sarah.grebing
ProofScriptParser
Commits
698add94
Commit
698add94
authored
Jun 05, 2017
by
Alexander Weigl
Browse files
sequent view and clean
parent
ed44f370
Pipeline
#10943
failed with stage
in 2 minutes and 20 seconds
Changes
20
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
.checkstyle_rules.xml
View file @
698add94
...
...
@@ -43,7 +43,7 @@
<!-- Checks that a package-info.java file exists for each package. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
<module
name=
"JavadocPackage"
/>
<!--
<module name="JavadocPackage"/>
-->
<!-- Checks whether files end with a new line. -->
<!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
...
...
@@ -153,7 +153,7 @@
<module
name=
"AvoidInlineConditionals"
/>
<module
name=
"EmptyStatement"
/>
<module
name=
"EqualsHashCode"
/>
<module
name=
"HiddenField"
/>
<!--
<module name="HiddenField"/>
-->
<module
name=
"IllegalInstantiation"
/>
<module
name=
"InnerAssignment"
/>
<module
name=
"MagicNumber"
/>
...
...
@@ -172,7 +172,7 @@
<!-- Miscellaneous other checks. -->
<!-- See http://checkstyle.sf.net/config_misc.html -->
<module
name=
"ArrayTypeStyle"
/>
<!-- <module name="FinalParameters"/> -->
<!-- <module name="FinalParameters"/> -->
<module
name=
"TodoComment"
/>
<module
name=
"UpperEll"
/>
...
...
pom.xml
View file @
698add94
...
...
@@ -185,7 +185,7 @@
<dependency>
<groupId>
org.fxmisc.richtext
</groupId>
<artifactId>
richtextfx
</artifactId>
<version>
0.
6.10
</version>
<version>
0.
7-M5
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
...
...
src/main/java/edu/kit/formal/gui/controller/ContractChooser.java
View file @
698add94
...
...
@@ -61,7 +61,7 @@ public class ContractChooser extends Dialog<Contract> {
}
private
class
ContractListCell
extends
ListCell
<
Contract
>
{
public
ContractListCell
(
ListView
<
Contract
>
contractListView
)
{
ContractListCell
(
ListView
<
Contract
>
contractListView
)
{
itemProperty
().
addListener
((
observable
,
oldValue
,
newValue
)
->
render
());
selectedProperty
().
addListener
((
observable
,
oldValue
,
newValue
)
->
render
());
}
...
...
src/main/java/edu/kit/formal/gui/controller/DebuggerMainWindowController.java
View file @
698add94
...
...
@@ -2,16 +2,24 @@ package edu.kit.formal.gui.controller;
import
de.uka.ilkd.key.logic.op.IProgramMethod
;
import
de.uka.ilkd.key.pp.ProgramPrinter
;
import
de.uka.ilkd.key.proof.init.ProofInputException
;
import
de.uka.ilkd.key.speclang.Contract
;
import
edu.kit.formal.gui.controls.JavaArea
;
import
edu.kit.formal.gui.controls.ScriptArea
;
import
edu.kit.formal.gui.controls.SequentView
;
import
edu.kit.formal.gui.model.RootModel
;
import
edu.kit.formal.interpreter.Interpreter
;
import
edu.kit.formal.interpreter.InterpreterBuilder
;
import
edu.kit.formal.interpreter.KeYProofFacade
;
import
edu.kit.formal.interpreter.data.GoalNode
;
import
edu.kit.formal.interpreter.data.KeyData
;
import
edu.kit.formal.interpreter.data.State
;
import
edu.kit.formal.proofscriptparser.Facade
;
import
edu.kit.formal.proofscriptparser.ast.ProofScript
;
import
javafx.beans.Observable
;
import
javafx.beans.property.SimpleBooleanProperty
;
import
javafx.beans.property.SimpleObjectProperty
;
import
javafx.beans.value.ObservableBooleanValue
;
import
javafx.collections.SetChangeListener
;
import
javafx.concurrent.Service
;
import
javafx.concurrent.Task
;
...
...
@@ -23,8 +31,8 @@ import javafx.scene.layout.GridPane;
import
javafx.scene.layout.Pane
;
import
javafx.scene.layout.Priority
;
import
javafx.stage.FileChooser
;
import
org.antlr.v4.runtime.RecognitionException
;
import
org.apache.commons.io.FileUtils
;
import
org.controlsfx.dialog.Wizard
;
import
java.io.File
;
import
java.io.IOException
;
...
...
@@ -81,16 +89,15 @@ public class DebuggerMainWindowController implements Initializable {
* **********************************************************************************************************/
@FXML
private
ListView
<
GoalNode
<
KeyData
>>
goalView
;
private
ExecutorService
executorService
=
null
;
private
KeYProofFacade
facade
;
private
Wizard
contractChooserDialog
=
new
Wizard
();
private
ContractLoaderService
cls
;
private
ExecutorService
executorService
=
Executors
.
newFixedThreadPool
(
2
);
private
KeYProofFacade
facade
=
new
KeYProofFacade
();
private
ContractLoaderService
contractLoaderService
=
new
ContractLoaderService
();
/**
* Model for the DebuggerController containing the neccessary
* references to objects needed for controlling backend through UI
*/
private
RootModel
model
;
private
RootModel
model
=
new
RootModel
()
;
@FXML
private
Label
lblStatusMessage
;
...
...
@@ -109,6 +116,10 @@ public class DebuggerMainWindowController implements Initializable {
@FXML
private
SequentView
sequentView
;
private
InterpretingService
interpreterService
=
new
InterpretingService
();
private
ObservableBooleanValue
executeNotPossible
=
interpreterService
.
runningProperty
().
or
(
facade
.
readyToExecuteProperty
().
not
());
/**
* @param location
...
...
@@ -116,15 +127,14 @@ public class DebuggerMainWindowController implements Initializable {
*/
@Override
public
void
initialize
(
URL
location
,
ResourceBundle
resources
)
{
model
=
new
RootModel
();
setDebugMode
(
false
);
facade
=
new
KeYProofFacade
(
this
.
model
);
cls
=
new
ContractLoaderService
();
model
.
scriptFileProperty
().
addListener
((
observable
,
oldValue
,
newValue
)
->
{
lblFilename
.
setText
(
"File: "
+
(
newValue
!=
null
?
newValue
.
getAbsolutePath
()
:
"n/a"
));
});
model
.
chosenContractProperty
().
addListener
(
o
->
{
IProgramMethod
method
=
(
IProgramMethod
)
model
.
getChosenContract
().
getTarget
();
javaSourceCode
.
clear
();
...
...
@@ -165,7 +175,6 @@ public class DebuggerMainWindowController implements Initializable {
);*/
});
goalView
.
getSelectionModel
().
selectedItemProperty
().
addListener
((
observable
,
oldValue
,
newValue
)
->
{
sequentView
.
setNode
(
newValue
.
getData
().
getNode
());
});
...
...
@@ -173,30 +182,53 @@ public class DebuggerMainWindowController implements Initializable {
goalView
.
setCellFactory
(
GoalNodeListCell:
:
new
);
}
//region Actions: Execution
@FXML
public
void
executeScript
()
{
executeScript
(
false
);
executeScript
(
facade
.
buildInterpreter
(),
false
);
}
@FXML
public
void
executeScriptFromCursor
()
{
InterpreterBuilder
ib
=
facade
.
buildInterpreter
();
ib
.
inheritState
(
interpreterService
.
interpreter
.
get
());
/*
LineMapping lm = new LineMapping(scriptArea.getText());
int line = lm.getLine(scriptArea.getCaretPosition());
int inLine = lm.getCharInLine(scriptArea.getCaretPosition());
*/
ib
.
ignoreLinesUntil
(
scriptArea
.
getCaretPosition
());
executeScript
(
ib
,
true
);
}
@FXML
public
void
executeInDebugMode
()
{
executeScript
(
true
);
executeScript
(
facade
.
buildInterpreter
(),
true
);
}
private
void
executeScript
(
boolean
debugMode
)
{
private
void
executeScript
(
InterpreterBuilder
ib
,
boolean
debugMode
)
{
this
.
debugMode
.
set
(
debugMode
);
lblStatusMessage
.
setText
(
"Interpreting..."
);
blocker
.
deinstall
(
facade
.
getInterpreter
());
if
(
debugMode
)
{
blocker
.
getStepUntilBlock
().
set
(
1
);
blocker
.
install
(
facade
.
getInterpreter
());
blocker
.
deinstall
();
lblStatusMessage
.
setText
(
"Parse ..."
);
try
{
List
<
ProofScript
>
scripts
=
Facade
.
getAST
(
scriptArea
.
getText
());
lblStatusMessage
.
setText
(
"Creating new Interpreter instance ..."
);
ib
.
inheritState
(
interpreterService
.
interpreter
.
get
())
.
setScripts
(
scripts
);
Interpreter
<
KeyData
>
currentInterpreter
=
ib
.
build
();
if
(
debugMode
)
{
blocker
.
getStepUntilBlock
().
set
(
1
);
blocker
.
install
(
currentInterpreter
);
}
interpreterService
.
interpreter
.
set
(
currentInterpreter
);
interpreterService
.
start
();
}
catch
(
RecognitionException
e
)
{
showExceptionDialog
(
"Antlr Exception"
,
""
,
"Could not parse scripts."
,
e
);
}
facade
.
executeScript
(
scriptArea
.
getText
());
List
<
GoalNode
<
KeyData
>>
g
=
model
.
getCurrentState
().
getGoals
();
this
.
model
.
getCurrentGoalNodes
().
addAll
(
g
);
lblStatusMessage
.
setText
(
"Script executed"
);
}
//endregion
...
...
@@ -263,9 +295,23 @@ public class DebuggerMainWindowController implements Initializable {
File
keyFile
=
openFileChooserOpenDialog
(
"Select KeY File"
,
"KeY Files"
,
"key"
,
"script"
);
this
.
model
.
setKeYFile
(
keyFile
);
if
(
keyFile
!=
null
)
{
buildKeYProofFacade
();
}
Task
<
Void
>
task
=
facade
.
loadKeyFileTask
(
keyFile
);
task
.
setOnSucceeded
(
event
->
{
lblStatusMessage
.
setText
(
"Loaded key file: "
+
keyFile
);
model
.
getCurrentGoalNodes
().
setAll
(
facade
.
getPseudoGoals
());
});
task
.
setOnFailed
(
event
->
{
event
.
getSource
().
exceptionProperty
().
get
();
showExceptionDialog
(
"Could not load file"
,
"Key file loading error"
,
""
,
(
Throwable
)
event
.
getSource
().
exceptionProperty
().
get
()
);
});
ProgressBar
bar
=
new
ProgressBar
();
bar
.
progressProperty
().
bind
(
task
.
progressProperty
());
executorService
.
execute
(
task
);
}
}
public
void
saveProof
(
ActionEvent
actionEvent
)
{
...
...
@@ -278,51 +324,9 @@ public class DebuggerMainWindowController implements Initializable {
File
javaFile
=
openFileChooserOpenDialog
(
"Select Java File"
,
"Java Files"
,
"java"
);
if
(
javaFile
!=
null
)
{
model
.
setJavaFile
(
javaFile
);
facade
=
new
KeYProofFacade
(
model
);
cls
.
start
();
cls
.
setOnSucceeded
(
event
->
{
model
.
getLoadedContracts
().
addAll
(
cls
.
getValue
());
ContractChooser
cc
=
new
ContractChooser
(
facade
.
getService
(),
model
.
loadedContractsProperty
());
cc
.
showAndWait
().
ifPresent
(
result
->
{
model
.
setChosenContract
(
result
);
if
(
this
.
model
.
getChosenContract
()
!=
null
)
{
buildJavaProofFacade
();
System
.
out
.
println
(
"Proof Facade is built"
);
}
else
{
System
.
out
.
println
(
"Something went wrong"
);
}
});
});
contractLoaderService
.
start
();
}
}
/**
* Spawns a thread that builds the proof environment as facade with interpreter
*/
private
void
buildKeYProofFacade
()
{
executorService
=
Executors
.
newFixedThreadPool
(
2
);
executorService
.
execute
(()
->
{
facade
=
new
KeYProofFacade
(
model
);
facade
.
prepareEnvWithKeYFile
(
model
.
getKeYFile
());
});
executorService
.
shutdown
();
}
/**
* Spawns a thread that builds the proof environment as facade with interpreter
*/
private
void
buildJavaProofFacade
()
{
executorService
=
Executors
.
newFixedThreadPool
(
2
);
executorService
.
execute
(()
->
{
if
(
facade
!=
null
)
{
facade
.
prepareEnvForContract
(
model
.
getChosenContract
(),
model
.
getKeYFile
());
}
});
executorService
.
shutdown
();
}
//endregion
//region Santa's Little Helper
...
...
@@ -371,21 +375,38 @@ public class DebuggerMainWindowController implements Initializable {
public
class
ContractLoaderService
extends
Service
<
List
<
Contract
>>
{
@Override
protected
Task
<
List
<
Contract
>>
createTask
()
{
Task
<
List
<
Contract
>>
task1
=
new
Task
<
List
<
Contract
>>()
{
@Override
protected
List
<
Contract
>
call
()
throws
Exception
{
List
<
Contract
>
contracts
=
facade
.
getContractsForJavaFile
(
model
.
getJavaFile
());
System
.
out
.
println
(
"Loaded Contracts "
+
contracts
.
toString
());
return
contracts
;
}
};
return
facade
.
getContractsForJavaFileTask
(
model
.
getJavaFile
());
}
@Override
protected
void
failed
()
{
showExceptionDialog
(
""
,
""
,
""
,
exceptionProperty
().
get
());
}
return
task1
;
@Override
protected
void
succeeded
()
{
lblStatusMessage
.
setText
(
"Contract loaded"
);
model
.
getLoadedContracts
().
setAll
(
getValue
());
//FIXME
ContractChooser
cc
=
new
ContractChooser
(
facade
.
getService
(),
model
.
loadedContractsProperty
());
cc
.
showAndWait
().
ifPresent
(
result
->
{
model
.
setChosenContract
(
result
);
try
{
facade
.
activateContract
(
result
);
model
.
getCurrentGoalNodes
().
setAll
(
facade
.
getPseudoGoals
());
}
catch
(
ProofInputException
e
)
{
showExceptionDialog
(
""
,
""
,
""
,
e
);
}
});
}
}
public
KeYProofFacade
getFacade
()
{
return
facade
;
}
public
static
void
showExceptionDialog
(
String
title
,
String
headerText
,
String
contentText
,
Exception
ex
)
{
public
static
void
showExceptionDialog
(
String
title
,
String
headerText
,
String
contentText
,
Throwable
ex
)
{
Alert
alert
=
new
Alert
(
Alert
.
AlertType
.
ERROR
);
alert
.
setTitle
(
title
);
alert
.
setHeaderText
(
headerText
);
...
...
@@ -444,5 +465,32 @@ public class DebuggerMainWindowController implements Initializable {
setText
(
item
.
getNode
().
name
());
}
}
//endregion
public
Boolean
getExecuteNotPossible
()
{
return
executeNotPossible
.
get
();
}
public
ObservableBooleanValue
executeNotPossibleProperty
()
{
return
executeNotPossible
;
}
private
class
InterpretingService
extends
Service
<
State
<
KeyData
>>
{
private
final
SimpleObjectProperty
<
Interpreter
<
KeyData
>>
interpreter
=
new
SimpleObjectProperty
<>();
private
final
SimpleObjectProperty
<
ProofScript
>
mainScript
=
new
SimpleObjectProperty
<>();
@Override
protected
Task
<
edu
.
kit
.
formal
.
interpreter
.
data
.
State
<
KeyData
>>
createTask
()
{
return
new
Task
<
edu
.
kit
.
formal
.
interpreter
.
data
.
State
<
KeyData
>>()
{
final
Interpreter
<
KeyData
>
i
=
interpreter
.
get
();
final
ProofScript
ast
=
mainScript
.
get
();
@Override
protected
edu
.
kit
.
formal
.
interpreter
.
data
.
State
<
KeyData
>
call
()
throws
Exception
{
i
.
interpret
(
ast
);
return
i
.
peekState
();
}
};
}
}
//endregion
}
src/main/java/edu/kit/formal/gui/controller/PuppetMaster.java
View file @
698add94
...
...
@@ -141,6 +141,10 @@ public class PuppetMaster {
return
stepUntilBlock
;
}
public
void
deinstall
()
{
deinstall
(
puppet
);
}
private
class
EntryListener
extends
DefaultASTVisitor
<
Void
>
{
@Override
...
...
src/main/java/edu/kit/formal/gui/controls/ANTLR4LexerHighlighter.java
View file @
698add94
...
...
@@ -2,8 +2,8 @@ package edu.kit.formal.gui.controls;
import
org.antlr.v4.runtime.Lexer
;
import
org.antlr.v4.runtime.Token
;
import
org.fxmisc.richtext.StyleSpans
;
import
org.fxmisc.richtext.StyleSpansBuilder
;
import
org.fxmisc.richtext.
model.
StyleSpans
;
import
org.fxmisc.richtext.
model.
StyleSpansBuilder
;
import
java.util.Collection
;
import
java.util.Collections
;
...
...
@@ -23,7 +23,7 @@ public class ANTLR4LexerHighlighter {
}
public
StyleSpans
<
Collection
<
String
>>
highlight
(
String
sourcecode
)
{
public
StyleSpans
<
?
extends
Collection
<
String
>>
highlight
(
String
sourcecode
)
{
Lexer
lexer
=
factory
.
apply
(
sourcecode
);
StyleSpansBuilder
<
Collection
<
String
>>
spansBuilder
=
new
StyleSpansBuilder
<>();
try
{
...
...
src/main/java/edu/kit/formal/gui/controls/LineMapping.java
View file @
698add94
...
...
@@ -7,7 +7,7 @@ import java.util.List;
* @author Alexander Weigl
* @version 1 (04.06.17)
*/
class
LineMapping
{
public
class
LineMapping
{
private
List
<
Integer
>
marks
=
new
ArrayList
<>();
public
LineMapping
(
String
value
)
{
...
...
@@ -37,4 +37,16 @@ class LineMapping {
return
getLineStart
(
line
+
1
)
-
1
;
}
public
int
getCharInLine
(
int
caretPosition
)
{
return
caretPosition
-
getLineStart
(
getLine
(
caretPosition
));
}
public
int
getLine
(
int
caretPosition
)
{
for
(
int
i
=
0
;
i
<
marks
.
size
();
i
++)
{
if
(
caretPosition
>=
marks
.
get
(
i
))
{
return
i
;
}
}
return
-
1
;
}
}
src/main/java/edu/kit/formal/gui/controls/ScriptArea.java
View file @
698add94
...
...
@@ -14,7 +14,6 @@ import javafx.collections.ObservableList;
import
javafx.collections.ObservableSet
;
import
javafx.geometry.Insets
;
import
javafx.geometry.Point2D
;
import
javafx.geometry.Pos
;
import
javafx.scene.Node
;
import
javafx.scene.control.Label
;
import
javafx.scene.layout.Background
;
...
...
src/main/java/edu/kit/formal/gui/controls/SequentView.java
View file @
698add94
...
...
@@ -3,15 +3,13 @@ package edu.kit.formal.gui.controls;
import
de.uka.ilkd.key.java.Services
;
import
de.uka.ilkd.key.logic.NamespaceSet
;
import
de.uka.ilkd.key.logic.Sequent
;
import
de.uka.ilkd.key.pp.IdentitySequentPrintFilter
;
import
de.uka.ilkd.key.pp.LogicPrinter
;
import
de.uka.ilkd.key.pp.NotationInfo
;
import
de.uka.ilkd.key.pp.ProgramPrinter
;
import
de.uka.ilkd.key.pp.*
;
import
de.uka.ilkd.key.proof.Node
;
import
de.uka.ilkd.key.settings.ProofIndependentSettings
;
import
javafx.beans.Observable
;
import
javafx.beans.property.SimpleObjectProperty
;
import
javafx.scene.input.MouseEvent
;
import
org.fxmisc.richtext.CharacterHit
;
import
org.fxmisc.richtext.CodeArea
;
import
java.io.StringWriter
;
...
...
@@ -21,6 +19,7 @@ import java.io.StringWriter;
* @version 1 (03.06.17)
*/
public
class
SequentView
extends
CodeArea
{
private
Services
services
;
private
LogicPrinter
lp
;
private
IdentitySequentPrintFilter
filter
;
...
...
@@ -35,24 +34,50 @@ public class SequentView extends CodeArea {
}
private
void
hightlight
(
MouseEvent
mouseEvent
)
{
double
x
=
mouseEvent
.
getX
();
double
y
=
mouseEvent
.
getY
();
/*
TextAreaSkin skin = (TextAreaSkin) getSkin();
int insertionPoint = skin.getInsertionPoint(x, y);
if
(
backend
==
null
)
return
;
CharacterHit
hit
=
hit
(
mouseEvent
.
getX
(),
mouseEvent
.
getY
());
int
insertionPoint
=
hit
.
getInsertionIndex
();
PosInSequent
pis
=
backend
.
getInitialPositionTable
().
getPosInSequent
(
insertionPoint
,
filter
);
if
(
pis
!=
null
)
{
System.out.println(pis);
Range
r
=
backend
.
getPositionTable
().
rangeForIndex
(
insertionPoint
,
getLength
());
selectRange(r.start(), r.end());
hightlightRange
(
r
.
start
(),
r
.
end
());
}
else
{
selec
tRange(0, 0);
hightligh
tRange
(
0
,
0
);
}
mouseEvent
.
consume
();
*/
}
public
void
mouseClick
(
MouseEvent
e
)
{
if
(
backend
==
null
)
{
return
;
}
CharacterHit
hit
=
hit
(
e
.
getX
(),
e
.
getY
());
int
insertionPoint
=
hit
.
getInsertionIndex
();
PosInSequent
pis
=
backend
.
getInitialPositionTable
().
getPosInSequent
(
insertionPoint
,
filter
);
/*
Goal g = new Goal(node, null);
ImmutableList<NoPosTacletApp> rules = g.ruleAppIndex().getFindTaclet(new TacletFilter() {
@Override
protected boolean filter(Taclet taclet) {
return true;
}
}, pis.getPosInOccurrence(), services);
RuleAppIndex index = g.ruleAppIndex();
*/
}
private
void
hightlightRange
(
int
start
,
int
end
)
{
clearHighlight
();
setStyleClass
(
start
,
end
,
"sequent-highlight"
);
}
private
void
clearHighlight
()
{
clearStyle
(
0
,
getLength
());
}
public
void
update
(
Observable
o
)
{
...
...
src/main/java/edu/kit/formal/gui/model/RootModel.java
View file @
698add94
...
...
@@ -8,11 +8,8 @@ import edu.kit.formal.interpreter.data.State;
import
javafx.beans.property.ListProperty
;
import
javafx.beans.property.SimpleListProperty
;
import
javafx.beans.property.SimpleObjectProperty
;
import
javafx.beans.value.ObservableValue
;
import
javafx.collections.FXCollections
;
import
javafx.collections.ObservableList
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.File
;
...
...
@@ -25,50 +22,38 @@ public class RootModel {
/**
* Property: current loaded ScriptFile
*/
private
final
SimpleObjectProperty
<
File
>
scriptFile
;
private
final
SimpleObjectProperty
<
File
>
scriptFile
=
new
SimpleObjectProperty
<>()
;
/**
* Property: current loaded javaFile
*/
private
final
SimpleObjectProperty
<
File
>
javaFile
;
private
final
SimpleObjectProperty
<
File
>
javaFile
=
new
SimpleObjectProperty
<>()
;
/**
* Property: current loaded KeY File
*/
private
final
SimpleObjectProperty
<
File
>
keYFile
;
private
final
SimpleObjectProperty
<
File
>
keYFile
=
new
SimpleObjectProperty
<>()
;
/**
* Property: current loaded script string
*/
private
ObservableValue
<
String
>
currentScript
;
//
private ObservableValue<String> currentScript;
/**
* ListProperty: list of goal nodes in the current state (depending on interpreter state)
*/
private
ListProperty
<
GoalNode
<
KeyData
>>
currentGoalNodes
;
private
final
ListProperty
<
GoalNode
<
KeyData
>>
currentGoalNodes
=
new
SimpleListProperty
<>(
FXCollections
.
observableArrayList
())
;
/**
* Current SelectedGoalNode
*/
private
SimpleObjectProperty
<
GoalNode
<
KeyData
>>
currentSelectedGoalNode
;
private
final
SimpleObjectProperty
<
GoalNode
<
KeyData
>>
currentSelectedGoalNode
=
new
SimpleObjectProperty
<>()
;
private
SimpleListProperty
<
Contract
>
loadedContracts
;
private
SimpleObjectProperty
<
Contract
>
chosenContract
=
new
SimpleObjectProperty
<>();
@Getter
@Setter
private
State
<
KeyData
>
currentState
;
private
final
SimpleListProperty
<
Contract
>
loadedContracts
=
new
SimpleListProperty
<>(
FXCollections
.
observableArrayList
());
private
final
SimpleObjectProperty
<
Contract
>
chosenContract
=
new
SimpleObjectProperty
<>();
public
RootModel
()
{
javaFile
=
new
SimpleObjectProperty
<>();
scriptFile
=
new
SimpleObjectProperty
<>();
keYFile
=
new
SimpleObjectProperty
<>();