Skip to content
Snippets Groups Projects
Commit 61769653 authored by Sebastian Krings's avatar Sebastian Krings
Browse files

fix translation of variants (PROBPLUGIN-99)

parent 86727c05
No related branches found
No related tags found
No related merge requests found
...@@ -7,66 +7,17 @@ ...@@ -7,66 +7,17 @@
package de.prob.eventb.translator.internal; // NOPMD by bendisposto package de.prob.eventb.translator.internal; // NOPMD by bendisposto
// High coupling to the ast is ok // High coupling to the ast is ok
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.eventb.core.IConvergenceElement.Convergence; import org.eventb.core.IConvergenceElement.Convergence;
import org.eventb.core.ILabeledElement; import org.eventb.core.*;
import org.eventb.core.IMachineRoot; import org.eventb.core.ast.*;
import org.eventb.core.IPOSequent; import org.eventb.core.basis.*;
import org.eventb.core.IPOSource;
import org.eventb.core.IPSRoot;
import org.eventb.core.IPSStatus;
import org.eventb.core.ISCAction;
import org.eventb.core.ISCEvent;
import org.eventb.core.ISCGuard;
import org.eventb.core.ISCInternalContext;
import org.eventb.core.ISCInvariant;
import org.eventb.core.ISCMachineRoot;
import org.eventb.core.ISCParameter;
import org.eventb.core.ISCPredicateElement;
import org.eventb.core.ISCRefinesEvent;
import org.eventb.core.ISCRefinesMachine;
import org.eventb.core.ISCVariable;
import org.eventb.core.ISCVariant;
import org.eventb.core.ISCWitness;
import org.eventb.core.ITraceableElement;
import org.eventb.core.ast.Assignment;
import org.eventb.core.ast.FormulaFactory;
import org.eventb.core.ast.ITypeEnvironment;
import org.eventb.core.basis.Event;
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.*;
import org.rodinp.core.IRodinElement;
import org.rodinp.core.RodinDBException; import de.be4.classicalb.core.parser.node.*;
import de.be4.classicalb.core.parser.node.AAnticipatedEventstatus;
import de.be4.classicalb.core.parser.node.AConvergentEventstatus;
import de.be4.classicalb.core.parser.node.AEvent;
import de.be4.classicalb.core.parser.node.AEventBModelParseUnit;
import de.be4.classicalb.core.parser.node.AEventsModelClause;
import de.be4.classicalb.core.parser.node.AIdentifierExpression;
import de.be4.classicalb.core.parser.node.AInvariantModelClause;
import de.be4.classicalb.core.parser.node.AOrdinaryEventstatus;
import de.be4.classicalb.core.parser.node.ARefinesModelClause;
import de.be4.classicalb.core.parser.node.ASeesModelClause;
import de.be4.classicalb.core.parser.node.ATheoremsModelClause;
import de.be4.classicalb.core.parser.node.AVariablesModelClause;
import de.be4.classicalb.core.parser.node.AVariantModelClause;
import de.be4.classicalb.core.parser.node.AWitness;
import de.be4.classicalb.core.parser.node.Node;
import de.be4.classicalb.core.parser.node.PEvent;
import de.be4.classicalb.core.parser.node.PEventstatus;
import de.be4.classicalb.core.parser.node.PExpression;
import de.be4.classicalb.core.parser.node.PModelClause;
import de.be4.classicalb.core.parser.node.PPredicate;
import de.be4.classicalb.core.parser.node.PSubstitution;
import de.be4.classicalb.core.parser.node.PWitness;
import de.be4.classicalb.core.parser.node.TIdentifierLiteral;
import de.prob.core.translator.TranslationFailedException; import de.prob.core.translator.TranslationFailedException;
import de.prob.eventb.translator.AbstractComponentTranslator; import de.prob.eventb.translator.AbstractComponentTranslator;
import de.prob.logging.Logger; import de.prob.logging.Logger;
...@@ -198,15 +149,26 @@ public class ModelTranslator extends AbstractComponentTranslator { ...@@ -198,15 +149,26 @@ public class ModelTranslator extends AbstractComponentTranslator {
IRodinElement srcElement = source.getSource(); IRodinElement srcElement = source.getSource();
if (!srcElement.exists() if (!srcElement.exists()
|| !(srcElement instanceof ILabeledElement)) { || (!(srcElement instanceof ILabeledElement) && !(srcElement instanceof IVariant))) {
bugs.add(status.getElementName()); bugs.add(status.getElementName());
break; break;
} }
if (srcElement instanceof ILabeledElement) {
ILabeledElement le = (ILabeledElement) srcElement; ILabeledElement le = (ILabeledElement) srcElement;
IElementType<? extends IRodinElement> type = srcElement IElementType<? extends IRodinElement> type = srcElement
.getElementType(); .getElementType();
s.add(new SequentSource(type, le.getLabel())); s.add(new SequentSource(type, le.getLabel()));
} else if (srcElement instanceof IVariant) {
/*
* Variants are not ILabeledElements, hence we need to
* find another "label"
*/
IElementType<? extends IRodinElement> type = srcElement
.getElementType();
s.add(new SequentSource(type, machine
.getComponentName()));
}
if (srcElement instanceof Guard) { if (srcElement instanceof Guard) {
Event srcEvent = (Event) srcElement.getParent(); Event srcEvent = (Event) srcElement.getParent();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment