package gradle import texteditor.TextEditorBehaviour import feathereditor.* /** * Secondary tabs, consisting of : * build.gradle.kts (top-level) * settings.gradle * gradle.properties * build.gradle.kts for all subprojects * A tree containing gradle tasks for this project (as reported by `gradlew tasks`) * The leaves of the tree have a context-type of "GradleTask". */ class GradleGroupBehaviour( val folder: File ) : GroupBehaviour( "Gradle", Context(Context.FOLDER, folder) ), Savable, SaveListener { val tasksBehaviour = GradleTasksBehaviour( folder ) val metabuildFile = File( folder, "metabuild.feather" ) init { description = folder.path iconName = "gradle" if (metabuildFile.exists()) { secondaryBehaviours.add( FeatherTextEditor(metabuildFile) ) } // Look for the top-level build script addGradleFile(File(folder, "build.gradle")) addGradleFile(File(folder, "build.gradle.kts")) // Look for additional gradle-related files addGradleFile(File(folder, "settings.gradle")) addGradleFile(File(folder, "gradle.properties")) // Look for subproject build files. for (subFolder in folder.folders()) { addGradleFile(File(subFolder, "build.gradle")) addGradleFile(File(subFolder, "build.gradle.kts")) } secondaryBehaviours.add(tasksBehaviour) } override meth toolbar() : List { if ( metabuildFile.exists() ) { return listOf( Action( "Meta Build", this:>metaBuild ) ) } return listOf() } meth metaBuild() { $( ./metabuild.feather ).dir( folder ).runToTextBehaviour( "metabuild" ).openBehaviour() } /** * If [file] isn't found (or isn't a file), then do nothing. * Otherwise, it adds a TextTab to `secondaryTabPane`. */ meth addGradleFile(file: File) { if (file.isFile()) { val textEditor = TextEditorBehaviour( file ) if (file.name.startsWith("build.gradle")) { textEditor.title = file.parentFile.name } secondaryBehaviours.add(textEditor) } } /** * When any of the build scripts are saved, we also rebuild the [tasksTab]. */ override meth onSaved() { tasksBehaviour.refresh() } }