Skip to content

Commit 31036c0

Browse files
committed
Migrate info plugin extensions to Gradle Provider API
1 parent 7787020 commit 31036c0

File tree

7 files changed

+64
-67
lines changed

7 files changed

+64
-67
lines changed

src/main/groovy/nebula/plugin/info/InfoBrokerPlugin.groovy

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,25 +57,28 @@ class InfoBrokerPlugin implements Plugin<Project> {
5757
}
5858

5959
private void filterManifestEntries(InfoBrokerPluginExtension extension) {
60-
if (extension.includedManifestProperties && extension.excludedManifestProperties) {
60+
boolean hasIncluded = extension.includedManifestProperties.isPresent() && !extension.includedManifestProperties.get().isEmpty()
61+
boolean hasExcluded = extension.excludedManifestProperties.isPresent() && !extension.excludedManifestProperties.get().isEmpty()
62+
63+
if (hasIncluded && hasExcluded) {
6164
throw new GradleException("includedManifestProperties and excludedManifestProperties are mutually exclusive. Only one should be provided")
62-
} else if (extension.excludedManifestProperties) {
65+
} else if (hasExcluded) {
6366
removeExcludedProperties(extension)
64-
} else if (extension.includedManifestProperties) {
67+
} else if (hasIncluded) {
6568
filterOnlyIncludedProperties(extension)
6669
}
6770
}
6871

6972
private void filterOnlyIncludedProperties(InfoBrokerPluginExtension extension) {
70-
List<String> includedProperties = extension.includedManifestProperties
73+
List<String> includedProperties = extension.includedManifestProperties.get()
7174
List<ManifestEntry> filteredManifestEntries = manifestEntries.findAll { entry ->
7275
(entry.name in includedProperties)
7376
}
7477
manifestEntries = filteredManifestEntries
7578
}
7679

7780
private void removeExcludedProperties(InfoBrokerPluginExtension extension) {
78-
List<String> excludedProperties = extension.excludedManifestProperties
81+
List<String> excludedProperties = extension.excludedManifestProperties.get()
7982
List<ManifestEntry> filteredManifestEntries = manifestEntries.findAll { entry ->
8083
!(entry.name in excludedProperties)
8184
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package nebula.plugin.info
22

3-
class InfoBrokerPluginExtension {
4-
List<String> includedManifestProperties = []
5-
List<String> excludedManifestProperties = []
3+
import org.gradle.api.provider.ListProperty
4+
5+
abstract class InfoBrokerPluginExtension {
6+
abstract ListProperty<String> getIncludedManifestProperties()
7+
abstract ListProperty<String> getExcludedManifestProperties()
68
}

src/main/groovy/nebula/plugin/info/ci/ContinuousIntegrationInfoExtension.groovy

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616

1717
package nebula.plugin.info.ci
1818

19-
class ContinuousIntegrationInfoExtension {
20-
String host
21-
String job
22-
String buildNumber
23-
String buildId
24-
String buildUrl
19+
import org.gradle.api.provider.Property
20+
21+
abstract class ContinuousIntegrationInfoExtension {
22+
abstract Property<String> getHost()
23+
abstract Property<String> getJob()
24+
abstract Property<String> getBuildNumber()
25+
abstract Property<String> getBuildId()
26+
abstract Property<String> getBuildUrl()
2527
}

src/main/groovy/nebula/plugin/info/ci/ContinuousIntegrationInfoPlugin.groovy

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616

1717
package nebula.plugin.info.ci
1818

19-
import groovy.transform.CompileDynamic
2019
import nebula.plugin.info.InfoBrokerPlugin
2120
import nebula.plugin.info.InfoCollectorPlugin
2221
import org.gradle.api.Plugin
2322
import org.gradle.api.Project
24-
import org.gradle.api.internal.ConventionMapping
25-
import org.gradle.api.internal.IConventionAware
2623
import org.gradle.api.provider.ProviderFactory
2724

2825
import javax.inject.Inject
@@ -55,22 +52,20 @@ class ContinuousIntegrationInfoPlugin implements Plugin<Project>, InfoCollectorP
5552
configureExtMapping(project, extension)
5653

5754
project.plugins.withType(InfoBrokerPlugin) { InfoBrokerPlugin manifestPlugin ->
58-
manifestPlugin.add('Build-Host') { extension.host }
59-
manifestPlugin.add('Build-Job') { extension.job }
60-
manifestPlugin.add('Build-Number') { extension.buildNumber }
61-
manifestPlugin.add('Build-Id') { extension.buildId }
62-
manifestPlugin.add('Build-Url') { extension.buildUrl }
55+
manifestPlugin.add('Build-Host') { extension.host.getOrNull() }
56+
manifestPlugin.add('Build-Job') { extension.job.getOrNull() }
57+
manifestPlugin.add('Build-Number') { extension.buildNumber.getOrNull() }
58+
manifestPlugin.add('Build-Id') { extension.buildId.getOrNull() }
59+
manifestPlugin.add('Build-Url') { extension.buildUrl.getOrNull() }
6360
}
6461
}
6562

66-
@CompileDynamic
6763
private void configureExtMapping(Project project, ContinuousIntegrationInfoExtension extension) {
68-
ConventionMapping extMapping = ((IConventionAware) extension).getConventionMapping()
69-
extMapping.host = { selectedProvider.calculateHost(project) }
70-
extMapping.job = { selectedProvider.calculateJob(project) }
71-
extMapping.buildNumber = { selectedProvider.calculateBuildNumber(project) }
72-
extMapping.buildId = { selectedProvider.calculateBuildId(project) }
73-
extMapping.buildUrl = { selectedProvider.calculateBuildUrl(project) }
64+
extension.host.convention(providerFactory.provider { selectedProvider.calculateHost(project) })
65+
extension.job.convention(providerFactory.provider { selectedProvider.calculateJob(project) })
66+
extension.buildNumber.convention(providerFactory.provider { selectedProvider.calculateBuildNumber(project) })
67+
extension.buildId.convention(providerFactory.provider { selectedProvider.calculateBuildId(project) })
68+
extension.buildUrl.convention(providerFactory.provider { selectedProvider.calculateBuildUrl(project) })
7469
}
7570

7671
ContinuousIntegrationInfoProvider findProvider(Project project) {

src/main/groovy/nebula/plugin/info/scm/ScmInfoExtension.groovy

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616

1717
package nebula.plugin.info.scm
1818

19-
class ScmInfoExtension {
20-
String origin
21-
String source
22-
String change
23-
String fullChange
24-
String branch
19+
import org.gradle.api.provider.Property
20+
21+
abstract class ScmInfoExtension {
22+
abstract Property<String> getOrigin()
23+
abstract Property<String> getSource()
24+
abstract Property<String> getChange()
25+
abstract Property<String> getFullChange()
26+
abstract Property<String> getBranch()
2527
}

src/main/groovy/nebula/plugin/info/scm/ScmInfoPlugin.groovy

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616

1717
package nebula.plugin.info.scm
1818

19-
import groovy.transform.CompileDynamic
2019
import nebula.plugin.info.InfoBrokerPlugin
2120
import nebula.plugin.info.InfoCollectorPlugin
2221
import org.gradle.api.Plugin
2322
import org.gradle.api.Project
24-
import org.gradle.api.internal.ConventionMapping
25-
import org.gradle.api.internal.IConventionAware
2623
import org.gradle.api.provider.ProviderFactory
2724

2825
import javax.inject.Inject
@@ -86,7 +83,7 @@ class ScmInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
8683
private void configureWithScmProvider(Project project) {
8784
ScmInfoExtension extension = project.extensions.create('scminfo', ScmInfoExtension)
8885
project.logger.debug("Project $project.name SCM information is being collected from provider ${selectedProvider.class.name}")
89-
configureExtMappingWithScmProvider(project, extension)
86+
configureExtensionFromProvider(project, extension)
9087
configureInfoBrokerManifest(project, extension)
9188
}
9289

@@ -97,28 +94,24 @@ class ScmInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
9794
private void configureWithoutScmProvider(Project project, ScmInfoExtension scmInfoRootProjectExtension) {
9895
ScmInfoExtension extension = project.extensions.create('scminfo', ScmInfoExtension)
9996
project.logger.debug("Project $project.name SCM information is being collected from rootProject extension")
100-
configureExtMappingWithoutScmProvider(project, extension, scmInfoRootProjectExtension)
97+
configureExtensionFromRootProject(extension, scmInfoRootProjectExtension)
10198
configureInfoBrokerManifest(project, extension)
10299
}
103100

104-
@CompileDynamic
105-
private void configureExtMappingWithScmProvider(Project project, ScmInfoExtension extension) {
106-
ConventionMapping extMapping = ((IConventionAware) extension).getConventionMapping()
107-
extMapping.origin = { selectedProvider.calculateOrigin(project) }
108-
extMapping.source = { selectedProvider.calculateSource(project)?.replace(File.separatorChar, '/' as char) }
109-
extMapping.change = { selectedProvider.calculateChange(project) }
110-
extMapping.fullChange = { selectedProvider.calculateFullChange(project) }
111-
extMapping.branch = { selectedProvider.calculateBranch(project) }
101+
private void configureExtensionFromProvider(Project project, ScmInfoExtension extension) {
102+
extension.origin.convention(providerFactory.provider { selectedProvider.calculateOrigin(project) })
103+
extension.source.convention(providerFactory.provider { selectedProvider.calculateSource(project)?.replace(File.separatorChar, '/' as char) })
104+
extension.change.convention(providerFactory.provider { selectedProvider.calculateChange(project) })
105+
extension.fullChange.convention(providerFactory.provider { selectedProvider.calculateFullChange(project) })
106+
extension.branch.convention(providerFactory.provider { selectedProvider.calculateBranch(project) })
112107
}
113108

114-
@CompileDynamic
115-
private void configureExtMappingWithoutScmProvider(Project project, ScmInfoExtension extension, ScmInfoExtension scmInfoRootProjectExtension) {
116-
ConventionMapping extMapping = ((IConventionAware) extension).getConventionMapping()
117-
extMapping.origin = { scmInfoRootProjectExtension.origin }
118-
extMapping.source = { scmInfoRootProjectExtension.source }
119-
extMapping.change = { scmInfoRootProjectExtension.change }
120-
extMapping.fullChange = { scmInfoRootProjectExtension.fullChange }
121-
extMapping.branch = { scmInfoRootProjectExtension.branch }
109+
private void configureExtensionFromRootProject(ScmInfoExtension extension, ScmInfoExtension scmInfoRootProjectExtension) {
110+
extension.origin.convention(scmInfoRootProjectExtension.origin)
111+
extension.source.convention(scmInfoRootProjectExtension.source)
112+
extension.change.convention(scmInfoRootProjectExtension.change)
113+
extension.fullChange.convention(scmInfoRootProjectExtension.fullChange)
114+
extension.branch.convention(scmInfoRootProjectExtension.branch)
122115
}
123116

124117
/**
@@ -128,11 +121,11 @@ class ScmInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
128121
*/
129122
private void configureInfoBrokerManifest(Project project, ScmInfoExtension scmInfoExtension ) {
130123
project.plugins.withType(InfoBrokerPlugin) { InfoBrokerPlugin manifestPlugin ->
131-
manifestPlugin.add(MODULE_SOURCE_PROPERTY) { scmInfoExtension.source }
132-
manifestPlugin.add(MODULE_ORIGIN_PROPERTY) { scmInfoExtension.origin }
133-
manifestPlugin.add(CHANGE_PROPERTY) { scmInfoExtension.change }
134-
manifestPlugin.add(FULL_CHANGE_PROPERTY) { scmInfoExtension.fullChange }
135-
manifestPlugin.add(BRANCH_PROPERTY) { scmInfoExtension.branch }
124+
manifestPlugin.add(MODULE_SOURCE_PROPERTY) { scmInfoExtension.source.getOrNull() }
125+
manifestPlugin.add(MODULE_ORIGIN_PROPERTY) { scmInfoExtension.origin.getOrNull() }
126+
manifestPlugin.add(CHANGE_PROPERTY) { scmInfoExtension.change.getOrNull() }
127+
manifestPlugin.add(FULL_CHANGE_PROPERTY) { scmInfoExtension.fullChange.getOrNull() }
128+
manifestPlugin.add(BRANCH_PROPERTY) { scmInfoExtension.branch.getOrNull() }
136129
}
137130
}
138131

src/test/groovy/nebula/plugin/info/scm/ScmInfoPluginProjectSpec.groovy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class ScmInfoPluginProjectSpec extends ProjectSpec {
3232

3333
def extension = project.extensions.getByType(ScmInfoExtension)
3434
extension != null
35-
extension.source.startsWith('/build/nebulatest')
36-
extension.origin.contains('plugin')
35+
extension.source.get().startsWith('/build/nebulatest')
36+
extension.origin.get().contains('plugin')
3737
}
3838

3939

@@ -56,12 +56,12 @@ class ScmInfoPluginProjectSpec extends ProjectSpec {
5656

5757
def extensionSubProjectA = subprojectA.extensions.getByType(ScmInfoExtension)
5858
extensionSubProjectA != null
59-
extensionSubProjectA.source.startsWith('/build/nebulatest')
60-
extensionSubProjectA.origin.contains('plugin')
59+
extensionSubProjectA.source.get().startsWith('/build/nebulatest')
60+
extensionSubProjectA.origin.get().contains('plugin')
6161

6262
def extensionSubProjectB = subprojectB.extensions.getByType(ScmInfoExtension)
6363
extensionSubProjectB != null
64-
extensionSubProjectB.source.startsWith('/build/nebulatest')
65-
extensionSubProjectB.origin.contains('plugin')
64+
extensionSubProjectB.source.get().startsWith('/build/nebulatest')
65+
extensionSubProjectB.origin.get().contains('plugin')
6666
}
6767
}

0 commit comments

Comments
 (0)