Skip to content

Commit 98ae7a8

Browse files
gndrmwing328
authored andcommitted
Introduced GeneratorProperties as a thread-safe clone of System Properties (#1598)
* Introduced GeneratorProperties as a thread-safe clone of System Properties * Removed unnecessary SmartBear copyright
1 parent 2025d12 commit 98ae7a8

File tree

10 files changed

+143
-92
lines changed

10 files changed

+143
-92
lines changed

modules/openapi-generator-gradle-plugin/bin/main/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.gradle.kotlin.dsl.property
2828
import org.openapitools.codegen.CodegenConstants
2929
import org.openapitools.codegen.DefaultGenerator
3030
import org.openapitools.codegen.config.CodegenConfigurator
31+
import org.openapitools.codegen.config.GeneratorProperties
3132

3233

3334
/**
@@ -352,36 +353,36 @@ open class GenerateTask : DefaultTask() {
352353
try {
353354
if (systemProperties.isPresent) {
354355
systemProperties.get().forEach { (key, value) ->
355-
// System.setProperty returns the original value for a key, or null.
356+
// GeneratorProperties.setProperty returns the original value for a key, or null.
356357
// Cache the original value or null…we will late put the properties back in their original state.
357-
originalEnvironmentVariables[key] = System.setProperty(key, value)
358+
originalEnvironmentVariables[key] = GeneratorProperties.setProperty(key, value)
358359
configurator.addSystemProperty(key, value)
359360
}
360361
}
361362

362363
if (supportingFilesConstrainedTo.isPresent && supportingFilesConstrainedTo.get().isNotEmpty()) {
363-
System.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesConstrainedTo.get().joinToString(","))
364+
GeneratorProperties.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesConstrainedTo.get().joinToString(","))
364365
} else {
365-
System.clearProperty(CodegenConstants.SUPPORTING_FILES)
366+
GeneratorProperties.clearProperty(CodegenConstants.SUPPORTING_FILES)
366367
}
367368

368369
if (modelFilesConstrainedTo.isPresent && modelFilesConstrainedTo.get().isNotEmpty()) {
369-
System.setProperty(CodegenConstants.MODELS, modelFilesConstrainedTo.get().joinToString(","))
370+
GeneratorProperties.setProperty(CodegenConstants.MODELS, modelFilesConstrainedTo.get().joinToString(","))
370371
} else {
371-
System.clearProperty(CodegenConstants.MODELS)
372+
GeneratorProperties.clearProperty(CodegenConstants.MODELS)
372373
}
373374

374375
if (apiFilesConstrainedTo.isPresent && apiFilesConstrainedTo.get().isNotEmpty()) {
375-
System.setProperty(CodegenConstants.APIS, apiFilesConstrainedTo.get().joinToString(","))
376+
GeneratorProperties.setProperty(CodegenConstants.APIS, apiFilesConstrainedTo.get().joinToString(","))
376377
} else {
377-
System.clearProperty(CodegenConstants.APIS)
378+
GeneratorProperties.clearProperty(CodegenConstants.APIS)
378379
}
379380

380-
System.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.get().toString())
381-
System.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.get().toString())
382-
System.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.get().toString())
383-
System.setProperty(CodegenConstants.API_TESTS, generateApiTests.get().toString())
384-
System.setProperty(CodegenConstants.WITH_XML, withXml.get().toString())
381+
GeneratorProperties.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.get().toString())
382+
GeneratorProperties.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.get().toString())
383+
GeneratorProperties.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.get().toString())
384+
GeneratorProperties.setProperty(CodegenConstants.API_TESTS, generateApiTests.get().toString())
385+
GeneratorProperties.setProperty(CodegenConstants.WITH_XML, withXml.get().toString())
385386

386387
// now override with any specified parameters
387388
verbose.ifNotEmpty { value ->
@@ -542,13 +543,7 @@ open class GenerateTask : DefaultTask() {
542543
}
543544
} finally {
544545
// Reset all modified system properties back to their original state
545-
originalEnvironmentVariables.forEach {
546-
when {
547-
it.value == null -> System.clearProperty(it.key)
548-
else -> System.setProperty(it.key, it.value)
549-
}
550-
}
551-
originalEnvironmentVariables.clear()
546+
GeneratorProperties.reset()
552547
}
553548
}
554549
}

modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.gradle.kotlin.dsl.property
2828
import org.openapitools.codegen.CodegenConstants
2929
import org.openapitools.codegen.DefaultGenerator
3030
import org.openapitools.codegen.config.CodegenConfigurator
31+
import org.openapitools.codegen.config.GeneratorProperties
3132

3233

3334
/**
@@ -323,8 +324,6 @@ open class GenerateTask : DefaultTask() {
323324
@get:Internal
324325
val configOptions = project.objects.property<Map<String, String>>()
325326

326-
private val originalEnvironmentVariables = mutableMapOf<String, String?>()
327-
328327
private fun <T : Any?> Property<T>.ifNotEmpty(block: Property<T>.(T) -> Unit) {
329328
if (isPresent) {
330329
val item: T? = get()
@@ -352,36 +351,33 @@ open class GenerateTask : DefaultTask() {
352351
try {
353352
if (systemProperties.isPresent) {
354353
systemProperties.get().forEach { (key, value) ->
355-
// System.setProperty returns the original value for a key, or null.
356-
// Cache the original value or null…we will late put the properties back in their original state.
357-
originalEnvironmentVariables[key] = System.setProperty(key, value)
358354
configurator.addSystemProperty(key, value)
359355
}
360356
}
361357

362358
if (supportingFilesConstrainedTo.isPresent && supportingFilesConstrainedTo.get().isNotEmpty()) {
363-
System.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesConstrainedTo.get().joinToString(","))
359+
GeneratorProperties.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesConstrainedTo.get().joinToString(","))
364360
} else {
365-
System.clearProperty(CodegenConstants.SUPPORTING_FILES)
361+
GeneratorProperties.clearProperty(CodegenConstants.SUPPORTING_FILES)
366362
}
367363

368364
if (modelFilesConstrainedTo.isPresent && modelFilesConstrainedTo.get().isNotEmpty()) {
369-
System.setProperty(CodegenConstants.MODELS, modelFilesConstrainedTo.get().joinToString(","))
365+
GeneratorProperties.setProperty(CodegenConstants.MODELS, modelFilesConstrainedTo.get().joinToString(","))
370366
} else {
371-
System.clearProperty(CodegenConstants.MODELS)
367+
GeneratorProperties.clearProperty(CodegenConstants.MODELS)
372368
}
373369

374370
if (apiFilesConstrainedTo.isPresent && apiFilesConstrainedTo.get().isNotEmpty()) {
375-
System.setProperty(CodegenConstants.APIS, apiFilesConstrainedTo.get().joinToString(","))
371+
GeneratorProperties.setProperty(CodegenConstants.APIS, apiFilesConstrainedTo.get().joinToString(","))
376372
} else {
377-
System.clearProperty(CodegenConstants.APIS)
373+
GeneratorProperties.clearProperty(CodegenConstants.APIS)
378374
}
379375

380-
System.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.get().toString())
381-
System.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.get().toString())
382-
System.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.get().toString())
383-
System.setProperty(CodegenConstants.API_TESTS, generateApiTests.get().toString())
384-
System.setProperty(CodegenConstants.WITH_XML, withXml.get().toString())
376+
GeneratorProperties.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.get().toString())
377+
GeneratorProperties.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.get().toString())
378+
GeneratorProperties.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.get().toString())
379+
GeneratorProperties.setProperty(CodegenConstants.API_TESTS, generateApiTests.get().toString())
380+
GeneratorProperties.setProperty(CodegenConstants.WITH_XML, withXml.get().toString())
385381

386382
// now override with any specified parameters
387383
verbose.ifNotEmpty { value ->
@@ -541,14 +537,7 @@ open class GenerateTask : DefaultTask() {
541537
throw GradleException("Code generation failed.", e)
542538
}
543539
} finally {
544-
// Reset all modified system properties back to their original state
545-
originalEnvironmentVariables.forEach {
546-
when {
547-
it.value == null -> System.clearProperty(it.key)
548-
else -> System.setProperty(it.key, it.value)
549-
}
550-
}
551-
originalEnvironmentVariables.clear()
540+
GeneratorProperties.reset()
552541
}
553542
}
554543
}

modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.openapitools.codegen.CodegenConstants;
5252
import org.openapitools.codegen.DefaultGenerator;
5353
import org.openapitools.codegen.config.CodegenConfigurator;
54+
import org.openapitools.codegen.config.GeneratorProperties;
5455
import org.sonatype.plexus.build.incremental.BuildContext;
5556
import org.sonatype.plexus.build.incremental.DefaultBuildContext;
5657
import org.slf4j.Logger;
@@ -499,28 +500,28 @@ public void execute() throws MojoExecutionException {
499500

500501
// Set generation options
501502
if (null != generateApis && generateApis) {
502-
System.setProperty(CodegenConstants.APIS, "");
503+
GeneratorProperties.setProperty(CodegenConstants.APIS, "");
503504
} else {
504-
System.clearProperty(CodegenConstants.APIS);
505+
GeneratorProperties.clearProperty(CodegenConstants.APIS);
505506
}
506507

507508
if (null != generateModels && generateModels) {
508-
System.setProperty(CodegenConstants.MODELS, modelsToGenerate);
509+
GeneratorProperties.setProperty(CodegenConstants.MODELS, modelsToGenerate);
509510
} else {
510-
System.clearProperty(CodegenConstants.MODELS);
511+
GeneratorProperties.clearProperty(CodegenConstants.MODELS);
511512
}
512513

513514
if (null != generateSupportingFiles && generateSupportingFiles) {
514-
System.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesToGenerate);
515+
GeneratorProperties.setProperty(CodegenConstants.SUPPORTING_FILES, supportingFilesToGenerate);
515516
} else {
516-
System.clearProperty(CodegenConstants.SUPPORTING_FILES);
517+
GeneratorProperties.clearProperty(CodegenConstants.SUPPORTING_FILES);
517518
}
518519

519-
System.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.toString());
520-
System.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.toString());
521-
System.setProperty(CodegenConstants.API_TESTS, generateApiTests.toString());
522-
System.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.toString());
523-
System.setProperty(CodegenConstants.WITH_XML, withXml.toString());
520+
GeneratorProperties.setProperty(CodegenConstants.MODEL_TESTS, generateModelTests.toString());
521+
GeneratorProperties.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.toString());
522+
GeneratorProperties.setProperty(CodegenConstants.API_TESTS, generateApiTests.toString());
523+
GeneratorProperties.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.toString());
524+
GeneratorProperties.setProperty(CodegenConstants.WITH_XML, withXml.toString());
524525

525526
if (configOptions != null) {
526527
// Retained for backwards-compataibility with configOptions -> instantiation-types
@@ -593,13 +594,13 @@ public void execute() throws MojoExecutionException {
593594
if (environmentVariables != null) {
594595

595596
for (String key : environmentVariables.keySet()) {
596-
originalEnvironmentVariables.put(key, System.getProperty(key));
597+
originalEnvironmentVariables.put(key, GeneratorProperties.getProperty(key));
597598
String value = environmentVariables.get(key);
598599
if (value == null) {
599600
// don't put null values
600601
value = "";
601602
}
602-
System.setProperty(key, value);
603+
GeneratorProperties.setProperty(key, value);
603604
configurator.addSystemProperty(key, value);
604605
}
605606
}
@@ -680,9 +681,9 @@ private void addCompileSourceRootIfConfigured() {
680681
// when running the plugin multiple consecutive times with different configurations.
681682
for (Map.Entry<String, String> entry : originalEnvironmentVariables.entrySet()) {
682683
if (entry.getValue() == null) {
683-
System.clearProperty(entry.getKey());
684+
GeneratorProperties.clearProperty(entry.getKey());
684685
} else {
685-
System.setProperty(entry.getKey(), entry.getValue());
686+
GeneratorProperties.setProperty(entry.getKey(), entry.getValue());
686687
}
687688
}
688689
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.apache.commons.lang3.StringUtils;
5454
import org.apache.commons.lang3.tuple.Pair;
5555
import org.openapitools.codegen.CodegenDiscriminator.MappedModel;
56+
import org.openapitools.codegen.config.GeneratorProperties;
5657
import org.openapitools.codegen.examples.ExampleGenerator;
5758
import org.openapitools.codegen.serializer.SerializerUtils;
5859
import org.openapitools.codegen.utils.ModelUtils;
@@ -2879,7 +2880,7 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
28792880
}
28802881
codegenParameter.jsonSchema = Json.pretty(parameter);
28812882

2882-
if (System.getProperty("debugParser") != null) {
2883+
if (GeneratorProperties.getProperty("debugParser") != null) {
28832884
LOGGER.info("working on Parameter " + parameter.getName());
28842885
LOGGER.info("JSON schema: " + codegenParameter.jsonSchema);
28852886
}

0 commit comments

Comments
 (0)