Skip to content

Commit 0080b96

Browse files
committed
feat: Avoid undeclared reading of properties and variables
1 parent e2fa13f commit 0080b96

File tree

5 files changed

+30
-16
lines changed

5 files changed

+30
-16
lines changed

src/main/kotlin/BukkitGradlePlugin.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class BukkitGradlePlugin : Plugin<Project> {
4949
main.convention(name.map { "${project.group}.${StringUtils.toPascalCase(it)}" })
5050
version.convention(provider { project.version.toString() })
5151
apiVersion.convention(provider { StringUtils.parseApiVersion(bukkit.apiVersion) })
52-
url.convention(provider { findProperty("url")?.toString() })
52+
url.convention(provider { providers.gradleProperty("url").forUseAtConfigurationTime().orNull })
5353
}
5454
}
5555

src/main/kotlin/server/DevServerPlugin.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class DevServerPlugin : Plugin<Project> {
4343
bukkitGradleDir = File(project.buildDir, "bukkit-gradle")
4444
bukkitGradleDir.mkdirs()
4545

46-
val properties = ServerProperties(project.rootDir)
46+
val properties = ServerProperties(project.rootDir, project.providers)
4747
val coreVersion = project.provider { serverConfiguration.version ?: bukkit.apiVersion }
4848
val serverDir = project.layout.dir(coreVersion.map { File(properties.devServerDir, it) })
4949
val buildToolsDir = project.provider { properties.buildToolsDir }

src/main/kotlin/server/ServerProperties.kt

+17-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package ru.endlesscode.bukkitgradle.server
22

33
import org.gradle.api.InvalidUserDataException
4+
import org.gradle.api.provider.Provider
5+
import org.gradle.api.provider.ProviderFactory
46
import org.slf4j.LoggerFactory
57
import java.io.File
68
import java.util.*
79

8-
internal class ServerProperties(projectPath: File) {
10+
internal class ServerProperties(projectPath: File, private val providers: ProviderFactory) {
911

1012
val devServerDir: File
1113
get() = getDir(DEV_SERVER_DIR)
@@ -42,7 +44,7 @@ internal class ServerProperties(projectPath: File) {
4244
}
4345

4446
private fun setDefault(property: Property, defaultValue: String) {
45-
if (System.getenv(property.envVariable) == null) {
47+
if (!getEnvProvider(property.envVariable).isPresent) {
4648
properties.setProperty(property.name, defaultValue)
4749
}
4850
}
@@ -55,19 +57,23 @@ internal class ServerProperties(projectPath: File) {
5557

5658
private fun get(property: Property): String {
5759
val localProp = properties.getProperty(property.name)
58-
val globalEnv = System.getenv(property.envVariable)
59-
if (localProp == null && globalEnv == null) {
60-
logger.error(
61-
"""
60+
val globalEnv = getEnvProvider(property.envVariable).orNull
61+
return localProp ?: globalEnv ?: showError(property)
62+
}
63+
64+
private fun getEnvProvider(name: String): Provider<String> {
65+
return providers.environmentVariable(name).forUseAtConfigurationTime()
66+
}
67+
68+
private fun showError(property: Property): Nothing {
69+
logger.error(
70+
"""
6271
${property.description} not found. It can be fixed by two ways:
6372
1.Define variable "${property.name}" in the $NAME file
6473
2.Define ${property.envVariable} environment variable
6574
""".trimIndent()
66-
)
67-
throw InvalidUserDataException()
68-
}
69-
70-
return localProp ?: globalEnv
75+
)
76+
throw InvalidUserDataException()
7177
}
7278

7379
private data class Property(val name: String, val envVariable: String, val description: String)

src/main/kotlin/server/task/CreateIdeaJarRunConfiguration.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.gradle.api.file.RegularFile
77
import org.gradle.api.provider.ListProperty
88
import org.gradle.api.provider.Property
99
import org.gradle.api.provider.Provider
10+
import org.gradle.api.provider.ProviderFactory
1011
import org.gradle.api.tasks.Input
1112
import org.gradle.api.tasks.Internal
1213
import org.gradle.api.tasks.OutputFile
@@ -15,10 +16,13 @@ import org.gradle.kotlin.dsl.withGroovyBuilder
1516
import ru.endlesscode.bukkitgradle.TASKS_GROUP_BUKKIT
1617
import ru.endlesscode.bukkitgradle.server.util.Idea
1718
import java.io.File
19+
import javax.inject.Inject
1820

1921
/** Builds and writes to file run configuration in IDEA .xml format. */
2022
@Suppress("LeakingThis")
21-
public abstract class CreateIdeaJarRunConfiguration : DefaultTask() {
23+
public abstract class CreateIdeaJarRunConfiguration @Inject constructor(
24+
providers: ProviderFactory
25+
) : DefaultTask() {
2226

2327
@get:Input
2428
public abstract val configurationName: Property<String>
@@ -50,7 +54,7 @@ public abstract class CreateIdeaJarRunConfiguration : DefaultTask() {
5054
vmParameters.convention(emptyList())
5155
programParameters.convention(emptyList())
5256

53-
onlyIf { Idea.isActive() }
57+
onlyIf { Idea.isActive(providers) }
5458
}
5559

5660
@TaskAction

src/main/kotlin/server/util/Idea.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package ru.endlesscode.bukkitgradle.server.util
22

3+
import org.gradle.api.provider.ProviderFactory
4+
35
internal object Idea {
46

57
private const val IDEA_ACTIVE: String = "idea.active"
68

7-
fun isActive(): Boolean = System.getProperty(IDEA_ACTIVE) == "true"
9+
fun isActive(providers: ProviderFactory): Boolean {
10+
return providers.systemProperty(IDEA_ACTIVE).forUseAtConfigurationTime().orNull == "true"
11+
}
812

913
@JvmStatic
1014
fun fileNameSlug(name: String): String {

0 commit comments

Comments
 (0)