From c27f7e2580bd4ef2bbbb821794900c30026e8ee4 Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Tue, 7 Nov 2023 13:50:54 +0100 Subject: [PATCH] Work around Event-B EMF bug that broke adding a variant Modifying an already existing variant worked, but when adding a new variant to a machine that didn't have one, Rodin complained that the variant has an empty label. This fix requires increasing the minimum Event-B EMF version to guarantee that Variant.setName exists. --- org.eventb.texteditor.feature/feature.xml | 1 + org.eventb.texteditor.ui/META-INF/MANIFEST.MF | 6 +-- org.eventb.texttools/META-INF/MANIFEST.MF | 6 +-- .../parsing/TransformationVisitor.java | 50 ++++++++++--------- 4 files changed, 34 insertions(+), 29 deletions(-) diff --git a/org.eventb.texteditor.feature/feature.xml b/org.eventb.texteditor.feature/feature.xml index 6bfea24..abf50fb 100644 --- a/org.eventb.texteditor.feature/feature.xml +++ b/org.eventb.texteditor.feature/feature.xml @@ -9,6 +9,7 @@ <description> A text editor for the Rodin platform to edit Event-B models --- Release History --- +3.5.1 - Fix "Empty label" error when adding a variant to a machine 3.5.0 - Compatibility with EventB-EMF 7.0.0 - fixes CamilleX dependency conflict. Fixed OOM error when top-level end keyword is missing. 3.4.1 - Internal updates to the build process - no visible changes. 3.4.0 - Release for Rodin 3.5 and related dependencies diff --git a/org.eventb.texteditor.ui/META-INF/MANIFEST.MF b/org.eventb.texteditor.ui/META-INF/MANIFEST.MF index a87e4f9..80143c7 100644 --- a/org.eventb.texteditor.ui/META-INF/MANIFEST.MF +++ b/org.eventb.texteditor.ui/META-INF/MANIFEST.MF @@ -16,9 +16,9 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.8.1,4.0.0)", org.eclipse.ui.workbench.texteditor, org.eventb.core;bundle-version="[3.1.0,4.0.0)", org.eventb.core.ast;bundle-version="[3.1.0,4.0.0)", - org.eventb.emf.core;bundle-version="[4.0.0,7.0.0)", - org.eventb.emf.formulas;bundle-version="[1.4.0,3.0.0)", - org.eventb.emf.persistence;bundle-version="[3.1.1,5.0.0)";visibility:=reexport, + org.eventb.emf.core;bundle-version="[5.0.0,7.0.0)", + org.eventb.emf.formulas;bundle-version="[1.5.0,3.0.0)", + org.eventb.emf.persistence;bundle-version="[3.6.0,5.0.0)";visibility:=reexport, org.eventb.texteditor.parsers;bundle-version="[3.5.1,3.6.0)", org.eventb.texttools;bundle-version="[3.5.1,3.6.0)";visibility:=reexport, org.eventb.ui;bundle-version="[3.0.0,4.0.0)";visibility:=reexport, diff --git a/org.eventb.texttools/META-INF/MANIFEST.MF b/org.eventb.texttools/META-INF/MANIFEST.MF index 8e0ddf3..ed60264 100644 --- a/org.eventb.texttools/META-INF/MANIFEST.MF +++ b/org.eventb.texttools/META-INF/MANIFEST.MF @@ -15,9 +15,9 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.8.1,4.0.0)", org.eclipse.jface.text;bundle-version="[3.6.0,4.0.0)", org.eventb.core;bundle-version="[3.1.0,4.0.0)", org.eventb.core.ast;bundle-version="[3.1.0,4.0.0)", - org.eventb.emf.core;bundle-version="[4.0.0,7.0.0)", - org.eventb.emf.formulas;bundle-version="[1.4.0,3.0.0)", - org.eventb.emf.persistence;bundle-version="[3.1.1,5.0.0)", + org.eventb.emf.core;bundle-version="[5.0.0,7.0.0)", + org.eventb.emf.formulas;bundle-version="[1.5.0,3.0.0)", + org.eventb.emf.persistence;bundle-version="[3.6.0,5.0.0)", org.eventb.texteditor.parsers;bundle-version="[3.5.1,3.6.0)", org.rodinp.core;bundle-version="[1.7.0,2.0.0)" Bundle-Vendor: Heinrich-Heine University Dusseldorf diff --git a/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java b/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java index 4e034fc..7e7c9d7 100644 --- a/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java +++ b/org.eventb.texttools/src/org/eventb/texttools/internal/parsing/TransformationVisitor.java @@ -11,29 +11,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Stack; -import org.eclipse.emf.common.util.EList; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eventb.emf.core.EventBCommented; -import org.eventb.emf.core.EventBElement; -import org.eventb.emf.core.EventBNamed; -import org.eventb.emf.core.EventBNamedCommentedPredicateElement; -import org.eventb.emf.core.EventBObject; -import org.eventb.emf.core.context.Axiom; -import org.eventb.emf.core.context.Context; -import org.eventb.emf.core.context.ContextFactory; -import org.eventb.emf.core.machine.Action; -import org.eventb.emf.core.machine.Convergence; -import org.eventb.emf.core.machine.Event; -import org.eventb.emf.core.machine.Guard; -import org.eventb.emf.core.machine.Invariant; -import org.eventb.emf.core.machine.Machine; -import org.eventb.emf.core.machine.MachineFactory; -import org.eventb.emf.core.machine.Variant; -import org.eventb.texttools.TextPositionUtil; -import org.eventb.texttools.model.texttools.TextRange; -import org.eventb.texttools.model.texttools.TexttoolsFactory; - import de.be4.eventb.core.parser.analysis.DepthFirstAdapter; import de.be4.eventb.core.parser.node.AAction; import de.be4.eventb.core.parser.node.AAnticipatedConvergence; @@ -67,6 +44,30 @@ import de.hhu.stups.sablecc.patch.IToken; import de.hhu.stups.sablecc.patch.PositionedNode; import de.hhu.stups.sablecc.patch.SourcePosition; +import org.eclipse.emf.common.util.EList; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eventb.core.IVariant; +import org.eventb.emf.core.EventBCommented; +import org.eventb.emf.core.EventBElement; +import org.eventb.emf.core.EventBNamed; +import org.eventb.emf.core.EventBNamedCommentedPredicateElement; +import org.eventb.emf.core.EventBObject; +import org.eventb.emf.core.context.Axiom; +import org.eventb.emf.core.context.Context; +import org.eventb.emf.core.context.ContextFactory; +import org.eventb.emf.core.machine.Action; +import org.eventb.emf.core.machine.Convergence; +import org.eventb.emf.core.machine.Event; +import org.eventb.emf.core.machine.Guard; +import org.eventb.emf.core.machine.Invariant; +import org.eventb.emf.core.machine.Machine; +import org.eventb.emf.core.machine.MachineFactory; +import org.eventb.emf.core.machine.Variant; +import org.eventb.texttools.TextPositionUtil; +import org.eventb.texttools.model.texttools.TextRange; +import org.eventb.texttools.model.texttools.TexttoolsFactory; + public class TransformationVisitor extends DepthFirstAdapter { private IDocument document; @@ -217,6 +218,9 @@ public class TransformationVisitor extends DepthFirstAdapter { TextPositionUtil.annotatePosition(newNode, createTextRange(node)); handleComment(newNode, node.getComments()); + // Work around an Event-B EMF bug that sets an explicit empty label and suppresses the default label. + // TODO Allow a label here in the Camille grammar? + newNode.setName(IVariant.DEFAULT_LABEL); final TFormula exprToken = node.getExpression(); final String exprString = exprToken.getText(); -- GitLab