diff --git a/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy b/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy index 8c759c6c60..a89958c393 100644 --- a/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy +++ b/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy @@ -98,7 +98,6 @@ class FlutterExtension { return flutterVersionName } - } // This buildscript block supplies dependencies for this file's own import @@ -340,10 +339,18 @@ class FlutterPlugin implements Plugin { "packages", "flutter_tools", "gradle", "src", "main", "kotlin", "dependency_version_checker.gradle.kts") project.apply from: dependencyCheckerPluginPath - } catch (Exception ignored) { - project.logger.error("Warning: Flutter was unable to detect project Gradle, Java, " + - "AGP, and KGP versions. Skipping dependency version checking. Error was: " - + ignored) + } catch (Exception e) { + if (!project.usesUnsupportedDependencyVersions) { + // Possible bug in dependency checking code - warn and do not block build. + project.logger.error("Warning: Flutter was unable to detect project Gradle, Java, " + + "AGP, and KGP versions. Skipping dependency version checking. Error was: " + + e) + } + else { + // If usesUnsupportedDependencyVersions is set, the exception was thrown by us + // in the dependency version checker plugin so re-throw it here. + throw e + } } } diff --git a/packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts b/packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts index 08650a6573..720c63460b 100644 --- a/packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts +++ b/packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts @@ -40,6 +40,11 @@ class DependencyVersionChecker { private const val AGP_NAME: String = "Android Gradle Plugin" private const val KGP_NAME: String = "Kotlin" + // String constant that defines the name of the Gradle extra property that we set when + // detecting that the project is using versions outside of Flutter's support range. + // https://docs.gradle.org/current/kotlin-dsl/gradle/org.gradle.api/-project/index.html#-2107180640%2FProperties%2F-1867656071. + private const val OUT_OF_SUPPORT_RANGE_PROPERTY = "usesUnsupportedDependencyVersions" + // The following messages represent best effort guesses at where a Flutter developer should // look to upgrade a dependency that is below the corresponding threshold. Developers can // change some of these locations, so they are not guaranteed to be accurate. @@ -104,6 +109,7 @@ class DependencyVersionChecker { * we treat it as within the range for the purpose of this check. */ fun checkDependencyVersions(project: Project) { + project.extra.set(OUT_OF_SUPPORT_RANGE_PROPERTY, false) var agpVersion: Version? var kgpVersion: Version? @@ -235,7 +241,8 @@ class DependencyVersionChecker { errorGradleVersion.toString(), getPotentialGradleFix(project.getRootDir().getPath()) ) - throw GradleException(errorMessage) + project.extra.set(OUT_OF_SUPPORT_RANGE_PROPERTY, true) + throw DependencyValidationException(errorMessage) } else if (version < warnGradleVersion) { val warnMessage: String = getWarnMessage( @@ -260,7 +267,8 @@ class DependencyVersionChecker { errorJavaVersion.toString(), POTENTIAL_JAVA_FIX ) - throw GradleException(errorMessage) + project.extra.set(OUT_OF_SUPPORT_RANGE_PROPERTY, true) + throw DependencyValidationException(errorMessage) } else if (version < warnJavaVersion) { val warnMessage: String = getWarnMessage( @@ -285,7 +293,8 @@ class DependencyVersionChecker { errorAGPVersion.toString(), getPotentialAGPFix(project.getRootDir().getPath()) ) - throw GradleException(errorMessage) + project.extra.set(OUT_OF_SUPPORT_RANGE_PROPERTY, true) + throw DependencyValidationException(errorMessage) } else if (version < warnAGPVersion) { val warnMessage: String = getWarnMessage( @@ -310,7 +319,8 @@ class DependencyVersionChecker { errorKGPVersion.toString(), getPotentialKGPFix(project.getRootDir().getPath()) ) - throw GradleException(errorMessage) + project.extra.set(OUT_OF_SUPPORT_RANGE_PROPERTY, true) + throw DependencyValidationException(errorMessage) } else if (version < warnKGPVersion) { val warnMessage: String = getWarnMessage( @@ -359,3 +369,9 @@ class Version(val major: Int, val minor: Int, val patch: Int) : Comparable