Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
general
stups
ProB Rodin Plugin
Commits
ce1a74f1
Commit
ce1a74f1
authored
Mar 08, 2013
by
Daniel Plagge
Browse files
Added handling for missing theory plugin
parent
161c9162
Changes
2
Hide whitespace changes
Inline
Side-by-side
de.prob.core/src/de/prob/eventb/translator/Theories.java
View file @
ce1a74f1
...
...
@@ -14,6 +14,7 @@ import org.eventb.core.ast.FormulaFactory;
import
org.eventb.core.ast.ITypeEnvironment
;
import
org.eventb.core.ast.Predicate
;
import
org.eventb.core.ast.Type
;
import
org.eventb.theory.core.DatabaseUtilities
;
import
org.eventb.theory.core.IAvailableTheory
;
import
org.eventb.theory.core.IAvailableTheoryProject
;
import
org.eventb.theory.core.IDeployedTheoryRoot
;
...
...
@@ -36,6 +37,7 @@ import org.rodinp.core.RodinDBException;
import
de.be4.classicalb.core.parser.analysis.prolog.ASTProlog
;
import
de.be4.classicalb.core.parser.node.PExpression
;
import
de.be4.classicalb.core.parser.node.PPredicate
;
import
de.prob.core.translator.TranslationFailedException
;
import
de.prob.prolog.output.IPrologTermOutput
;
import
de.prob.prolog.output.StructuredPrologOutput
;
import
de.prob.prolog.term.PrologTerm
;
...
...
@@ -44,22 +46,26 @@ public class Theories {
private
static
final
String
PROB_THEORY_MAPPING_SUFFIX
=
"ptm"
;
public
static
void
translate
(
IEventBProject
project
,
IPrologTermOutput
pout
)
throws
RodinDBException
{
final
IRodinProject
rProject
=
project
.
getRodinProject
();
final
IDeployedTheoryRoot
[]
theories
=
rProject
.
getRootElementsOfType
(
IDeployedTheoryRoot
.
ELEMENT_TYPE
);
for
(
IDeployedTheoryRoot
theory
:
theories
)
{
savePrintTranslation
(
theory
,
pout
);
}
final
ITheoryPathRoot
[]
theoryPaths
=
rProject
.
getRootElementsOfType
(
ITheoryPathRoot
.
ELEMENT_TYPE
);
for
(
ITheoryPathRoot
theoryPath
:
theoryPaths
)
{
for
(
IAvailableTheoryProject
ap
:
theoryPath
.
getAvailableTheoryProjects
())
{
for
(
IAvailableTheory
at
:
ap
.
getTheories
())
{
savePrintTranslation
(
at
.
getDeployedTheory
(),
pout
);
throws
TranslationFailedException
{
try
{
final
IRodinProject
rProject
=
project
.
getRodinProject
();
final
IDeployedTheoryRoot
[]
theories
=
rProject
.
getRootElementsOfType
(
IDeployedTheoryRoot
.
ELEMENT_TYPE
);
for
(
IDeployedTheoryRoot
theory
:
theories
)
{
savePrintTranslation
(
theory
,
pout
);
}
final
ITheoryPathRoot
[]
theoryPaths
=
rProject
.
getRootElementsOfType
(
ITheoryPathRoot
.
ELEMENT_TYPE
);
for
(
ITheoryPathRoot
theoryPath
:
theoryPaths
)
{
for
(
IAvailableTheoryProject
ap
:
theoryPath
.
getAvailableTheoryProjects
())
{
for
(
IAvailableTheory
at
:
ap
.
getTheories
())
{
savePrintTranslation
(
at
.
getDeployedTheory
(),
pout
);
}
}
}
}
catch
(
RodinDBException
e
)
{
throw
new
TranslationFailedException
(
e
);
}
}
...
...
@@ -323,4 +329,10 @@ public class Theories {
}
pto
.
closeList
();
}
public
static
void
touch
()
throws
NoClassDefFoundError
{
// Just some dummy code to check if the theory plugin is installed
@SuppressWarnings
(
"unused"
)
String
extension
=
DatabaseUtilities
.
DEPLOYED_THEORY_FILE_EXTENSION
;
}
}
de.prob.core/src/de/prob/eventb/translator/internal/EventBTranslator.java
View file @
ce1a74f1
...
...
@@ -16,7 +16,6 @@ import org.eventb.core.IEventBRoot;
import
org.eventb.core.ISCInternalContext
;
import
org.eventb.core.ISCMachineRoot
;
import
org.rodinp.core.IInternalElement
;
import
org.rodinp.core.RodinDBException
;
import
de.be4.classicalb.core.parser.analysis.prolog.ASTProlog
;
import
de.be4.classicalb.core.parser.node.Node
;
...
...
@@ -29,6 +28,7 @@ import de.prob.prolog.output.IPrologTermOutput;
public
abstract
class
EventBTranslator
implements
ITranslator
{
protected
final
IEventBProject
project
;
private
boolean
theoryIsUsed
;
protected
EventBTranslator
(
final
IEventBRoot
root
)
{
this
.
project
=
root
.
getEventBProject
();
...
...
@@ -41,7 +41,7 @@ public abstract class EventBTranslator implements ITranslator {
this
.
project
=
((
ISCMachineRoot
)
ctx
.
getRoot
()).
getEventBProject
();
}
private
LabelPositionPrinter
createPrinter
(
private
LabelPositionPrinter
create
LabelProsition
Printer
(
final
Collection
<
AbstractComponentTranslator
>
translators
)
throws
TranslationFailedException
{
LabelPositionPrinter
printer
=
new
LabelPositionPrinter
();
...
...
@@ -53,14 +53,21 @@ public abstract class EventBTranslator implements ITranslator {
return
printer
;
}
private
void
printModels
(
final
Collection
<?
extends
AbstractComponentTranslator
>
refinementChainTranslators
,
private
Collection
<
Node
>
translateModels
(
final
Collection
<?
extends
AbstractComponentTranslator
>
refinementChainTranslators
)
{
Collection
<
Node
>
nodes
=
new
ArrayList
<
Node
>();
for
(
final
AbstractComponentTranslator
translator
:
refinementChainTranslators
)
{
nodes
.
add
(
translator
.
getAST
());
theoryIsUsed
|=
translator
.
isTheoryUsed
();
}
return
nodes
;
}
private
void
printModels
(
final
Collection
<
Node
>
nodes
,
final
IPrologTermOutput
pout
,
final
ASTProlog
prolog
)
{
pout
.
openList
();
for
(
final
AbstractComponentTranslator
translateor
:
refinementChainTranslators
)
{
final
Node
modelAST
=
translateor
.
getAST
();
modelAST
.
apply
(
prolog
);
for
(
final
Node
node
:
nodes
)
{
node
.
apply
(
prolog
);
}
pout
.
closeList
();
}
...
...
@@ -126,19 +133,27 @@ public abstract class EventBTranslator implements ITranslator {
Collection
<
AbstractComponentTranslator
>
translators
=
new
ArrayList
<
AbstractComponentTranslator
>();
translators
.
addAll
(
refinementChainTranslators
);
translators
.
addAll
(
contextTranslators
);
return
new
ASTProlog
(
pout
,
createPrinter
(
translators
));
return
new
ASTProlog
(
pout
,
create
LabelProsition
Printer
(
translators
));
}
protected
void
printProlog
(
final
Collection
<?
extends
AbstractComponentTranslator
>
refinementChainTranslators
,
final
Collection
<?
extends
AbstractComponentTranslator
>
contextTranslators
,
final
IPrologTermOutput
pout
)
throws
TranslationFailedException
{
theoryIsUsed
=
false
;
Collection
<
Node
>
machineNodes
=
translateModels
(
refinementChainTranslators
);
Collection
<
Node
>
contextNodes
=
translateModels
(
contextTranslators
);
if
(
theoryIsUsed
)
{
checkIfTheoriesAvailable
();
}
final
ASTProlog
prolog
=
createAstVisitor
(
refinementChainTranslators
,
contextTranslators
,
pout
);
pout
.
openTerm
(
"load_event_b_project"
);
printModels
(
refinementChainTranslator
s
,
pout
,
prolog
);
printModels
(
context
Translator
s
,
pout
,
prolog
);
printModels
(
machineNode
s
,
pout
,
prolog
);
printModels
(
context
Node
s
,
pout
,
prolog
);
pout
.
openList
();
pout
.
openTerm
(
"exporter_version"
);
pout
.
printNumber
(
2
);
...
...
@@ -146,12 +161,9 @@ public abstract class EventBTranslator implements ITranslator {
printProofInformation
(
refinementChainTranslators
,
contextTranslators
,
pout
);
try
{
Theories
.
translate
(
project
,
pout
);
}
catch
(
NoClassDefFoundError
e
)
{
}
catch
(
RodinDBException
e
)
{
e
.
printStackTrace
(
);
if
(
theoryIsUsed
)
{
translateTheories
(
project
,
pout
);
}
printPragmaContents
(
refinementChainTranslators
,
contextTranslators
,
...
...
@@ -161,4 +173,20 @@ public abstract class EventBTranslator implements ITranslator {
pout
.
printVariable
(
"_Error"
);
pout
.
closeTerm
();
}
private
void
checkIfTheoriesAvailable
()
throws
TranslationFailedException
{
try
{
Theories
.
touch
();
}
catch
(
NoClassDefFoundError
e
)
{
throw
new
TranslationFailedException
(
"Theory"
,
"The model to animate makes use of a theory but the theory plug-in is not installed"
);
}
}
private
void
translateTheories
(
IEventBProject
project2
,
IPrologTermOutput
pout
)
throws
TranslationFailedException
{
Theories
.
translate
(
project
,
pout
);
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment