63
63
import java .time .ZonedDateTime ;
64
64
import java .util .*;
65
65
import java .util .function .Function ;
66
+ import java .util .function .Predicate ;
66
67
import java .util .stream .Collectors ;
67
68
68
69
import static org .apache .commons .lang3 .StringUtils .removeStart ;
@@ -88,6 +89,7 @@ public class DefaultGenerator implements Generator {
88
89
private String basePath ;
89
90
private String basePathWithoutHost ;
90
91
private String contextPath ;
92
+ private List <String > skipTags = new ArrayList <>();
91
93
private Map <String , String > generatorPropertyDefaults = new HashMap <>();
92
94
protected TemplateProcessor templateProcessor = null ;
93
95
@@ -101,6 +103,11 @@ public DefaultGenerator() {
101
103
public DefaultGenerator (Boolean dryRun ) {
102
104
this .dryRun = Boolean .TRUE .equals (dryRun );
103
105
LOGGER .info ("Generating with dryRun={}" , this .dryRun );
106
+ String skipTagsProperty = GlobalSettings .getProperty ("skipTags" );
107
+ if (skipTagsProperty != null ) {
108
+ skipTags = Arrays .asList (skipTagsProperty .split ("," ));
109
+ }
110
+ LOGGER .info ("Generating with skipTags={}" , skipTags );
104
111
}
105
112
106
113
@ SuppressWarnings ("deprecation" )
@@ -527,6 +534,10 @@ void generateModels(List<File> files, List<Object> allModels, List<String> unuse
527
534
// for PythonClientCodegen, all aliases are generated as models
528
535
continue ; // Don't create user-defined classes for aliases
529
536
}
537
+ if (hasAnySkipTag (skipTags , m )) {
538
+ LOGGER .info ("Skipped generating model {}" , m .name );
539
+ continue ;
540
+ }
530
541
}
531
542
allModels .add (modelTemplate );
532
543
}
@@ -551,6 +562,20 @@ void generateModels(List<File> files, List<Object> allModels, List<String> unuse
551
562
552
563
}
553
564
565
+ private boolean hasAnySkipTag (List <String > skipTags , CodegenModel m ) {
566
+ Map <String , Object > vendorExtensions = m .vendorExtensions ;
567
+ return skipTags .stream ().anyMatch (hasSkipTag (vendorExtensions ));
568
+ }
569
+
570
+ private boolean hasAnySkipTag (List <String > skipTags , CodegenOperation op ) {
571
+ Map <String , Object > vendorExtensions = op .vendorExtensions ;
572
+ return skipTags .stream ().anyMatch (hasSkipTag (vendorExtensions ));
573
+ }
574
+
575
+ private Predicate <String > hasSkipTag (Map <String , Object > vendorExtensions ) {
576
+ return skipTag -> vendorExtensions .containsKey (skipTag ) && (boolean ) vendorExtensions .get (skipTag );
577
+ }
578
+
554
579
@ SuppressWarnings ("unchecked" )
555
580
void generateApis (List <File > files , List <Object > allOperations , List <Object > allModels ) {
556
581
if (!generateApis ) {
@@ -577,6 +602,11 @@ void generateApis(List<File> files, List<Object> allOperations, List<Object> all
577
602
try {
578
603
List <CodegenOperation > ops = paths .get (tag );
579
604
ops .sort ((one , another ) -> ObjectUtils .compare (one .operationId , another .operationId ));
605
+ ops .removeIf (op -> hasInProgressExtension (tag , op ));
606
+ if (ops .isEmpty ()) {
607
+ LOGGER .info ("The {} client will not be generated" , tag );
608
+ continue ;
609
+ }
580
610
Map <String , Object > operation = processOperations (config , tag , ops , allModels );
581
611
URL url = URLPathUtils .getServerURL (openAPI , config .serverVariableOverrides ());
582
612
operation .put ("basePath" , basePath );
@@ -683,6 +713,13 @@ void generateApis(List<File> files, List<Object> allOperations, List<Object> all
683
713
}
684
714
685
715
}
716
+ private boolean hasInProgressExtension (String tag , CodegenOperation op ) {
717
+ if (hasAnySkipTag (skipTags , op )) {
718
+ LOGGER .info ("Operation {} of {} will not be generated" , op .operationId , tag );
719
+ return true ;
720
+ }
721
+ return false ;
722
+ }
686
723
687
724
private void generateSupportingFiles (List <File > files , Map <String , Object > bundle ) {
688
725
if (!generateSupportingFiles ) {
0 commit comments