/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ allprojects { afterEvaluate { configureJavaInstrumentation() } } // Hide window of instrumentation tasks val headlessOldValue: String? = System.setProperty("java.awt.headless", "true") logger.info("Setting java.awt.headless=true, old value was $headlessOldValue") /** * Configures instrumentation for all JavaCompile tasks in project */ fun Project.configureJavaInstrumentation() { if (plugins.hasPlugin("org.gradle.java")) { val javaInstrumentator by configurations.creating dependencies { javaInstrumentator(intellijDep()) { includeJars("javac2", "jdom", "asm-all", rootProject = rootProject) } } listOf(mainSourceSet, testSourceSet).forEach { sourceSet -> tasks.named(sourceSet.compileJavaTaskName) javaCompile@ { doLast { instrumentClasses(javaInstrumentator.asPath, this@javaCompile, sourceSet) } } } } } fun instrumentClasses( instrumentatorClasspath: String, javaCompile: JavaCompile, sourceSet: SourceSet ) { javaCompile.ant.withGroovyBuilder { "taskdef"( "name" to "instrumentIdeaExtensions", "classpath" to instrumentatorClasspath, "loaderref" to "java2.loader", "classname" to "com.intellij.ant.InstrumentIdeaExtensions" ) } val javaSourceDirectories = sourceSet.allJava.sourceDirectories.filter { it.exists() } javaCompile.ant.withGroovyBuilder { javaSourceDirectories.forEach { directory -> "instrumentIdeaExtensions"( "srcdir" to directory, "destdir" to javaCompile.destinationDir, "classpath" to javaCompile.classpath.asPath, "includeantruntime" to false, "instrumentNotNull" to true ) } } }