From 8a623a2c7c0eadeecbc65796a29067475ac80e85 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 3 Sep 2026 14:45:27 +0800 Subject: [PATCH] Call gradleError to throw GradleException --- .../gradle/plugins/shadow/ShadowApplicationPlugin.kt | 4 ++-- .../jengelman/gradle/plugins/shadow/ShadowPlugin.kt | 4 ++-- .../gradle/plugins/shadow/internal/GradleCompat.kt | 5 +++++ .../gradle/plugins/shadow/internal/R8Minimizer.kt | 5 ++--- .../gradle/plugins/shadow/internal/RelocatorRemapper.kt | 3 +-- .../jengelman/gradle/plugins/shadow/internal/Zip.kt | 3 +-- .../gradle/plugins/shadow/tasks/ShadowCopyAction.kt | 8 ++++---- .../jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt | 4 ++-- .../transformers/DeduplicatingResourceTransformer.kt | 4 ++-- .../shadow/transformers/PropertiesFileTransformer.kt | 4 ++-- 10 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt index 3221fe188..2bb9ef578 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt @@ -4,11 +4,11 @@ import com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin.Companion.SHA import com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin.Companion.shadow import com.github.jengelman.gradle.plugins.shadow.internal.applicationExtension import com.github.jengelman.gradle.plugins.shadow.internal.distributions +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.internal.javaPluginExtension import com.github.jengelman.gradle.plugins.shadow.internal.javaToolchainService import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar import java.io.IOException -import org.gradle.api.GradleException import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Plugin import org.gradle.api.Project @@ -95,7 +95,7 @@ public abstract class ShadowApplicationPlugin : Plugin { !destinationDir.resolve("bin").isDirectory || !destinationDir.resolve(executableDir.get()).isDirectory ) { - throw GradleException( + gradleError( "The specified installation directory '$destinationDir' is neither empty nor does it contain an installation for '${applicationName.get()}'.\n" + "If you really want to install to this directory, delete it and run the install task again.\n" + "Alternatively, choose a different installation directory." diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPlugin.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPlugin.kt index c3ff83d99..817478bb2 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPlugin.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowPlugin.kt @@ -3,8 +3,8 @@ package com.github.jengelman.gradle.plugins.shadow import com.github.jengelman.gradle.plugins.shadow.internal.KOTLIN_MULTIPLATFORM_PLUGIN_ID import com.github.jengelman.gradle.plugins.shadow.internal.addBuildScanCustomValues import com.github.jengelman.gradle.plugins.shadow.internal.findOptionalProperty +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.legacy.LegacyShadowPlugin -import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project @@ -19,7 +19,7 @@ public abstract class ShadowPlugin : Plugin { withId("org.gradle.application") { apply(ShadowApplicationPlugin::class.java) } withId(KOTLIN_MULTIPLATFORM_PLUGIN_ID) { apply(ShadowKmpPlugin::class.java) } withId("com.android.base") { - throw GradleException( + gradleError( "Shadow does not support being used with AGP. You may need the Android Fused Library plugin instead. " + "See https://developer.android.com/build/publish-library/fused-library" ) diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/GradleCompat.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/GradleCompat.kt index 00d82cc6c..a565aa0da 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/GradleCompat.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/GradleCompat.kt @@ -3,6 +3,7 @@ package com.github.jengelman.gradle.plugins.shadow.internal import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.gradle.develocity.agent.gradle.DevelocityConfiguration import java.io.InputStream +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.distribution.DistributionContainer @@ -21,6 +22,10 @@ import org.gradle.api.provider.SetProperty import org.gradle.api.tasks.SourceSetContainer import org.gradle.jvm.toolchain.JavaToolchainService +@Suppress("NOTHING_TO_INLINE") +internal inline fun gradleError(message: String, cause: Throwable? = null): Nothing = + throw GradleException(message, cause) + /** Return `runtimeClasspath` or `runtime` configuration. */ internal inline val Project.runtimeConfiguration: Configuration get() = diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/R8Minimizer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/R8Minimizer.kt index 27b91fd50..69f9115e7 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/R8Minimizer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/R8Minimizer.kt @@ -6,7 +6,6 @@ import java.io.File import java.nio.file.StandardCopyOption.REPLACE_EXISTING import java.util.zip.ZipEntry import kotlin.io.path.moveTo -import org.gradle.api.GradleException import org.gradle.api.file.FileCollection import org.gradle.api.logging.Logger import org.gradle.api.provider.Provider @@ -41,7 +40,7 @@ internal fun minimizeWithR8( relocators: Iterable, ) { if (r8Classpath.isEmpty) { - throw GradleException( + gradleError( "R8 minimization requires a non-empty R8 classpath. Apply the Shadow plugin or configure the shadowR8 configuration." ) } @@ -54,7 +53,7 @@ internal fun minimizeWithR8( val javaHome = launcher?.metadata?.installationPath?.asFile?.absolutePath ?: System.getProperty("java.home") if (javaHome.isNullOrBlank()) { - throw GradleException("R8 minimization requires the java.home system property.") + gradleError("R8 minimization requires the java.home system property.") } val r8Args = r8Spec.args.get() diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt index c343e1943..0c33dbb28 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt @@ -1,7 +1,6 @@ package com.github.jengelman.gradle.plugins.shadow.internal import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator -import org.gradle.api.GradleException import org.gradle.api.file.FileCopyDetails import org.vafer.jdeb.shaded.objectweb.asm.ClassReader import org.vafer.jdeb.shaded.objectweb.asm.ClassWriter @@ -33,7 +32,7 @@ internal fun FileCopyDetails.remapClass(relocators: Set): ByteArray = // If we didn't need to change anything, keep the original bytes as-is. if (modified) cw.toByteArray() else bytes } catch (t: Throwable) { - throw GradleException("Error in ASM processing class $path", t) + gradleError("Error in ASM processing class $path", t) } } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Zip.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Zip.kt index 5e08ad60a..a9f483e17 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Zip.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Zip.kt @@ -8,7 +8,6 @@ import org.apache.tools.zip.UnixStat import org.apache.tools.zip.Zip64Mode import org.apache.tools.zip.ZipEntry import org.apache.tools.zip.ZipOutputStream -import org.gradle.api.GradleException import org.gradle.api.tasks.bundling.ZipEntryCompression @JvmInline @@ -81,7 +80,7 @@ internal inline fun ZipOutputStream.writeEntry( write: ZipOutputStream.() -> Unit = {}, ) { if (name.split('/', '\\').any { it == ".." }) { - throw GradleException("Malicious ZIP entry containing path traversal sequence: $name") + gradleError("Malicious ZIP entry containing path traversal sequence: $name") } val entry = diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt index c79e626ca..305287327 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt @@ -6,6 +6,7 @@ package com.github.jengelman.gradle.plugins.shadow.tasks import com.github.jengelman.gradle.plugins.shadow.internal.UnixMode import com.github.jengelman.gradle.plugins.shadow.internal.entries +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.internal.inputStream import com.github.jengelman.gradle.plugins.shadow.internal.parentDirectoryEntries import com.github.jengelman.gradle.plugins.shadow.internal.remapClass @@ -17,7 +18,6 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContex import java.io.File import org.apache.tools.zip.Zip64RequiredException import org.apache.tools.zip.ZipOutputStream -import org.gradle.api.GradleException import org.gradle.api.file.FileCopyDetails import org.gradle.api.internal.file.CopyActionProcessingStreamAction import org.gradle.api.internal.file.copy.CopyAction @@ -59,7 +59,7 @@ internal constructor( try { zosProvider(zipFile) } catch (e: Exception) { - throw GradleException("Could not create ZIP '$zipFile'.", e) + gradleError("Could not create ZIP '$zipFile'.", e) }, transformers = transformers, relocators = relocators, @@ -143,7 +143,7 @@ internal constructor( duplicates.entries.joinToString(separator = "\n") { "${it.key} (${it.value} times)" } val message = "Duplicate entries found in the shadowed JAR: \n$dupEntries" if (failOnDuplicateEntries) { - throw GradleException(message) + gradleError(message) } else { logger.warn(message) } @@ -164,7 +164,7 @@ internal constructor( visitFile(details) } } catch (e: Exception) { - throw GradleException("Could not add $details to ZIP '$zipFile'.", e) + gradleError("Could not add $details to ZIP '$zipFile'.", e) } } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt index 914b674d5..5a4348690 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt @@ -12,6 +12,7 @@ import com.github.jengelman.gradle.plugins.shadow.internal.createZipOutputStream import com.github.jengelman.gradle.plugins.shadow.internal.fileCollection import com.github.jengelman.gradle.plugins.shadow.internal.findUnusedClasses import com.github.jengelman.gradle.plugins.shadow.internal.getApiJars +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.internal.javaPluginExtension import com.github.jengelman.gradle.plugins.shadow.internal.javaToolchainService import com.github.jengelman.gradle.plugins.shadow.internal.mainClassAttributeKey @@ -39,7 +40,6 @@ import java.util.zip.ZipException import javax.inject.Inject import kotlin.reflect.full.hasAnnotation import org.gradle.api.Action -import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.file.ArchiveOperations @@ -649,7 +649,7 @@ public abstract class ShadowJar : Jar() { or use Android Fused Library plugin instead. See https://developer.android.com/build/publish-library/fused-library. """ .trimIndent() - throw GradleException(message) + gradleError(message) } else -> { logger.debug("Including dependency: {}", file) diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/DeduplicatingResourceTransformer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/DeduplicatingResourceTransformer.kt index 5f3369169..e843985d6 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/DeduplicatingResourceTransformer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/DeduplicatingResourceTransformer.kt @@ -1,6 +1,7 @@ package com.github.jengelman.gradle.plugins.shadow.transformers import com.github.jengelman.gradle.plugins.shadow.internal.checkDupStrategy +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.internal.inputStream import com.github.jengelman.gradle.plugins.shadow.tasks.FindResourceInClasspath import java.io.File @@ -9,7 +10,6 @@ import java.security.MessageDigest import java.util.HexFormat import javax.inject.Inject import org.apache.tools.zip.ZipOutputStream -import org.gradle.api.GradleException import org.gradle.api.file.FileTreeElement import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.Internal @@ -99,7 +99,7 @@ public open class DeduplicatingResourceTransformer( } } } - throw GradleException(message) + gradleError(message) } } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/PropertiesFileTransformer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/PropertiesFileTransformer.kt index 53e2a82c3..41f625311 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/PropertiesFileTransformer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/PropertiesFileTransformer.kt @@ -2,6 +2,7 @@ package com.github.jengelman.gradle.plugins.shadow.transformers import com.github.jengelman.gradle.plugins.shadow.internal.ReproducibleProperties import com.github.jengelman.gradle.plugins.shadow.internal.checkDupStrategy +import com.github.jengelman.gradle.plugins.shadow.internal.gradleError import com.github.jengelman.gradle.plugins.shadow.internal.mapProperty import com.github.jengelman.gradle.plugins.shadow.internal.property import com.github.jengelman.gradle.plugins.shadow.internal.setProperty @@ -11,7 +12,6 @@ import java.nio.charset.Charset import java.util.Properties import javax.inject.Inject import org.apache.tools.zip.ZipOutputStream -import org.gradle.api.GradleException import org.gradle.api.file.FileTreeElement import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.MapProperty @@ -219,7 +219,7 @@ constructor(final override val objectFactory: ObjectFactory) : ResourceTransform .joinToString(separator = "\n * ", prefix = "\n * ") } .joinToString(separator = "\n * ", prefix = "\n * ") - throw GradleException(message) + gradleError(message) } propertiesEntries.forEach { (path, props) ->