From 624e4fa53bcb06115ebffa40b8568b36199c0b9b Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Thu, 29 Jun 2017 07:15:00 +0200 Subject: [PATCH] try to fix problem with bad naming convention epackages Signed-off-by: Christian Dietrich --- .../generator/junit/Junit4Fragment2.xtend | 3 +- .../xtext/generator/model/TypeReference.xtend | 37 ++++++++--- .../generator/junit/Junit4Fragment2.java | 9 ++- .../xtext/generator/model/TypeReference.java | 66 +++++++++++++++---- 4 files changed, 92 insertions(+), 23 deletions(-) diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.xtend index bd652fc79..92647d380 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.xtend @@ -11,6 +11,7 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference import org.eclipse.xtext.xtext.generator.util.GenModelUtil2 import static extension org.eclipse.xtext.GrammarUtil.* +import org.eclipse.emf.ecore.EClass class Junit4Fragment2 extends AbstractStubGeneratingFragment { @@ -105,7 +106,7 @@ class Junit4Fragment2 extends AbstractStubGeneratingFragment { val parseHelper = new TypeReference(testingPackage + ".util.ParseHelper") val test = new TypeReference("org.junit.Test") val assert = new TypeReference("org.junit.Assert") - val rootType = new TypeReference(GenModelUtil2.getJavaTypeName(grammar.rules.head.type.classifier, grammar.eResource.resourceSet)) + val rootType = new TypeReference(grammar.rules.head.type.classifier as EClass, grammar.eResource.resourceSet) return fileAccessFactory.createXtendFile(exampleRuntimeTest, ''' @«runWith»(«xtextRunner») @«injectWith»(«injectorProvider») diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/TypeReference.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/TypeReference.xtend index d1b9c0166..c85b7633e 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/TypeReference.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/TypeReference.xtend @@ -17,6 +17,7 @@ import org.eclipse.xtend.lib.annotations.Accessors import org.eclipse.xtend.lib.annotations.EqualsHashCode import org.eclipse.xtext.xtext.generator.IXtextGeneratorLanguage import org.eclipse.xtext.xtext.generator.util.GenModelUtil2 +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor /** * Reference to a Java type. Use this for automatic import of types in {@link JavaFileAccess} @@ -102,7 +103,11 @@ class TypeReference { new(EClass clazz, ResourceSet resourceSet) { // the qualified name might be a nested type, e.g. jav.util.Map.Entry // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=483088 - this(getQualifiedName(clazz, resourceSet), null, false) + this(getQualifiedName(clazz, resourceSet)) + } + + new(QualifiedClazzName qualifiedClazzName) { + this(qualifiedClazzName.packageName, qualifiedClazzName.className, null) } new(EPackage epackage, ResourceSet resourceSet) { @@ -139,18 +144,26 @@ class TypeReference { qualifiedName.substring(packageName.length + 1, qualifiedName.length) } - private static def getQualifiedName(EClass clazz, ResourceSet resourceSet) { + private static def QualifiedClazzName getQualifiedName(EClass clazz, ResourceSet resourceSet) { if (clazz.EPackage.nsURI == 'http://www.eclipse.org/2008/Xtext') { - 'org.eclipse.xtext.' + clazz.name + new QualifiedClazzName('org.eclipse.xtext', clazz.name) } else if (clazz.EPackage.nsURI == 'http://www.eclipse.org/emf/2002/Ecore') { - if (clazz.instanceTypeName !== null) clazz.instanceTypeName.replace('$', '.') else 'org.eclipse.emf.ecore.' + clazz.name + if (clazz.instanceTypeName !== null) { + val itn = clazz.instanceTypeName; + new QualifiedClazzName(itn.substring(0, itn.lastIndexOf('.')), + itn.substring(itn.lastIndexOf(".") + 1).replace("$", ".")) + } else { + new QualifiedClazzName('org.eclipse.emf.ecore', clazz.name) + } } else { - GenModelUtil2.getGenClass(clazz, resourceSet).qualifiedInterfaceName + new QualifiedClazzName(GenModelUtil2.getGenClass(clazz, resourceSet).genPackage.qualifiedPackageName, + GenModelUtil2.getGenClass(clazz, resourceSet).interfaceName) } } - - private static def getQualifiedName(EPackage epackage, ResourceSet resourceSet) { - GenModelUtil2.getGenPackage(epackage, resourceSet).qualifiedPackageInterfaceName + + private static def QualifiedClazzName getQualifiedName(EPackage epackage, ResourceSet resourceSet) { + new QualifiedClazzName(GenModelUtil2.getGenPackage(epackage, resourceSet).qualifiedPackageName, + GenModelUtil2.getGenPackage(epackage, resourceSet).packageInterfaceName) } override toString() { @@ -177,4 +190,12 @@ class TypeReference { path + ".xtend" } + @FinalFieldsConstructor + static class QualifiedClazzName { + @Accessors(PUBLIC_GETTER) + val String packageName + @Accessors(PUBLIC_GETTER) + val String className + } + } \ No newline at end of file diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.java index 9c59c464a..1e9ab353f 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/junit/Junit4Fragment2.java @@ -4,6 +4,9 @@ import com.google.inject.Inject; import com.google.inject.Injector; import java.util.Collections; import java.util.function.Consumer; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xtend.lib.annotations.AccessorType; import org.eclipse.xtend.lib.annotations.Accessors; import org.eclipse.xtend2.lib.StringConcatenationClient; @@ -22,7 +25,6 @@ import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess; import org.eclipse.xtext.xtext.generator.model.JavaFileAccess; import org.eclipse.xtext.xtext.generator.model.ManifestAccess; import org.eclipse.xtext.xtext.generator.model.TypeReference; -import org.eclipse.xtext.xtext.generator.util.GenModelUtil2; @SuppressWarnings("all") public class Junit4Fragment2 extends AbstractStubGeneratingFragment { @@ -159,8 +161,9 @@ public class Junit4Fragment2 extends AbstractStubGeneratingFragment { final TypeReference parseHelper = new TypeReference(_plus_2); final TypeReference test = new TypeReference("org.junit.Test"); final TypeReference assert_ = new TypeReference("org.junit.Assert"); - String _javaTypeName = GenModelUtil2.getJavaTypeName(IterableExtensions.head(this.getGrammar().getRules()).getType().getClassifier(), this.getGrammar().eResource().getResourceSet()); - final TypeReference rootType = new TypeReference(_javaTypeName); + EClassifier _classifier = IterableExtensions.head(this.getGrammar().getRules()).getType().getClassifier(); + ResourceSet _resourceSet = this.getGrammar().eResource().getResourceSet(); + final TypeReference rootType = new TypeReference(((EClass) _classifier), _resourceSet); TypeReference _exampleRuntimeTest = this.exampleRuntimeTest(); StringConcatenationClient _client = new StringConcatenationClient() { @Override diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/model/TypeReference.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/model/TypeReference.java index e8f135ea2..043530c0d 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/model/TypeReference.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/model/TypeReference.java @@ -14,8 +14,10 @@ import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.xtend.lib.annotations.AccessorType; import org.eclipse.xtend.lib.annotations.Accessors; import org.eclipse.xtend.lib.annotations.EqualsHashCode; +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Conversions; import org.eclipse.xtext.xbase.lib.Functions.Function1; @@ -32,6 +34,31 @@ import org.eclipse.xtext.xtext.generator.util.GenModelUtil2; @EqualsHashCode @SuppressWarnings("all") public class TypeReference { + @FinalFieldsConstructor + public static class QualifiedClazzName { + @Accessors(AccessorType.PUBLIC_GETTER) + private final String packageName; + + @Accessors(AccessorType.PUBLIC_GETTER) + private final String className; + + @Pure + public String getPackageName() { + return this.packageName; + } + + @Pure + public String getClassName() { + return this.className; + } + + public QualifiedClazzName(final String packageName, final String className) { + super(); + this.packageName = packageName; + this.className = className; + } + } + public static TypeReference typeRef(final String name, final TypeReference... arguments) { return new TypeReference(name, (List)Conversions.doWrapArray(arguments)); } @@ -137,7 +164,11 @@ public class TypeReference { } public TypeReference(final EClass clazz, final ResourceSet resourceSet) { - this(TypeReference.getQualifiedName(clazz, resourceSet), null, false); + this(TypeReference.getQualifiedName(clazz, resourceSet)); + } + + public TypeReference(final TypeReference.QualifiedClazzName qualifiedClazzName) { + this(qualifiedClazzName.packageName, qualifiedClazzName.className, null); } public TypeReference(final EPackage epackage, final ResourceSet resourceSet) { @@ -201,38 +232,51 @@ public class TypeReference { return _xblockexpression; } - private static String getQualifiedName(final EClass clazz, final ResourceSet resourceSet) { - String _xifexpression = null; + private static TypeReference.QualifiedClazzName getQualifiedName(final EClass clazz, final ResourceSet resourceSet) { + TypeReference.QualifiedClazzName _xifexpression = null; String _nsURI = clazz.getEPackage().getNsURI(); boolean _equals = Objects.equal(_nsURI, "http://www.eclipse.org/2008/Xtext"); if (_equals) { String _name = clazz.getName(); - _xifexpression = ("org.eclipse.xtext." + _name); + _xifexpression = new TypeReference.QualifiedClazzName("org.eclipse.xtext", _name); } else { - String _xifexpression_1 = null; + TypeReference.QualifiedClazzName _xifexpression_1 = null; String _nsURI_1 = clazz.getEPackage().getNsURI(); boolean _equals_1 = Objects.equal(_nsURI_1, "http://www.eclipse.org/emf/2002/Ecore"); if (_equals_1) { - String _xifexpression_2 = null; + TypeReference.QualifiedClazzName _xifexpression_2 = null; String _instanceTypeName = clazz.getInstanceTypeName(); boolean _tripleNotEquals = (_instanceTypeName != null); if (_tripleNotEquals) { - _xifexpression_2 = clazz.getInstanceTypeName().replace("$", "."); + TypeReference.QualifiedClazzName _xblockexpression = null; + { + final String itn = clazz.getInstanceTypeName(); + String _substring = itn.substring(0, itn.lastIndexOf(".")); + int _lastIndexOf = itn.lastIndexOf("."); + int _plus = (_lastIndexOf + 1); + String _replace = itn.substring(_plus).replace("$", "."); + _xblockexpression = new TypeReference.QualifiedClazzName(_substring, _replace); + } + _xifexpression_2 = _xblockexpression; } else { String _name_1 = clazz.getName(); - _xifexpression_2 = ("org.eclipse.emf.ecore." + _name_1); + _xifexpression_2 = new TypeReference.QualifiedClazzName("org.eclipse.emf.ecore", _name_1); } _xifexpression_1 = _xifexpression_2; } else { - _xifexpression_1 = GenModelUtil2.getGenClass(clazz, resourceSet).getQualifiedInterfaceName(); + String _qualifiedPackageName = GenModelUtil2.getGenClass(clazz, resourceSet).getGenPackage().getQualifiedPackageName(); + String _interfaceName = GenModelUtil2.getGenClass(clazz, resourceSet).getInterfaceName(); + _xifexpression_1 = new TypeReference.QualifiedClazzName(_qualifiedPackageName, _interfaceName); } _xifexpression = _xifexpression_1; } return _xifexpression; } - private static String getQualifiedName(final EPackage epackage, final ResourceSet resourceSet) { - return GenModelUtil2.getGenPackage(epackage, resourceSet).getQualifiedPackageInterfaceName(); + private static TypeReference.QualifiedClazzName getQualifiedName(final EPackage epackage, final ResourceSet resourceSet) { + String _qualifiedPackageName = GenModelUtil2.getGenPackage(epackage, resourceSet).getQualifiedPackageName(); + String _packageInterfaceName = GenModelUtil2.getGenPackage(epackage, resourceSet).getPackageInterfaceName(); + return new TypeReference.QualifiedClazzName(_qualifiedPackageName, _packageInterfaceName); } @Override