A: ... some other attributes and stuff... b?='notb'
A: ... some other attributes and stuff... (b?=|'notb')
package org.xtext.example.mydsl8 import org.eclipse.xtext.parser.DefaultEcoreElementFactory import org.eclipse.emf.ecore.EClassifier import org.xtext.example.mydsl8.myDsl.Greeting import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.nodemodel.INode import org.eclipse.xtext.conversion.ValueConverterException import org.xtext.example.mydsl8.myDsl.MyDslPackage class MyDslEcoreElementFactory extends DefaultEcoreElementFactory { override create(EClassifier classifier) { val result = super.create(classifier) if (result instanceof Greeting) { result.flag = true } result } override set(EObject object, String feature, Object value, String ruleName, INode node) throws ValueConverterException { if (object instanceof Greeting && feature == MyDslPackage.Literals.GREETING__FLAG.name) { super.set(object, feature, false, ruleName, node) } else { super.set(object, feature, value, ruleName, node) } } }
class MyDslRuntimeModule extends AbstractMyDslRuntimeModule { override bindIAstFactory() { MyDslEcoreElementFactory } }
you can try something like
package org.xtext.example.mydsl8 import org.eclipse.xtext.parser.DefaultEcoreElementFactory import org.eclipse.emf.ecore.EClassifier import org.xtext.example.mydsl8.myDsl.Greeting import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.nodemodel.INode import org.eclipse.xtext.conversion.ValueConverterException import org.xtext.example.mydsl8.myDsl.MyDslPackage class MyDslEcoreElementFactory extends DefaultEcoreElementFactory { override create(EClassifier classifier) { val result = super.create(classifier) if (result instanceof Greeting) { result.flag = true } result } override set(EObject object, String feature, Object value, String ruleName, INode node) throws ValueConverterException { if (object instanceof Greeting && feature == MyDslPackage.Literals.GREETING__FLAG.name) { super.set(object, feature, false, ruleName, node) } else { super.set(object, feature, value, ruleName, node) } } }
class MyDslRuntimeModule extends AbstractMyDslRuntimeModule { override bindIAstFactory() { MyDslEcoreElementFactory } }
or switch to a manually maintained metamodel with default value = true and a grammar like (flag="flag")? with a valueConverter turning "flag" into false
...
Hi Dennis, we have pursued the second approach proposed by Christian. We could share our experiences if you want.
Kind regards,
Niels Brouwers (Altran)