use of org.eclipse.emf.ecore.EDataType in project xtext-core by eclipse.
the class Xtext2EcoreTransformerTest method testBug413171_01.
@Test
public void testBug413171_01() throws Exception {
EObject _model = this.getModel(this.readFileIntoString("org/eclipse/xtext/xtext/ecoreInference/Bug413171_01.xtext.txt"));
final Grammar grammar = ((Grammar) _model);
final AbstractRule parserRule = grammar.getRules().get(2);
final EClassifier classifier = parserRule.getType().getClassifier();
Assert.assertTrue(parserRule.getName(), (classifier instanceof EDataType));
}
use of org.eclipse.emf.ecore.EDataType in project xtext-core by eclipse.
the class Xtext2EcoreTransformerTest method testBug413171_02.
@Test
public void testBug413171_02() throws Exception {
EObject _model = this.getModel(this.readFileIntoString("org/eclipse/xtext/xtext/ecoreInference/Bug413171_02.xtext.txt"));
final Grammar grammar = ((Grammar) _model);
final AbstractRule parserRule = grammar.getRules().get(2);
final EClassifier classifier = parserRule.getType().getClassifier();
Assert.assertTrue(parserRule.getName(), (classifier instanceof EDataType));
}
use of org.eclipse.emf.ecore.EDataType in project xtext-core by eclipse.
the class Ecore2XtextGrammarCreator method rule.
public CharSequence rule(final EClassifier it) {
CharSequence _switchResult = null;
boolean _matched = false;
if (it instanceof EClass) {
_matched = true;
StringConcatenation _builder = new StringConcatenation();
String _concreteRuleName = Ecore2XtextExtensions.concreteRuleName(((EClass) it));
_builder.append(_concreteRuleName);
_builder.append(" returns ");
String _fqn = Ecore2XtextExtensions.fqn(it);
_builder.append(_fqn);
_builder.append(":");
_builder.newLineIfNotEmpty();
{
boolean _onlyOptionalFeatures = Ecore2XtextExtensions.onlyOptionalFeatures(((EClass) it));
if (_onlyOptionalFeatures) {
_builder.append("\t");
_builder.append("{");
String _fqn_1 = Ecore2XtextExtensions.fqn(it);
_builder.append(_fqn_1, "\t");
_builder.append("}");
_builder.newLineIfNotEmpty();
}
}
{
Iterable<EStructuralFeature> _prefixFeatures = Ecore2XtextExtensions.prefixFeatures(((EClass) it));
for (final EStructuralFeature strF : _prefixFeatures) {
_builder.append("\t");
CharSequence _assigment = this.assigment(strF);
_builder.append(_assigment, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\'");
String _name = ((EClass) it).getName();
_builder.append(_name, "\t");
_builder.append("\'");
_builder.newLineIfNotEmpty();
_builder.append("\t");
CharSequence _idAssignment = this.idAssignment(((EClass) it));
_builder.append(_idAssignment, "\t");
{
boolean _isEmpty = IterableExtensions.isEmpty(Ecore2XtextExtensions.inlinedFeatures(((EClass) it)));
boolean _not = (!_isEmpty);
if (_not) {
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\'{\'");
_builder.newLine();
{
Iterable<EAttribute> _allAttributes = Ecore2XtextExtensions.allAttributes(((EClass) it));
for (final EAttribute attr : _allAttributes) {
_builder.append("\t");
_builder.append("\t");
CharSequence _assigment_1 = this.assigment(attr);
_builder.append(_assigment_1, "\t\t");
_builder.newLineIfNotEmpty();
}
}
{
Iterable<EReference> _allCrossReferences = Ecore2XtextExtensions.allCrossReferences(((EClass) it));
for (final EReference ref : _allCrossReferences) {
_builder.append("\t");
_builder.append("\t");
CharSequence _assigment_2 = this.assigment(ref);
_builder.append(_assigment_2, "\t\t");
_builder.newLineIfNotEmpty();
}
}
{
Iterable<EReference> _allContainmentReferences = Ecore2XtextExtensions.allContainmentReferences(((EClass) it));
for (final EReference conti : _allContainmentReferences) {
_builder.append("\t");
_builder.append("\t");
CharSequence _assigment_3 = this.assigment(conti);
_builder.append(_assigment_3, "\t\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\'}\'");
}
}
_builder.append(";");
_builder.newLineIfNotEmpty();
_switchResult = _builder;
}
if (!_matched) {
if (it instanceof EEnum) {
_matched = true;
StringConcatenation _builder = new StringConcatenation();
_builder.append("enum ");
String _quoteIfNeccesary = Ecore2XtextExtensions.quoteIfNeccesary(((EEnum) it).getName());
_builder.append(_quoteIfNeccesary);
_builder.append(" returns ");
String _fqn = Ecore2XtextExtensions.fqn(it);
_builder.append(_fqn);
_builder.append(":");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
final Function1<EEnumLiteral, String> _function = (EEnumLiteral it_1) -> {
String _name = it_1.getName();
String _plus = (_name + " = \'");
String _name_1 = it_1.getName();
String _plus_1 = (_plus + _name_1);
return (_plus_1 + "\'");
};
String _join = IterableExtensions.join(ListExtensions.<EEnumLiteral, String>map(((EEnum) it).getELiterals(), _function), " | ");
_builder.append(_join, "\t\t\t\t");
_builder.append(";");
_switchResult = _builder;
}
}
if (!_matched) {
if (it instanceof EDataType) {
_matched = true;
CharSequence _xifexpression = null;
boolean _isSerializable = ((EDataType) it).isSerializable();
if (_isSerializable) {
StringConcatenation _builder = new StringConcatenation();
String _uniqueName = UniqueNameUtil.uniqueName(it);
_builder.append(_uniqueName);
_builder.append(" returns ");
String _fqn = Ecore2XtextExtensions.fqn(it);
_builder.append(_fqn);
_builder.append(":");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _dataTypeRuleBody = Ecore2XtextExtensions.dataTypeRuleBody(((EDataType) it));
_builder.append(_dataTypeRuleBody, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
_xifexpression = _builder;
}
_switchResult = _xifexpression;
}
}
if (!_matched) {
throw new IllegalStateException(("No rule template for " + it));
}
return _switchResult;
}
use of org.eclipse.emf.ecore.EDataType in project xtext-core by eclipse.
the class AbstractDeclarativeValueConverterService method registerIfMissing.
private void registerIfMissing(String name, ParserRule parserRule, Map<String, IValueConverter<Object>> converters) {
if (!converters.containsKey(name)) {
EDataType datatype = (EDataType) parserRule.getType().getClassifier();
converters.put(name, new EFactoryValueConverter(datatype));
}
}
use of org.eclipse.emf.ecore.EDataType in project xtext-core by eclipse.
the class XtextValidator method checkCrossReferenceTerminal.
public boolean checkCrossReferenceTerminal(RuleCall call) {
if (call.getRule() != null && call.getRule().getType() != null) {
EClassifier type = call.getRule().getType().getClassifier();
EDataType dataType = GrammarUtil.findEString(GrammarUtil.getGrammar(call));
if (dataType == null)
dataType = EcorePackage.Literals.ESTRING;
if (type != null && dataType != type) {
error("The rule '" + call.getRule().getName() + "' is not valid for a cross reference since it does not return " + "an EString. You'll have to wrap it in a data type rule.", call, null, ValidationMessageAcceptor.INSIGNIFICANT_INDEX, null);
return true;
}
}
return false;
}
Aggregations