From 33d843320504ea97827ba0b374f76dbb0bf5a0a4 Mon Sep 17 00:00:00 2001 From: Sebastian Krings <sebastian@krin.gs> Date: Wed, 16 Jan 2013 14:26:19 +0100 Subject: [PATCH] add static checker for constants in contexts --- de.prob.units/plugin.xml | 12 ++++ .../units/sc/ContextAttributeProcessor.java | 66 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 de.prob.units/src/de/prob/units/sc/ContextAttributeProcessor.java diff --git a/de.prob.units/plugin.xml b/de.prob.units/plugin.xml index 5e63c917..7ba49ece 100644 --- a/de.prob.units/plugin.xml +++ b/de.prob.units/plugin.xml @@ -106,6 +106,9 @@ <scModule id="de.prob.units.machineAttributeProcessor"> </scModule> + <scModule + id="de.prob.units.contextAttributeProcessor"> + </scModule> </configuration> </extension> <extension @@ -120,5 +123,14 @@ id="org.eventb.core.machineVariableModule"> </prereq> </processorType> + <processorType + class="de.prob.units.sc.ContextAttributeProcessor" + id="contextAttributeProcessor" + name="contextAttributeProcessor" + parent="org.eventb.core.contextModule"> + <prereq + id="org.eventb.core.contextConstantModule"> + </prereq> + </processorType> </extension> </plugin> diff --git a/de.prob.units/src/de/prob/units/sc/ContextAttributeProcessor.java b/de.prob.units/src/de/prob/units/sc/ContextAttributeProcessor.java new file mode 100644 index 00000000..6b420739 --- /dev/null +++ b/de.prob.units/src/de/prob/units/sc/ContextAttributeProcessor.java @@ -0,0 +1,66 @@ +package de.prob.units.sc; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eventb.core.IConstant; +import org.eventb.core.IContextRoot; +import org.eventb.core.ISCConstant; +import org.eventb.core.ISCContextRoot; +import org.eventb.core.sc.SCCore; +import org.eventb.core.sc.SCProcessorModule; +import org.eventb.core.sc.state.ISCStateRepository; +import org.eventb.core.tool.IModuleType; +import org.rodinp.core.IInternalElement; +import org.rodinp.core.IRodinElement; +import org.rodinp.core.IRodinFile; + +import de.prob.units.Activator; +import de.prob.units.pragmas.UnitPragmaAttribute; + +public class ContextAttributeProcessor extends SCProcessorModule { + public static final IModuleType<ContextAttributeProcessor> MODULE_TYPE = SCCore + .getModuleType(Activator.PLUGIN_ID + ".contextAttributeProcessor"); //$NON-NLS-1$ + + @Override + public void process(IRodinElement element, IInternalElement target, + ISCStateRepository repository, IProgressMonitor monitor) + throws CoreException { + assert (element instanceof IRodinFile); + assert (target instanceof ISCContextRoot); + + // get all variables and copy over the attributes + IRodinFile machineFile = (IRodinFile) element; + IContextRoot constantRoot = (IContextRoot) machineFile.getRoot(); + + ISCContextRoot scContextRoot = (ISCContextRoot) target; + + IConstant[] constants = constantRoot.getConstants(); + + if (constants.length == 0) + return; + + for (IConstant constant : constants) { + ISCConstant scConstant = scContextRoot.getSCConstant(constant + .getIdentifierString()); + + // might have been filtered out by previous modules + if (scConstant != null) { + // original might not contain the attribute + if (constant.hasAttribute(UnitPragmaAttribute.ATTRIBUTE)) { + String attribute = constant + .getAttributeValue(UnitPragmaAttribute.ATTRIBUTE); + + scConstant.setAttributeValue(UnitPragmaAttribute.ATTRIBUTE, + attribute, monitor); + } + } + } + + } + + @Override + public IModuleType<?> getModuleType() { + return MODULE_TYPE; + } + +} -- GitLab