swagger-api / swagger-core

Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API
http://swagger.io
Apache License 2.0
7.39k stars 2.18k forks source link

`openApiFile` property of `ResolveTask` in Gradle plugin doesn't support lazy configuration and task dependency inference #4366

Open erdi opened 1 year ago

erdi commented 1 year ago

Some properties of ResolveTask, like for example classpath or buildClasspath support lazy configuration and task dependency inference because their type allows assigning a FileCollection which supports these Gradle features. Unfortunately it's not the case for openApiFile which uses File as the type. RegularFileProperty has been introduced in Gradle 4.3 which if used as the type for openApiFile would allow to lazy configure it and infer task dependencies.

In my case I'm generating the config file using another task so I would like to be able to do

val generateSwaggerConfig = tasks.register<GenerateSwaggerFile>("generateSwaggerConfig") {
    configFile.set(layout.buildDirectory.file("${name}/config.yaml")) // configFile is a RegularFileProperty
}

tasks.named<ResolveTask>("resolve") {
    openApiFile.set(generateSwaggerConfig.map { it.configFile })
}

which would allow Gradle to infer that to run resolve it needs to run generateSwaggerConfig first.

Please let me know if you are accepting PRs as I'd like to contribute a hopefully backwards change with this enhancement.

frantuma commented 1 year ago

@erdi thanks for reporting this and for investigation. We certainly welcome PRs and would appreciate a backward compatible fix

nbrugger-tgm commented 4 weeks ago

Fix is here: https://github.com/swagger-api/swagger-core/pull/4761 @frantuma

nbrugger-tgm commented 3 weeks ago

@frantuma could I get a review of my pr? Will it be considered for merging?