Skip to content
Snippets Groups Projects
Commit 11041708 authored by Daniel Plagge's avatar Daniel Plagge
Browse files

PROBPLUGIN-97: Fixed code to check whether an invariant is defined in the...

PROBPLUGIN-97: Fixed code to check whether an invariant is defined in the current machine or an abstract one.
parent 7b2efc3a
Branches
Tags
No related merge requests found
...@@ -42,7 +42,6 @@ import org.eventb.core.basis.Guard; ...@@ -42,7 +42,6 @@ import org.eventb.core.basis.Guard;
import org.eventb.core.seqprover.IConfidence; import org.eventb.core.seqprover.IConfidence;
import org.rodinp.core.IElementType; import org.rodinp.core.IElementType;
import org.rodinp.core.IRodinElement; import org.rodinp.core.IRodinElement;
import org.rodinp.core.IRodinFile;
import org.rodinp.core.RodinDBException; import org.rodinp.core.RodinDBException;
import de.be4.classicalb.core.parser.node.AAnticipatedEventstatus; import de.be4.classicalb.core.parser.node.AAnticipatedEventstatus;
...@@ -457,14 +456,16 @@ public class ModelTranslator extends AbstractComponentTranslator { ...@@ -457,14 +456,16 @@ public class ModelTranslator extends AbstractComponentTranslator {
return actionList; return actionList;
} }
private AInvariantModelClause processInvariants() throws RodinDBException { private AInvariantModelClause processInvariants() throws RodinDBException,
TranslationFailedException {
final AInvariantModelClause invariantModelClause = new AInvariantModelClause(); final AInvariantModelClause invariantModelClause = new AInvariantModelClause();
invariantModelClause.setPredicates(getPredicateList( invariantModelClause.setPredicates(getPredicateList(
machine.getSCInvariants(), false)); machine.getSCInvariants(), false));
return invariantModelClause; return invariantModelClause;
} }
private ATheoremsModelClause processTheorems() throws RodinDBException { private ATheoremsModelClause processTheorems() throws RodinDBException,
TranslationFailedException {
final ATheoremsModelClause theoremsModelClause = new ATheoremsModelClause(); final ATheoremsModelClause theoremsModelClause = new ATheoremsModelClause();
theoremsModelClause.setPredicates(getPredicateList( theoremsModelClause.setPredicates(getPredicateList(
machine.getSCInvariants(), true)); machine.getSCInvariants(), true));
...@@ -484,9 +485,11 @@ public class ModelTranslator extends AbstractComponentTranslator { ...@@ -484,9 +485,11 @@ public class ModelTranslator extends AbstractComponentTranslator {
* false, if all theorems shall be filtered out * false, if all theorems shall be filtered out
* @return * @return
* @throws RodinDBException * @throws RodinDBException
* @throws TranslationFailedException
*/ */
private List<PPredicate> getPredicateList(final ISCInvariant[] predicates, private List<PPredicate> getPredicateList(final ISCInvariant[] predicates,
final boolean theorems) throws RodinDBException { final boolean theorems) throws RodinDBException,
TranslationFailedException {
final List<PPredicate> list = new ArrayList<PPredicate>( final List<PPredicate> list = new ArrayList<PPredicate>(
predicates.length); predicates.length);
for (final ISCInvariant evPredicate : predicates) { for (final ISCInvariant evPredicate : predicates) {
...@@ -496,7 +499,7 @@ public class ModelTranslator extends AbstractComponentTranslator { ...@@ -496,7 +499,7 @@ public class ModelTranslator extends AbstractComponentTranslator {
} }
// only use predicates that are defined in the current refinement // only use predicates that are defined in the current refinement
// level, not in an abstract machine // level, not in an abstract machine
if (!isDefinedInAbstraction(evPredicate)) { if (isDefinedHere(evPredicate)) {
final PPredicate predicate = translatePredicate(ff, te, final PPredicate predicate = translatePredicate(ff, te,
evPredicate); evPredicate);
list.add(predicate); list.add(predicate);
...@@ -506,28 +509,19 @@ public class ModelTranslator extends AbstractComponentTranslator { ...@@ -506,28 +509,19 @@ public class ModelTranslator extends AbstractComponentTranslator {
return list; return list;
} }
private boolean isDefinedInAbstraction(final ITraceableElement element) private boolean isDefinedHere(final ITraceableElement element)
throws RodinDBException { throws RodinDBException, TranslationFailedException {
final IRodinElement parentsource = element.getSource().getParent(); final IRodinElement parentsource = element.getSource().getParent();
final boolean result; final boolean result;
final String currentName = machine.getComponentName();
if (parentsource instanceof IMachineRoot) { if (parentsource instanceof IMachineRoot) {
IMachineRoot src = (IMachineRoot) parentsource; final IMachineRoot src = (IMachineRoot) parentsource;
final String srcName = src.getRodinFile().getBareName();
// do a finer level check result = currentName.equals(srcName);
String srcName = src.getRodinFile().getBareName();
// is the source one of the refined machines?
for (IRodinFile abstr : machine.getAbstractSCMachines())
if (abstr.getBareName().equals(srcName))
return true;
result = false;
// result = !machine.getRodinFile().getBareName()
// .equals(src.getRodinFile().getBareName());
} else { } else {
result = false; throw new TranslationFailedException("Machine " + currentName,
"Source of invariant is not a machine");
} }
return result; return result;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment