diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradleProperties.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradleProperties.kt index 2b83d67e1f0c..b675e21cefd6 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradleProperties.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradleProperties.kt @@ -1,13 +1,15 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gradle.properties +import org.gradle.api.logging.LogLevel import org.jetbrains.plugins.gradle.properties.models.Property interface GradleProperties { val javaHomeProperty: Property? - val gradleLoggingLevel: Property? + val logLevel: Property? + fun getGradleLogLevel(): LogLevel? val parallel: Property? val isolatedProjects: Property? diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesFile.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesFile.kt index b66188bb118a..e604ca135d41 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesFile.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesFile.kt @@ -78,7 +78,7 @@ object GradlePropertiesFile { val properties = GradleUtil.readGradleProperties(propertiesPath) ?: return null return GradlePropertiesImpl( javaHomeProperty = properties.getStringProperty(GRADLE_JAVA_HOME_PROPERTY, propertiesPath), - gradleLoggingLevel = properties.getStringProperty(GRADLE_LOGGING_LEVEL_PROPERTY, propertiesPath), + logLevel = properties.getStringProperty(GRADLE_LOGGING_LEVEL_PROPERTY, propertiesPath), parallel = properties.getBooleanProperty(GRADLE_PARALLEL_PROPERTY, propertiesPath), isolatedProjects = properties.getBooleanProperty(GRADLE_ISOLATED_PROJECTS_PROPERTY, propertiesPath), jvmOptions = properties.getStringProperty(GRADLE_JVM_OPTIONS_PROPERTY, propertiesPath) @@ -88,7 +88,7 @@ object GradlePropertiesFile { private fun mergeGradleProperties(most: GradleProperties, other: GradleProperties): GradleProperties { return GradlePropertiesImpl( javaHomeProperty = most.javaHomeProperty ?: other.javaHomeProperty, - gradleLoggingLevel = most.gradleLoggingLevel ?: other.gradleLoggingLevel, + logLevel = most.logLevel ?: other.logLevel, parallel = most.parallel ?: other.parallel, isolatedProjects = most.isolatedProjects ?: other.isolatedProjects, jvmOptions = most.jvmOptions ?: other.jvmOptions @@ -97,7 +97,7 @@ object GradlePropertiesFile { private val EMPTY_GRADLE_PROPERTIES = GradlePropertiesImpl( javaHomeProperty = null, - gradleLoggingLevel = null, + logLevel = null, parallel = null, isolatedProjects = null, jvmOptions = null, diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesImpl.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesImpl.kt index 7d039463fbfd..888562f47077 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesImpl.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/properties/GradlePropertiesImpl.kt @@ -1,12 +1,33 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gradle.properties +import com.intellij.openapi.diagnostic.logger +import org.gradle.api.logging.LogLevel import org.jetbrains.plugins.gradle.properties.models.Property +import java.util.Locale + +private val LOG = logger() data class GradlePropertiesImpl( override val javaHomeProperty: Property?, - override val gradleLoggingLevel: Property?, + override val logLevel: Property?, override val parallel: Property?, override val isolatedProjects: Property?, - override val jvmOptions: Property? -) : GradleProperties \ No newline at end of file + override val jvmOptions: Property?, +) : GradleProperties { + + override fun getGradleLogLevel(): LogLevel? { + if (logLevel == null) { + return null + } + var value = logLevel.value + var name = value.uppercase(Locale.ROOT) + try { + return LogLevel.valueOf(name) + } + catch (_: IllegalArgumentException) { + LOG.warn("The Gradle property 'org.gradle.logging.level=$value' is invalid. It must be one of quiet, warn, lifecycle, info, or debug") + return null + } + } +} \ No newline at end of file diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java index 670bb8dde842..f3a88a2f8db8 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleExecutionHelper.java @@ -25,14 +25,12 @@ import com.intellij.util.lang.JavaVersion; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.context.Scope; -import org.gradle.api.logging.LogLevel; import org.gradle.tooling.*; import org.gradle.tooling.events.OperationType; import org.gradle.tooling.model.build.BuildEnvironment; import org.gradle.util.GradleVersion; import org.jetbrains.annotations.*; import org.jetbrains.plugins.gradle.jvmcompat.GradleJvmSupportMatrix; -import org.jetbrains.plugins.gradle.properties.GradleProperties; import org.jetbrains.plugins.gradle.properties.GradlePropertiesFile; import org.jetbrains.plugins.gradle.service.execution.cmd.GradleCommandLineOptionsProvider; import org.jetbrains.plugins.gradle.service.project.GradleExecutionHelperExtension; @@ -323,7 +321,7 @@ public final class GradleExecutionHelper { var buildRoot = getBuildRoot(buildEnvironment); if (buildRoot != null) { var properties = GradlePropertiesFile.getProperties(settings.getServiceDirectory(), buildRoot); - var logLevel = getGradleLoggingLevel(properties); + var logLevel = properties.getGradleLogLevel(); if (logLevel != null) { switch (logLevel) { case DEBUG -> settings.withArgument("-d"); @@ -345,22 +343,6 @@ public final class GradleExecutionHelper { } } - private static @Nullable LogLevel getGradleLoggingLevel(@NotNull GradleProperties properties) { - var property = properties.getGradleLoggingLevel(); - if (property == null) { - return null; - } - var value = property.getValue(); - var name = value.toUpperCase(Locale.ROOT); - try { - return LogLevel.valueOf(name); - } - catch (IllegalArgumentException e) { - LOG.warn("org.gradle.logging.level must be one of quiet, warn, lifecycle, info, or debug"); - return null; - } - } - private static @Nullable Path getWorkingRoot(@Nullable BuildEnvironment buildEnvironment) { if (buildEnvironment == null) { return null; diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/properties/GradlePropertiesFileTest.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/properties/GradlePropertiesFileTest.kt index 8d2502c7f1da..b102e04ae14b 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/properties/GradlePropertiesFileTest.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/properties/GradlePropertiesFileTest.kt @@ -1,6 +1,7 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gradle.properties +import org.gradle.api.logging.LogLevel import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test @@ -11,7 +12,7 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { createGradlePropertiesFile {} assertGradlePropertiesFile { Assertions.assertNull(javaHomeProperty) - Assertions.assertNull(gradleLoggingLevel) + Assertions.assertNull(logLevel) Assertions.assertNull(parallel) Assertions.assertNull(isolatedProjects) Assertions.assertNull(jvmOptions) @@ -26,7 +27,7 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { } assertGradlePropertiesFile { Assertions.assertNull(javaHomeProperty) - Assertions.assertNull(gradleLoggingLevel) + Assertions.assertNull(logLevel) Assertions.assertNull(parallel) Assertions.assertNull(isolatedProjects) Assertions.assertNull(jvmOptions) @@ -45,13 +46,14 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { assertGradlePropertiesFile { Assertions.assertEquals("javaHome", javaHomeProperty?.value) Assertions.assertEquals(projectPropertiesPath, javaHomeProperty?.location) - Assertions.assertEquals("info", gradleLoggingLevel?.value) - Assertions.assertEquals(projectPropertiesPath, gradleLoggingLevel?.location) + Assertions.assertEquals("info", logLevel?.value) + Assertions.assertEquals(LogLevel.INFO, getGradleLogLevel()) + Assertions.assertEquals(projectPropertiesPath, logLevel?.location) Assertions.assertEquals(true, parallel?.value) Assertions.assertEquals(projectPropertiesPath, parallel?.location) Assertions.assertEquals(true, isolatedProjects?.value) Assertions.assertEquals(projectPropertiesPath, isolatedProjects?.location) - Assertions.assertEquals( "-Xmx20G", jvmOptions?.value) + Assertions.assertEquals("-Xmx20G", jvmOptions?.value) Assertions.assertEquals(projectPropertiesPath, jvmOptions?.location) } } @@ -61,7 +63,7 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { createGradlePropertiesFile { setProperty("another.property.1", "value1") setProperty(GRADLE_JAVA_HOME_PROPERTY, "value2") - setProperty(GRADLE_LOGGING_LEVEL_PROPERTY, "value3") + setProperty(GRADLE_LOGGING_LEVEL_PROPERTY, "debug") setProperty(GRADLE_PARALLEL_PROPERTY, "true") setProperty(GRADLE_ISOLATED_PROJECTS_PROPERTY, "true") setProperty(GRADLE_JVM_OPTIONS_PROPERTY, "-Xmx20G") @@ -70,8 +72,9 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { assertGradlePropertiesFile { Assertions.assertEquals("value2", javaHomeProperty?.value) Assertions.assertEquals(projectPropertiesPath, javaHomeProperty?.location) - Assertions.assertEquals("value3", gradleLoggingLevel?.value) - Assertions.assertEquals(projectPropertiesPath, gradleLoggingLevel?.location) + Assertions.assertEquals("debug", logLevel?.value) + Assertions.assertEquals(LogLevel.DEBUG, getGradleLogLevel()) + Assertions.assertEquals(projectPropertiesPath, logLevel?.location) Assertions.assertEquals(true, parallel?.value) Assertions.assertEquals(projectPropertiesPath, parallel?.location) Assertions.assertEquals(true, isolatedProjects?.value) @@ -80,4 +83,17 @@ class GradlePropertiesFileTest : GradlePropertiesFileTestCase() { Assertions.assertEquals(projectPropertiesPath, jvmOptions?.location) } } + + @Test + fun testInvalidLogLevelInProjectGradlePropertiesFile() { + createGradlePropertiesFile { + setProperty(GRADLE_LOGGING_LEVEL_PROPERTY, "invalid") + } + assertGradlePropertiesFile { + Assertions.assertEquals("invalid", logLevel?.value) + Assertions.assertEquals(projectPropertiesPath, logLevel?.location) + + Assertions.assertNull(getGradleLogLevel()) + } + } } \ No newline at end of file