@@ -3,13 +3,11 @@ package jce.codegen
33import eme.generator.GeneratedEcoreMetamodel
44import java.io.ByteArrayInputStream
55import java.io.File
6- import java.io.InputStream
76import jce.util.FolderRefresher
87import jce.util.PathHelper
98import jce.util.ProgressMonitorAdapter
109import org.apache.log4j.LogManager
1110import org.apache.log4j.Logger
12- import org.eclipse.core.resources.IFile
1311import org.eclipse.core.resources.IFolder
1412import org.eclipse.core.resources.IProject
1513import org.eclipse.core.resources.IResource
@@ -42,7 +40,7 @@ final class WrapperGenerator {
4240 */
4341 def static void buildWrappers (GeneratedEcoreMetamodel metamodel , IProject project ) {
4442 logger. info(" Starting the wrapper generation..." )
45- WrapperGenerator . project = project
43+ WrapperGenerator :: project = project
4644 createFolder(WRAPPER_FOLDER ) // build wrapper base folder
4745 buildWrappers(metamodel. getRoot, " " )
4846 FolderRefresher . refresh(project, SRC_FOLDER ) // makes wrappers visible in the Eclipse IDE
@@ -54,13 +52,15 @@ final class WrapperGenerator {
5452 * @param path is the current file path of the {@link EPackage}. Should be initially an empty string.
5553 */
5654 def private static void buildWrappers (EPackage ePackage , String path ) {
57- createFolder(PATH . append(WRAPPER_FOLDER , path))
58- for (EClassifier eClassifier : ePackage. getEClassifiers) { // for every classifier
55+ if (! isEmpty(ePackage)) {
56+ createFolder(PATH . append(WRAPPER_FOLDER , path))
57+ }
58+ for (EClassifier eClassifier : ePackage. EClassifiers ) { // for every classifier
5959 if (eClassifier instanceof EClass ) { // if is class
6060 createXtendWrapper(path, eClassifier. getName) // create wrapper class
6161 }
6262 }
63- for (EPackage eSubpackage : ePackage. getESubpackages ) { // for every subpackage
63+ for (EPackage eSubpackage : ePackage. ESubpackages ) { // for every subpackage
6464 buildWrappers(eSubpackage, PATH . append(path, eSubpackage. getName)) // do the same
6565 }
6666 }
@@ -79,26 +79,41 @@ final class WrapperGenerator {
7979 * Creates a Xtend Wrapper in a package path with a specific name.
8080 */
8181 def private static void createXtendWrapper (String packagePath , String name ) {
82- val String currentPackage = packagePath. replace(File . separatorChar, ' .' )
83- var String factoryName = ' ' ' «PACKAGE.nameOf(currentPackage)»Factory' ' '
82+ val currentPackage = packagePath. replace(File . separatorChar, ' .' )
83+ var factoryName = ' ' ' «PACKAGE.nameOf(currentPackage)»Factory' ' '
8484 factoryName = factoryName. substring(0 , 1 ). toUpperCase + factoryName. substring(1 ) // first letter upper case
85- val String content = wrapperContent(name, factoryName, currentPackage)
85+ val content = wrapperContent(name, factoryName, currentPackage)
8686 createFile(packagePath, ' ' ' «name»Wrapper.xtend' ' ' , content)
8787 }
8888
8989 /**
9090 * Creates an IFile from a project relative path, a file name and creates the file content.
9191 */
9292 def private static void createFile (String path , String name , String content ) {
93- var IFolder folder = project. getFolder(PATH . append(SRC_FOLDER , " wrappers" , path))
94- var IFile file = folder. getFile(name)
93+ var folder = project. getFolder(PATH . append(SRC_FOLDER , " wrappers" , path))
94+ var file = folder. getFile(name)
9595 if (! file. exists) {
96- val InputStream source = new ByteArrayInputStream (content. bytes)
96+ val source = new ByteArrayInputStream (content. bytes)
9797 file. create(source, IResource . NONE , MONITOR )
9898 file. touch(MONITOR )
9999 }
100100 }
101101
102+ /**
103+ * Checks whether the EPackage is empty or not. An empty ePackage has no classifiers and only empty subpackages.
104+ */
105+ def private static boolean isEmpty (EPackage ePackage ) {
106+ if (! ePackage. EClassifiers . empty) {
107+ return false // has classifier.
108+ } else {
109+ var empty = true
110+ for (EPackage eSubpackage : ePackage. ESubpackages ) { // for every subpackage
111+ empty = empty && isEmpty(eSubpackage) // check if empty
112+ }
113+ return empty
114+ }
115+ }
116+
102117 /**
103118 * Builds the content of a wrapper class.
104119 */
@@ -121,4 +136,4 @@ final class WrapperGenerator {
121136 }
122137 }
123138 ' ' '
124- }
139+ }
0 commit comments