From c0bc6616b558c5c0cd3e722e61aa426f71bae698 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Mon, 18 Jul 2016 14:34:12 +0200 Subject: [PATCH] 40: toVarName handles EReference differently Task-Url: https://github.com/eclipse/xtext-eclipse/issues/40 Signed-off-by: Lorenzo Bettini --- .../generator/Formatter2Fragment2Test.xtend | 47 +++++++++++++++ .../generator/Formatter2Fragment2Test.java | 60 +++++++++++++++++++ .../formatting/Formatter2Fragment2.xtend | 2 + .../formatting/Formatter2Fragment2.java | 4 ++ 4 files changed, 113 insertions(+) create mode 100644 org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.xtend create mode 100644 org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.java diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.xtend new file mode 100644 index 000000000..04d9a1104 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.xtend @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2016 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.xtext.xtext.generator + +import org.eclipse.emf.ecore.ENamedElement +import org.eclipse.emf.ecore.EcorePackage +import org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2 +import org.junit.Test + +import static extension org.junit.Assert.* + +/** + * @author Lorenzo Bettini - Initial contribution and API + */ +class Formatter2Fragment2Test { + + var TestableFormatter2Fragment2 fragment = new TestableFormatter2Fragment2 + + static class TestableFormatter2Fragment2 extends Formatter2Fragment2 { + + override public toVarName(ENamedElement element) { + super.toVarName(element) + } + + } + + @Test def void testVarNameWithEClass() { + "eClass".assertEquals(fragment.toVarName(EcorePackage.eINSTANCE.EClass)) + } + + @Test def void testVarNameWithMultiReference() { + "eOperation".assertEquals(fragment.toVarName(EcorePackage.eINSTANCE.EClass_EAllOperations)) + } + + @Test def void testVarNameWithSingleReference() { + "name".assertEquals(fragment.toVarName(EcorePackage.eINSTANCE.ENamedElement_Name)) + } + + @Test def void testVarNameConflictingWithXtendKeyword() { + "_abstract".assertEquals(fragment.toVarName(EcorePackage.eINSTANCE.EClass_Abstract)) + } +} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.java new file mode 100644 index 000000000..6b694b1e0 --- /dev/null +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/Formatter2Fragment2Test.java @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2016 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.xtext.xtext.generator; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.ENamedElement; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Lorenzo Bettini - Initial contribution and API + */ +@SuppressWarnings("all") +public class Formatter2Fragment2Test { + public static class TestableFormatter2Fragment2 extends Formatter2Fragment2 { + @Override + public String toVarName(final ENamedElement element) { + return super.toVarName(element); + } + } + + private Formatter2Fragment2Test.TestableFormatter2Fragment2 fragment = new Formatter2Fragment2Test.TestableFormatter2Fragment2(); + + @Test + public void testVarNameWithEClass() { + EClass _eClass = EcorePackage.eINSTANCE.getEClass(); + String _varName = this.fragment.toVarName(_eClass); + Assert.assertEquals("eClass", _varName); + } + + @Test + public void testVarNameWithMultiReference() { + EReference _eClass_EAllOperations = EcorePackage.eINSTANCE.getEClass_EAllOperations(); + String _varName = this.fragment.toVarName(_eClass_EAllOperations); + Assert.assertEquals("eOperation", _varName); + } + + @Test + public void testVarNameWithSingleReference() { + EAttribute _eNamedElement_Name = EcorePackage.eINSTANCE.getENamedElement_Name(); + String _varName = this.fragment.toVarName(_eNamedElement_Name); + Assert.assertEquals("name", _varName); + } + + @Test + public void testVarNameConflictingWithXtendKeyword() { + EAttribute _eClass_Abstract = EcorePackage.eINSTANCE.getEClass_Abstract(); + String _varName = this.fragment.toVarName(_eClass_Abstract); + Assert.assertEquals("_abstract", _varName); + } +} diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.xtend index 9f914c4b3..5989325b3 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.xtend @@ -159,6 +159,8 @@ import org.eclipse.xtext.util.internal.Log } protected def String toVarName(ENamedElement element) { + if (element instanceof EReference) + return element.EReferenceType.toVarName val name = element.name.toFirstLower if (XtendFileAccess.XTEND_KEYWORDS.contains(name)) '_' + name diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.java index 936289251..3926883a5 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/formatting/Formatter2Fragment2.java @@ -356,6 +356,10 @@ public class Formatter2Fragment2 extends AbstractStubGeneratingFragment { protected String toVarName(final ENamedElement element) { String _xblockexpression = null; { + if ((element instanceof EReference)) { + EClass _eReferenceType = ((EReference)element).getEReferenceType(); + return this.toVarName(_eReferenceType); + } String _name = element.getName(); final String name = StringExtensions.toFirstLower(_name); String _xifexpression = null;