Skip to content

Commit

Permalink
Fix #74 : Names for Package and Factory in src are not named correctly
Browse files Browse the repository at this point in the history
in some cases

Signed-off-by: Olivier Prouvost <olivier.prouvost@opcoach.com>
  • Loading branch information
opcoach committed Oct 10, 2018
1 parent a63b188 commit 685ef1d
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 19 deletions.
Expand Up @@ -66,7 +66,6 @@ public void testClassNames()
@Test
public void testUsedGenericInterfaces()
{
GenModel gm = getGenModel(PROJECT_GENMODEL);
GenerateDevStructure gen = getGenDevStructure(PROJECT_GENMODEL);

// Test that for a class name interfaces used in the generic part are
Expand All @@ -76,20 +75,52 @@ public void testUsedGenericInterfaces()
assertEquals("'Project' has no generic used interfaces", gen.getUsedGenericInterfaceNames("Project").length, 0);

// For 'Project<T> must return also an empty list
assertEquals("'Project<T>' has no generic used interfaces", gen.getUsedGenericInterfaceNames("Project<T>").length, 0);
assertEquals("'Project<T>' has no generic used interfaces",
gen.getUsedGenericInterfaceNames("Project<T>").length, 0);

// For 'ProjectFolder<T extends Project> must return an array with only
// Project
String[] result1 = gen.getUsedGenericInterfaceNames("ProjectFolder<T extends Project>");
assertEquals("'ProjectFolder<T extends Project>' must have 1 generic interface (Project)", result1.length, 1);
assertEquals("'ProjectFolder<T extends Project>' must have 1 generic interface (Project)", result1[0], "Project");
assertEquals("'ProjectFolder<T extends Project>' must have 1 generic interface (Project)", result1[0],
"Project");

// For 'ProjectFolder<T extends Project1 & Project2> must return an
// array with Project1 and Project2
String[] result2 = gen.getUsedGenericInterfaceNames("ProjectFolder<T extends Project1 & Project2>");
assertEquals("'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)", result2.length, 2);
assertEquals("'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)", result2[0], "Project1");
assertEquals("'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)", result2[1], "Project2");
assertEquals(
"'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)",
result2.length, 2);
assertEquals(
"'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)",
result2[0], "Project1");
assertEquals(
"'ProjectFolder<T extends Project1 & Project2>' must have 2 generic interfaces (Project1, Project2)",
result2[1], "Project2");

}

/** A test for bug #74 */
@Test
public void testGenerateFactoryInterfaceNameWithOtherPrefix()
{
GenModel gm = getGenModel(PROJECT_GENMODEL);
GenerateDevStructure gen = getGenDevStructure(PROJECT_GENMODEL);
String oldCp = gen.getClassPattern();
String oldIp = gen.getInterfacePattern();
gen.setClassPattern("{0}DevImpl");
gen.setInterfacePattern("{0}DevInterface");

GenPackage gp = findGenPackage(gm, "project");
String iname = gen.computeFactoryInterfaceName(gp);
System.out.println("computeFactoryInterfaceName = " + iname);
String cname = gen.computeFactoryClassName(gp);
System.out.println("computeFactoryClassName = " + cname);
assertEquals("Dev FactoryInterfaceName must have correct name", "ProjectFactoryDevInterface", iname);
// Reset previous values
gen.setClassPattern(oldCp);
gen.setInterfacePattern(oldIp);


}

Expand Down
Expand Up @@ -265,6 +265,18 @@ class GenerateDevStructure {

}

def setClassPattern(String cp) {
classPattern = cp
}

def getClassPattern() { classPattern }

def setInterfacePattern(String ip) {
interfacePattern = ip
}

def getInterfacePattern() { interfacePattern }

def refreshWorkspace() {
try {
ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, null)
Expand Down Expand Up @@ -333,7 +345,7 @@ class GenerateDevStructure {

import «gc.genPackage.computePackageNameForInterfaces».«gc.computeInterfaceFilename»;
«FOR name : gc.computeClassname.usedGenericInterfaceNames»
import «gc.genPackage.computePackageNameForInterfaces».«name»;
import «gc.genPackage.computePackageNameForInterfaces».«name»;
«ENDFOR»

// This class overrides the generated class and will be instantiated by factory
Expand All @@ -342,22 +354,21 @@ class GenerateDevStructure {

}
'''
/** return the list of interface names found in a generic class name
* for 'Project' -> returns empty array.
* for 'Project<T> -> returns empty array
* for 'ProjectFolder<T extends Project> returns Project
* for 'ProjectFolder<T extends Project1 & Project2> returns { "Project1", "Project2"}
*/
def String[] getUsedGenericInterfaceNames(String name)
{
def String[] getUsedGenericInterfaceNames(String name) {
val pos = name.indexOf(" extends ")
if (pos == -1)
return Collections.emptyList
return Collections.emptyList

// There are some types
val afterExtends = name.substring(pos + " extends ".length).replace('>','')
afterExtends.split("&").stream.map([trim]).collect( Collectors.toList())
val afterExtends = name.substring(pos + " extends ".length).replace('>', '')
afterExtends.split("&").stream.map([trim]).collect(Collectors.toList())
}

def generateInterfaceContent(GenClass gc) '''
Expand Down Expand Up @@ -456,9 +467,9 @@ class GenerateDevStructure {
def computeCopyrightComment() '''
«IF genModel.copyrightText !== null && genModel.copyrightText.length > 0»
/**
* «genModel.copyrightText»
*/
/**
* «genModel.copyrightText»
*/
«ELSE»«ENDIF»
'''
Expand Down Expand Up @@ -511,7 +522,7 @@ class GenerateDevStructure {
/** Compute the factory interface name to be generated */
def computeFactoryInterfaceName(GenPackage gp) {
gp.prefix + "Factory"
gp.prefix + interfacePattern.replace("{0}", "Factory")
}
/** Compute the factory interface name to be generated */
Expand Down
Expand Up @@ -317,6 +317,22 @@ public void generateAll(final String antFilename) {
this.refreshWorkspace();
}

public String setClassPattern(final String cp) {
return this.classPattern = cp;
}

public String getClassPattern() {
return this.classPattern;
}

public String setInterfacePattern(final String ip) {
return this.interfacePattern = ip;
}

public String getInterfacePattern() {
return this.interfacePattern;
}

public void refreshWorkspace() {
try {
try {
Expand Down Expand Up @@ -854,7 +870,8 @@ public Object computeGenericTypes(final EClass c, final boolean addExtends) {
*/
public String computeFactoryInterfaceName(final GenPackage gp) {
String _prefix = gp.getPrefix();
return (_prefix + "Factory");
String _replace = this.interfacePattern.replace("{0}", "Factory");
return (_prefix + _replace);
}

/**
Expand Down

0 comments on commit 685ef1d

Please sign in to comment.