<NME> build.gradle
<BEF> // first of all the buildscript block, then the plugins block
buildscript {
    repositories {
        google()
    }
    dependencies {
        // these dependencies are used by gradle plugins, not by our projects

        // Android gradle plugin
        classpath 'com.android.tools.build:gradle:4.2.2'

        // un-mocking of portable Android classes
        classpath 'com.github.bjoernq:unmockplugin:0.7.9'

        // monitor our application method limit
        //noinspection GradleDependency - see https://github.com/cgeo/cgeo/issues/9208
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:1.0.3'
    }
}

plugins {
    // IDEA tasks for the project, see https://docs.gradle.org/current/userguide/idea_plugin.html
    id 'idea'

    // check for updates of gradle plugin dependencies
    id 'com.github.ben-manes.versions' version '0.42.0'
    id 'se.ascp.gradle.gradle-versions-filter' version "0.1.16"

    // use SpotBugs instead of FindBugs, see https://plugins.gradle.org/plugin/com.github.spotbugs
    id 'com.github.spotbugs' version '4.7.6'

    // adds gradle tasks 'tiTree' (print a task dependency graph), 'tiOrder' (display the execution queue),
    // 'tiJson' (export as a JSON file), see https://gitlab.com/barfuin/gradle-taskinfo
    // they need cmdline parameter, e.g. gradlew tiTree assembleBasicDebug
    id 'org.barfuin.gradle.taskinfo' version '1.4.0'
}

/*
 * Just run this script using "gradlew", and it will show you typical examples of how to use it.
 */

defaultTasks 'cgeoHelp'

tasks.register('cgeoHelp') {
    group = 'cgeo'
 * update check for all components in this gradle script
 */
apply plugin: 'com.github.ben-manes.versions'

buildscript {
    repositories {
        println ''
        println 'build:'
        println '    gradlew assembleDebug'
        println ''
        println 'install on connected device/emulator:'
        println '    gradlew installBasicDebug'
        println ''
        println 'run app on connected device/emulator:'
        println '    gradlew runBasicDebug'
        println ''
        println 'instrumentation tests on connected device/emulator:'
        println '    gradlew connectedBasicDebugAndroidTest'
        println ''
        println 'pure unit tests WITHOUT device'
        println '    gradlew testBasicDebugUnitTest'
        println ''
        println 'all unit tests (pure and instrumentation)'
        println '    gradlew testDebug'
        println ''
        println 'check project dependencies for updates:'
        println '    gradlew dependencies main:dependencies'
        println ''
        println 'check gradle dependencies for updates:'
        println '    gradlew dependencyUpdates'
        println ''
        println 'Use "gradlew tasks" for more available tasks.'
        println ''
        println ''
        println 'Available build types are: debug, nightly (requires an env var named NB), ' +
                'rc (requires an env var named RC), release.'
    }
}

// filter out non release version updates and other updates we cannot use
allprojects {
    configurations {
        all {
            resolutionStrategy {
                componentSelection {
                    all { ComponentSelection selection ->
                        if (['alpha', 'beta', 'rc', 'cr', 'm', 'pr'].any { qualifier -> selection.candidate.version.contains(qualifier)}) {
                            selection.reject('Release candidate')
                        }

                        // see https://assertj.github.io/doc/#assertj-core-android
                        // AssertJ Core 3.x is compatible with Android API Level 26+, except for soft assertions and assumptions.
                        // AssertJ Core 2.x is Android compatible with Android API Level 26+ and API Level < 26 except for Path assertions.
                        if (selection.candidate.group == 'org.assertj' && selection.candidate.module == 'assertj-core' && selection.candidate.version.substring(0,1).toInteger() > 2) {
                            selection.reject("assertj 3.x or higher requires Java 7 SE classes not available in Android")
                        }

                        // Apache Commons IO 2.6 fails in FileUtils.deleteDirectory()
                        // (uses java.nio.file.Path - which is first contained in Android API26)
                        if (selection.candidate.group == 'commons-io' && selection.candidate.module == 'commons-io' && selection.candidate.version.substring(0,1).toInteger()*10+selection.candidate.version.substring(2,3).toInteger() > 25) {
                            selection.reject("Apache Commons IO 2.6 calls methods not available in the Android runtime untli API26.")
                        }
                    }
                }
                // new versions of checkstyle use guava 27, which has troublesome dependencies: https://groups.google.com/forum/#!topic/guava-announce/Km82fZG68Sw
                force 'com.google.guava:guava:26.0-jre'

                // force this version because of conflict to our resolutionStrategy from lint-gradle
                // TODO check necessity after every gradle update (gradlew :main:lintBasicDebug)
                force 'com.android.tools.build:aapt2-proto:4.2.2-7147631'
            }
        }
    }
		CommonsIoVersion = '2.4'
		ButterKnifeVersion = '7.0.1'
	}
}
        google()
        // integrate as last one - for versions by commit ID
        maven {
            url 'https://jitpack.io'
        }
    }

    // disable warning of annotation processor about annotation types with no registered processor (like @NonNull)
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:-processing"
    }

    idea.module {
        downloadJavadoc = true
        downloadSources = true
    }
}

/*
 * Make sure that we use the source distribution when updating the wrapper from the command line.
 */
tasks.named('wrapper') {
    distributionType = Wrapper.DistributionType.ALL
}

/*
 * Configuration for dependencyUpdates, see https://github.com/ben-manes/gradle-versions-plugin
 */
tasks.named('dependencyUpdates') {
    checkForGradleUpdate = true
    revision = "release"
    gradleReleaseChannel = "current"
    outputFormatter = "plain, html"
}

<MSG> Download sources and javadoc in IDEA

<DFF> @@ -46,6 +46,7 @@ configure(cgeoHelp) {
  * update check for all components in this gradle script
  */
 apply plugin: 'com.github.ben-manes.versions'
+apply plugin: 'idea'
 
 buildscript {
     repositories {
@@ -119,4 +120,9 @@ subprojects {
 		CommonsIoVersion = '2.4'
 		ButterKnifeVersion = '7.0.1'
 	}
+
+    idea.module {
+        downloadJavadoc = true
+        downloadSources = true
+    }
 }

Download sources and javadoc in IDEA