Skip to content

Commit c90f426

Browse files
committed
EDIT: Prevented the generation of empty folders in the wrapper structure. Improved Xtend code.
1 parent 4f86dc2 commit c90f426

2 files changed

Lines changed: 29 additions & 13 deletions

File tree

src/main/java/jce/JavaCodeEcorification.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public JavaCodeEcorification() {
4444
extractionProperties.set(TextProperty.SAVING_STRATEGY, "CopyProject");
4545
extractionProperties.set(TextProperty.PROJECT_SUFFIX, "Ecorified");
4646
extractionProperties.set(TextProperty.DEFAULT_PACKAGE, "ecore");
47+
extractionProperties.set(TextProperty.DATATYPE_PACKAGE, "datatypes");
4748
extractionProperties.set(BinaryProperty.DUMMY_CLASS, false);
4849
}
4950

src/main/java/jce/codegen/WrapperGenerator.xtend

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ package jce.codegen
33
import eme.generator.GeneratedEcoreMetamodel
44
import java.io.ByteArrayInputStream
55
import java.io.File
6-
import java.io.InputStream
76
import jce.util.FolderRefresher
87
import jce.util.PathHelper
98
import jce.util.ProgressMonitorAdapter
109
import org.apache.log4j.LogManager
1110
import org.apache.log4j.Logger
12-
import org.eclipse.core.resources.IFile
1311
import org.eclipse.core.resources.IFolder
1412
import org.eclipse.core.resources.IProject
1513
import 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

Comments
 (0)