File tree Expand file tree Collapse file tree 4 files changed +52
-10
lines changed
modules/swagger-codegen/src/main/java/io/swagger/codegen/v3 Expand file tree Collapse file tree 4 files changed +52
-10
lines changed Original file line number Diff line number Diff line change 11package io .swagger .codegen .v3 ;
22
33import java .util .ArrayList ;
4+ import java .util .Collections ;
45import java .util .HashMap ;
56import java .util .List ;
67import java .util .Map ;
@@ -122,11 +123,20 @@ public static void main(String[] args) {
122123
123124 public static List <CodegenConfig > getExtensions () {
124125 ServiceLoader <CodegenConfig > loader = ServiceLoader .load (CodegenConfig .class );
125- List <CodegenConfig > output = new ArrayList <CodegenConfig >();
126- for (CodegenConfig aLoader : loader ) {
127- output .add (aLoader );
126+ Map <String , CodegenConfig > output = new HashMap <>();
127+
128+ for (CodegenConfig config : loader ) {
129+ if (output .get (config .getName ()) == null ) {
130+ output .put (config .getName (), config );
131+ } else if (config .isPrivileged () && !output .get (config .getName ()).isPrivileged ()) {
132+ output .put (config .getName (), config );
133+ } else if (output .get (config .getName ()).isPrivileged () && !config .isPrivileged ()) {
134+ // skip
135+ } else if (config .getPriority () > output .get (config .getName ()).getPriority ()) {
136+ output .put (config .getName (), config );
137+ }
128138 }
129- return output ;
139+ return new ArrayList <>( output . values ()) ;
130140 }
131141
132142 static void usage (Options options ) {
Original file line number Diff line number Diff line change @@ -255,4 +255,16 @@ public interface CodegenConfig {
255255 default boolean checkAliasModel () {
256256 return false ;
257257 }
258+
259+ default boolean isPrivileged () {
260+ return false ;
261+ }
262+
263+ default int getPriority () {
264+ return Integer .MIN_VALUE ;
265+ }
266+
267+ default String getCodeName () {
268+ return getName ();
269+ }
258270}
Original file line number Diff line number Diff line change @@ -15,14 +15,25 @@ public static CodegenConfig forName(String name) {
1515 ServiceLoader <CodegenConfig > loader = load (CodegenConfig .class );
1616
1717 StringBuilder availableConfigs = new StringBuilder ();
18-
18+ CodegenConfig current = null ;
1919 for (CodegenConfig config : loader ) {
20+
2021 if (config .getName ().equals (name )) {
21- return config ;
22+ if (current == null ) {
23+ current = config ;
24+ } else if (config .isPrivileged () && !current .isPrivileged ()) {
25+ current = config ;
26+ } else if (current .isPrivileged () && !config .isPrivileged ()) {
27+ // skip
28+ } else if (config .getPriority () > current .getPriority ()) {
29+ current = config ;
30+ }
2231 }
23-
2432 availableConfigs .append (config .getName ()).append ("\n " );
2533 }
34+ if (current != null ) {
35+ return current ;
36+ }
2637
2738 // else try to load directly
2839 try {
Original file line number Diff line number Diff line change @@ -38,11 +38,20 @@ public static void main(String[] args) {
3838
3939 public static List <CodegenConfig > getExtensions () {
4040 ServiceLoader <CodegenConfig > loader = ServiceLoader .load (CodegenConfig .class );
41- List <CodegenConfig > output = new ArrayList <CodegenConfig >();
41+ Map <String , CodegenConfig > output = new HashMap <>();
42+
4243 for (CodegenConfig config : loader ) {
43- output .add (config );
44+ if (output .get (config .getName ()) == null ) {
45+ output .put (config .getName (), config );
46+ } else if (config .isPrivileged () && !output .get (config .getName ()).isPrivileged ()) {
47+ output .put (config .getName (), config );
48+ } else if (output .get (config .getName ()).isPrivileged () && !config .isPrivileged ()) {
49+ // skip
50+ } else if (config .getPriority () > output .get (config .getName ()).getPriority ()) {
51+ output .put (config .getName (), config );
52+ }
4453 }
45- return output ;
54+ return new ArrayList <>( output . values ()) ;
4655 }
4756
4857 static void usage (Options options ) {
You can’t perform that action at this time.
0 commit comments