Skip to content

Commit

Permalink
Hack to eliminate overlapping output in tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcin Zajączkowski committed Jul 13, 2017
1 parent d368ba7 commit 1ed7b73
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.codearte.accurest.plugin

import io.codearte.accurest.plugin.config.AccurestGradleConfigProperties
import io.codearte.accurest.plugin.config.AccurestClientStubsTaskConfigProperties
import io.codearte.accurest.plugin.config.AccurestGenericGradleConfigProperties
import io.codearte.accurest.plugin.config.AccurestServerTestsTaskConfigProperties
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
Expand All @@ -20,7 +22,7 @@ class AccurestGradlePlugin implements Plugin<Project> {
@Override
void apply(Project project) {
this.project = project
AccurestGradleConfigProperties extension = project.extensions.create('accurest', AccurestGradleConfigProperties)
AccurestGenericGradleConfigProperties extension = project.extensions.create('accurest', AccurestGenericGradleConfigProperties)

project.check.dependsOn(GENERATE_SERVER_TESTS_TASK_NAME)

Expand All @@ -45,7 +47,7 @@ class AccurestGradlePlugin implements Plugin<Project> {
}
}

void setConfigurationDefaults(AccurestGradleConfigProperties extension) {
void setConfigurationDefaults(AccurestGenericGradleConfigProperties extension) {
extension.with {
generatedTestSourcesDir = project.file("${project.buildDir}/generated-test-sources/accurest")
contractsDslDir = defaultAccurestContractsDir() //TODO: Use sourceset
Expand All @@ -57,21 +59,21 @@ class AccurestGradlePlugin implements Plugin<Project> {
project.file("${project.rootDir}/src/test/resources/accurest")
}

private void createGenerateTestsTask(AccurestGradleConfigProperties extension) {
private void createGenerateTestsTask(AccurestGenericGradleConfigProperties extension) {
Task task = project.tasks.create(GENERATE_SERVER_TESTS_TASK_NAME, GenerateServerTestsTask)
task.description = "Generate server tests from GroovyDSL"
task.group = GROUP_NAME
task.conventionMapping.with {
configProperties = { extension }
configProperties = { AccurestServerTestsTaskConfigProperties.fromGenericConfig(extension) }
}
}

private void createAndConfigureGenerateWireMockClientStubsFromDslTask(AccurestGradleConfigProperties extension) {
private void createAndConfigureGenerateWireMockClientStubsFromDslTask(AccurestGenericGradleConfigProperties extension) {
Task task = project.tasks.create(DSL_TO_WIREMOCK_CLIENT_TASK_NAME, GenerateWireMockClientStubsFromDslTask)
task.description = "Generate WireMock client stubs from GroovyDSL"
task.group = GROUP_NAME
task.conventionMapping.with {
configProperties = { extension }
configProperties = { AccurestClientStubsTaskConfigProperties.fromGenericConfig(extension) }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.codearte.accurest.plugin

import io.codearte.accurest.AccurestException
import io.codearte.accurest.TestGenerator
import io.codearte.accurest.plugin.config.AccurestGradleConfigProperties
import io.codearte.accurest.plugin.config.AccurestServerTestsTaskConfigProperties
import org.gradle.api.GradleException
import org.gradle.api.internal.ConventionTask
import org.gradle.api.tasks.CacheableTask
Expand All @@ -13,7 +13,7 @@ import org.gradle.api.tasks.TaskAction
class GenerateServerTestsTask extends ConventionTask {

@Nested
AccurestGradleConfigProperties configProperties
AccurestServerTestsTaskConfigProperties configProperties

@TaskAction
void generate() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codearte.accurest.plugin

import io.codearte.accurest.plugin.config.AccurestGradleConfigProperties
import io.codearte.accurest.plugin.config.AccurestClientStubsTaskConfigProperties
import io.codearte.accurest.wiremock.DslToWireMockClientConverter
import io.codearte.accurest.wiremock.RecursiveFilesConverter
import org.gradle.api.internal.ConventionTask
Expand All @@ -13,7 +13,7 @@ import org.gradle.api.tasks.TaskAction
class GenerateWireMockClientStubsFromDslTask extends ConventionTask {

@Nested
AccurestGradleConfigProperties configProperties
AccurestClientStubsTaskConfigProperties configProperties

@TaskAction
void generate() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.codearte.accurest.plugin.config

import groovy.transform.CompileStatic
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputDirectory

@CompileStatic
class AccurestClientStubsTaskConfigProperties extends AccurestGenericGradleConfigProperties {

@Override
@Input
List<String> getExcludedFiles() {
return super.getExcludedFiles()
}

@Override
@Input
List<String> getIgnoredFiles() {
return super.getIgnoredFiles()
}

@Override
@InputDirectory
File getContractsDslDir() {
return super.getContractsDslDir()
}

@Override
@OutputDirectory
File getStubsOutputDir() {
return super.getStubsOutputDir()
}

static AccurestClientStubsTaskConfigProperties fromGenericConfig(AccurestGenericGradleConfigProperties configToCloneFrom) {
return new AccurestClientStubsTaskConfigProperties().with {
it.clonePropertiesFrom(configToCloneFrom)
return it
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.codearte.accurest.plugin.config

import groovy.transform.CompileStatic
import io.codearte.accurest.config.AccurestConfigProperties

@CompileStatic
class AccurestGenericGradleConfigProperties extends AccurestConfigProperties {

protected void clonePropertiesFrom(AccurestGenericGradleConfigProperties configToCloneFrom) {
//shallow copy which is enough to make workaround for overlapping outputs in tasks
targetFramework = configToCloneFrom.targetFramework
testMode = configToCloneFrom.testMode
basePackageForTests = configToCloneFrom.basePackageForTests
baseClassForTests = configToCloneFrom.baseClassForTests
nameSuffixForTests = configToCloneFrom.nameSuffixForTests
ruleClassForTests = configToCloneFrom.ruleClassForTests
jsonAssertVersion = configToCloneFrom.jsonAssertVersion
excludedFiles = configToCloneFrom.excludedFiles
ignoredFiles = configToCloneFrom.ignoredFiles
imports = configToCloneFrom.imports
staticImports = configToCloneFrom.staticImports
contractsDslDir = configToCloneFrom.contractsDslDir
generatedTestSourcesDir = configToCloneFrom.generatedTestSourcesDir
stubsOutputDir = configToCloneFrom.stubsOutputDir
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.codearte.accurest.plugin.config

import groovy.transform.CompileStatic
import io.codearte.accurest.config.AccurestConfigProperties
import io.codearte.accurest.config.TestFramework
import io.codearte.accurest.config.TestMode
import org.gradle.api.tasks.Input
Expand All @@ -10,7 +9,7 @@ import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputDirectory

@CompileStatic
class AccurestGradleConfigProperties extends AccurestConfigProperties {
class AccurestServerTestsTaskConfigProperties extends AccurestGenericGradleConfigProperties {

@Override
@Input
Expand Down Expand Up @@ -93,9 +92,10 @@ class AccurestGradleConfigProperties extends AccurestConfigProperties {
return super.getGeneratedTestSourcesDir()
}

@Override
@OutputDirectory
File getStubsOutputDir() {
return super.getStubsOutputDir()
static AccurestServerTestsTaskConfigProperties fromGenericConfig(AccurestGenericGradleConfigProperties configToCloneFrom) {
return new AccurestServerTestsTaskConfigProperties().with {
it.clonePropertiesFrom(configToCloneFrom)
return it
}
}
}

0 comments on commit 1ed7b73

Please sign in to comment.