Skip to content

Commit 4a8291c

Browse files
authored
Merge pull request #9054 from demonfiddler/issue-8849
Fixes #8988, #8849 New generator options and template improvements + required bug fix
2 parents 5a6d687 + 5ac77db commit 4a8291c

File tree

592 files changed

+35181
-15807
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

592 files changed

+35181
-15807
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/sh
2+
3+
SCRIPT="$0"
4+
echo "# START SCRIPT: $SCRIPT"
5+
6+
while [ -h "$SCRIPT" ] ; do
7+
ls=`ls -ld "$SCRIPT"`
8+
link=`expr "$ls" : '.*-> \(.*\)$'`
9+
if expr "$link" : '/.*' > /dev/null; then
10+
SCRIPT="$link"
11+
else
12+
SCRIPT=`dirname "$SCRIPT"`/"$link"
13+
fi
14+
done
15+
16+
if [ ! -d "${APP_DIR}" ]; then
17+
APP_DIR=`dirname "$SCRIPT"`/..
18+
APP_DIR=`cd "${APP_DIR}"; pwd`
19+
fi
20+
21+
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
22+
23+
if [ ! -f "$executable" ]
24+
then
25+
mvn -B clean package
26+
fi
27+
28+
# if you've executed sbt assembly previously it will use that instead.
29+
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
30+
ags="generate \
31+
-t modules/swagger-codegen/src/main/resources/Javascript \
32+
-i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml \
33+
-l javascript \
34+
-o samples/client/petstore/javascript-override-default-config \
35+
--invoker-package petstore \
36+
--api-package handler \
37+
--model-package mdl \
38+
--additional-properties sourceFolder=js \
39+
-DappName=PetstoreClient $@"
40+
41+
java $JAVA_OPTS -jar $executable $ags

bin/javascript-petstore-all.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
./bin/javascript-promise-petstore.sh
55
./bin/javascript-es6-petstore.sh
66
./bin/javascript-promise-es6-petstore.sh
7+
./bin/javascript-override-default-config-petstore.sh

bin/windows/javascript-es6-petstore.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ If Not Exist %executable% (
44
mvn clean package
55
)
66

7+
REM Test spec files don't get overwritten, so delete them first.
8+
del /S samples\client\petstore\javascript-es6\test\*.spec.js
9+
710
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
811
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l javascript -o samples\client\petstore\javascript-es6 --additional-properties useES6=true
912

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
set executable=.\modules\swagger-codegen-cli\target\swagger-codegen-cli.jar
2+
3+
If Not Exist %executable% (
4+
mvn clean package
5+
)
6+
7+
REM Test spec files don't get overwritten, so delete them first.
8+
del /S samples\client\petstore\javascript-override-default-config\test\*.spec.js
9+
10+
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
11+
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l javascript -o samples\client\petstore\javascript-override-default-config -t modules\swagger-codegen\src\main\resources\Javascript --invoker-package petstore --api-package handler --model-package mdl -DappName=PetstoreClient --additional-properties sourceFolder=js
12+
13+
java %JAVA_OPTS% -jar %executable% %ags%

bin/windows/javascript-petstore-all.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ call .\bin\windows\javascript-petstore.bat
22
call .\bin\windows\javascript-promise-petstore.bat
33
call .\bin\windows\javascript-es6-petstore.bat
44
call .\bin\windows\javascript-promise-es6-petstore.bat
5+
call .\bin\windows\javascript-override-default-config-petstore.bat

bin/windows/javascript-petstore.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ If Not Exist %executable% (
44
mvn clean package
55
)
66

7+
REM Test spec files don't get overwritten, so delete them first.
8+
del /S samples\client\petstore\javascript\test\*.spec.js
9+
710
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
811
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l javascript -o samples\client\petstore\javascript -DappName=PetstoreClient --additional-properties useES6=false
912

bin/windows/javascript-promise-es6-petstore.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ If Not Exist %executable% (
44
mvn clean package
55
)
66

7+
REM Test spec files don't get overwritten, so delete them first.
8+
del /S samples\client\petstore\javascript-promise-es6\test\*.spec.js
9+
710
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
811
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l javascript -o samples\client\petstore\javascript-promise-es6 --additional-properties useES6=true,usePromises=true
912

bin/windows/javascript-promise-petstore.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ If Not Exist %executable% (
44
mvn clean package
55
)
66

7+
REM Test spec files don't get overwritten, so delete them first.
8+
del /S samples\client\petstore\javascript-promise\test\*.spec.js
9+
710
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
811
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l javascript -o samples\client\petstore\javascript-promise --additional-properties usePromises=true,useES6=false -DappName=PetstoreClient
912

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
230230
*/
231231
public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
232232
List<Object> models = (List<Object>) objs.get("models");
233+
Map<String, Integer> uniqueNames = new HashMap<>();
233234
for (Object _mo : models) {
234235
Map<String, Object> mo = (Map<String, Object>) _mo;
235236
CodegenModel cm = (CodegenModel) mo.get("model");
@@ -241,6 +242,7 @@ public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
241242
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
242243
String commonPrefix = findCommonPrefixOfVars(values);
243244
int truncateIdx = commonPrefix.length();
245+
uniqueNames.clear();
244246
for (Object value : values) {
245247
Map<String, String> enumVar = new HashMap<String, String>();
246248
String enumName;
@@ -252,7 +254,8 @@ public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
252254
enumName = value.toString();
253255
}
254256
}
255-
enumVar.put("name", toEnumVarName(enumName, cm.dataType));
257+
String varName = toEnumVarName(enumName, cm.dataType);
258+
enumVar.put("name", ensureUniqueName(uniqueNames, varName));
256259
enumVar.put("value", toEnumValue(value.toString(), cm.dataType));
257260
enumVars.add(enumVar);
258261
}
@@ -264,7 +267,11 @@ public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
264267
for (CodegenProperty var : cm.vars) {
265268
updateCodegenPropertyEnum(var);
266269
}
267-
270+
if (cm.vars != cm.allVars) {
271+
for (CodegenProperty var : cm.allVars) {
272+
updateCodegenPropertyEnum(var);
273+
}
274+
}
268275
}
269276
return objs;
270277
}
@@ -291,6 +298,19 @@ public String findCommonPrefixOfVars(List<Object> vars) {
291298
return "";
292299
}
293300

301+
/**
302+
* If necessary, appends a suffix to enforce uniqueness of names within a namespace.
303+
* @param uniqueNames Counts name occurrences within a namespace.
304+
* @param name The proposed name.
305+
* @return <code>name</code>, uniquely suffixed as necessary.
306+
*/
307+
protected String ensureUniqueName(Map<String, Integer> uniqueNames, String name) {
308+
int count = uniqueNames.containsKey(name) ? uniqueNames.get(name) + 1 : 1;
309+
if (uniqueNames.put(name, count) != null)
310+
name = name + '_' + count;
311+
return name;
312+
}
313+
294314
/**
295315
* Return the enum default value in the language specified format
296316
*
@@ -3594,10 +3614,9 @@ public String sanitizeName(String name) {
35943614

35953615
// remove everything else other than word, number and _
35963616
// $php_variable => php_variable
3597-
if (allowUnicodeIdentifiers) { //could be converted to a single line with ?: operator
3617+
if (allowUnicodeIdentifiers) { // could be converted to a single line with ?: operator
35983618
name = Pattern.compile("\\W", Pattern.UNICODE_CHARACTER_CLASS).matcher(name).replaceAll("");
3599-
}
3600-
else {
3619+
} else {
36013620
name = name.replaceAll("\\W", "");
36023621
}
36033622

@@ -3733,6 +3752,7 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
37333752
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
37343753
String commonPrefix = findCommonPrefixOfVars(values);
37353754
int truncateIdx = commonPrefix.length();
3755+
Map<String, Integer> uniqueNames = new HashMap<>();
37363756
for (Object value : values) {
37373757
Map<String, String> enumVar = new HashMap<String, String>();
37383758
String enumName;
@@ -3744,7 +3764,8 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
37443764
enumName = value.toString();
37453765
}
37463766
}
3747-
enumVar.put("name", toEnumVarName(enumName, var.datatype));
3767+
String varName = toEnumVarName(enumName, var.datatype);
3768+
enumVar.put("name", ensureUniqueName(uniqueNames, varName));
37483769
enumVar.put("value", toEnumValue(value.toString(), var.datatype));
37493770
enumVars.add(enumVar);
37503771
}

0 commit comments

Comments
 (0)