From 72b383971dd8440bc5c462a565e0dd2027585bd6 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Thu, 31 Aug 2023 15:52:27 +0530 Subject: [PATCH] fix(gradle-plugin): use AGP APIs to configure logsender on debuggable variants --- app/build.gradle.kts | 40 +-- build-info/build.gradle.kts | 1 + .../androidide/buildinfo/BuildInfo.java.in | 3 + gradle-plugin/build.gradle.kts | 35 ++- .../gradle/AndroidIDEGradlePlugin.kt | 8 +- .../gradle/AndroidIDEInitScriptPlugin.kt | 98 +++++++ .../androidide/gradle/LogSenderPlugin.kt | 65 ++--- .../com/itsaky/androidide/gradle/common.kt | 15 +- .../com/itsaky/androidide/gradle/utils.kt | 22 ++ .../gradle/AndroidIDEInitScriptPluginTest.kt | 54 ++++ .../com/itsaky/androidide/gradle/utils.kt | 62 +++++ .../test/resources/sample-project/.gitignore | 83 ++++++ .../resources/sample-project/app/.gitignore | 2 + .../sample-project/app/build.gradle.kts.in | 49 ++++ .../sample-project/app/proguard-rules.pro | 21 ++ .../app/src/main/AndroidManifest.xml | 5 + .../app/src/main/res/values/strings.xml | 20 ++ .../resources/sample-project/build.gradle.kts | 9 - .../sample-project/gradle.properties | 23 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 61608 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../src/test/resources/sample-project/gradlew | 244 ++++++++++++++++++ .../test/resources/sample-project/gradlew.bat | 92 +++++++ .../sample-project/settings.gradle.kts | 17 ++ gradle/libs.versions.toml | 5 +- .../itsaky/androidide/utils/FileProvider.kt | 18 +- tests/.gitignore | 1 + tests/test-home/.androidide/.gitignore | 3 +- .../.androidide/init/androidide.init.gradle | 3 - tests/test-home/.androidide/init/init.gradle | 11 - tests/test-home/.androidide/init/model.jar | Bin 65261 -> 0 bytes tests/test-home/.androidide/init/plugin.jar | Bin 3018 -> 0 bytes 32 files changed, 922 insertions(+), 93 deletions(-) create mode 100644 gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPlugin.kt create mode 100644 gradle-plugin/src/main/java/com/itsaky/androidide/gradle/utils.kt create mode 100644 gradle-plugin/src/test/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPluginTest.kt create mode 100644 gradle-plugin/src/test/java/com/itsaky/androidide/gradle/utils.kt create mode 100755 gradle-plugin/src/test/resources/sample-project/.gitignore create mode 100755 gradle-plugin/src/test/resources/sample-project/app/.gitignore create mode 100755 gradle-plugin/src/test/resources/sample-project/app/build.gradle.kts.in create mode 100755 gradle-plugin/src/test/resources/sample-project/app/proguard-rules.pro create mode 100755 gradle-plugin/src/test/resources/sample-project/app/src/main/AndroidManifest.xml create mode 100644 gradle-plugin/src/test/resources/sample-project/app/src/main/res/values/strings.xml delete mode 100644 gradle-plugin/src/test/resources/sample-project/build.gradle.kts create mode 100755 gradle-plugin/src/test/resources/sample-project/gradle.properties create mode 100755 gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.jar create mode 100755 gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle-plugin/src/test/resources/sample-project/gradlew create mode 100755 gradle-plugin/src/test/resources/sample-project/gradlew.bat create mode 100755 gradle-plugin/src/test/resources/sample-project/settings.gradle.kts create mode 100644 tests/.gitignore delete mode 100644 tests/test-home/.androidide/init/androidide.init.gradle delete mode 100644 tests/test-home/.androidide/init/init.gradle delete mode 100644 tests/test-home/.androidide/init/model.jar delete mode 100644 tests/test-home/.androidide/init/plugin.jar diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e720b81a5..ecf84f078 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -222,38 +222,22 @@ tasks.create("generateInitScript") { it.write( """ initscript { - repositories { - maven { - mavenCentral() - - // Add snapshots repository for AndroidIDE CI builds - url "https://s01.oss.sonatype.org/content/repositories/snapshots/" + repositories { + maven { + mavenCentral() + google() + + // Add snapshots repository for AndroidIDE CI builds + url "https://s01.oss.sonatype.org/content/repositories/snapshots/" + } } - } - - dependencies { - classpath '${BuildConfig.packageName}:gradle-plugin:${downloadVersion}' - } - } - - gradle.settingsEvaluated { settings -> - settings.dependencyResolutionManagement.repositories { - // For release builds - mavenCentral() - - // For AndroidIDE CI builds - maven { url "https://s01.oss.sonatype.org/content/repositories/snapshots/" } - } - } - - gradle.projectsLoaded { - rootProject.subprojects.forEach {sub -> - sub.afterEvaluate { - sub.apply plugin: com.itsaky.androidide.gradle.AndroidIDEGradlePlugin + + dependencies { + classpath '${BuildConfig.packageName}:gradle-plugin:${downloadVersion}' } - } } + apply plugin: com.itsaky.androidide.gradle.AndroidIDEInitScriptPlugin """ .trimIndent() ) diff --git a/build-info/build.gradle.kts b/build-info/build.gradle.kts index 2a988e13b..e80a35eaa 100644 --- a/build-info/build.gradle.kts +++ b/build-info/build.gradle.kts @@ -39,6 +39,7 @@ tasks.create("generateBuildInfo") { comment = "//", candidates = arrayOf( + "PACKAGE_NAME" to BuildConfig.packageName, "MVN_GROUP_ID" to BuildConfig.packageName, "VERSION_NAME" to rootProject.version.toString(), "VERSION_NAME_SIMPLE" to rootProject.simpleVersionName, diff --git a/build-info/src/main/java/com/itsaky/androidide/buildinfo/BuildInfo.java.in b/build-info/src/main/java/com/itsaky/androidide/buildinfo/BuildInfo.java.in index 4b592c7f6..b0aaa54aa 100644 --- a/build-info/src/main/java/com/itsaky/androidide/buildinfo/BuildInfo.java.in +++ b/build-info/src/main/java/com/itsaky/androidide/buildinfo/BuildInfo.java.in @@ -19,6 +19,9 @@ package com.itsaky.androidide.buildinfo; public class BuildInfo { + // ---------- Basic info ----------------- + public static final String PACKAGE_NAME = "@@PACKAGE_NAME@@"; + // ---------- Version info ---------------- public static final String MVN_GROUP_ID = "@@MVN_GROUP_ID@@"; diff --git a/gradle-plugin/build.gradle.kts b/gradle-plugin/build.gradle.kts index 97eb439af..db99f6544 100644 --- a/gradle-plugin/build.gradle.kts +++ b/gradle-plugin/build.gradle.kts @@ -23,9 +23,24 @@ plugins { description = "Gradle Plugin for projects that are built with AndroidIDE" +tasks.named("test") { + useJUnitPlatform() +} + +tasks.withType { + dependsOn("publishToMavenLocal") +} + dependencies { implementation(projects.buildInfo) - implementation(libs.tooling.agp) + implementation(libs.tooling.agpApi) + + testImplementation(gradleTestKit()) + testImplementation(libs.tests.junit.jupiter) + testImplementation(libs.tests.google.truth) + testImplementation(projects.shared) + + testRuntimeOnly(libs.tests.junit.platformLauncher) } gradlePlugin { @@ -33,12 +48,28 @@ gradlePlugin { vcsUrl.set(ProjectConfig.REPO_URL) plugins { + create("initScriptPlugin") { + id = "${BuildConfig.packageName}.init.gradle" + implementationClass = "${BuildConfig.packageName}.gradle.AndroidIDEInitScriptPlugin" + displayName = "AndroidIDE Init Script Gradle Plugin" + description = "Init script Gradle plugin for projects that are built with AndroidIDE" + tags.set(setOf("androidide", "init")) + } + create("gradlePlugin") { id = "${BuildConfig.packageName}.gradle" implementationClass = "${BuildConfig.packageName}.gradle.AndroidIDEGradlePlugin" displayName = "AndroidIDE Gradle Plugin" description = "Gradle plugin for projects that are built with AndroidIDE" - tags.set(setOf("androidide")) + tags.set(setOf("androidide", "gradle")) + } + + create("logsenderPlugin") { + id = "${BuildConfig.packageName}.logsender.gradle" + implementationClass = "${BuildConfig.packageName}.gradle.LogSenderPlugin" + displayName = "AndroidIDE LogSender Gradle Plugin" + description = "Gradle plugin for applying LogSender-specific configuration to projects that are built with AndroidIDE" + tags.set(setOf("androidide", "logsender")) } } } diff --git a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEGradlePlugin.kt b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEGradlePlugin.kt index 8962c047a..b7730e4db 100644 --- a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEGradlePlugin.kt +++ b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEGradlePlugin.kt @@ -27,10 +27,14 @@ import org.gradle.api.Project class AndroidIDEGradlePlugin : Plugin { override fun apply(target: Project) { + ideLog("Applying ${javaClass.simpleName}") + target.run { - if (plugins.hasPlugin("com.android.application")) { - plugins.apply(LogSenderPlugin::class.java) + check(plugins.hasPlugin(APP_PLUGIN)) { + "${javaClass.simpleName} can only be applied to Android application projects" } + + plugins.apply(LogSenderPlugin::class.java) } } } diff --git a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPlugin.kt b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPlugin.kt new file mode 100644 index 000000000..17a633474 --- /dev/null +++ b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPlugin.kt @@ -0,0 +1,98 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.gradle + +import com.itsaky.androidide.buildinfo.BuildInfo +import org.gradle.api.Plugin +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.initialization.Settings +import org.gradle.api.invocation.Gradle +import java.net.URI + +/** + * Plugin for the AndroidIDE's Gradle Init Script. + * + * @author Akash Yadav + */ +class AndroidIDEInitScriptPlugin : Plugin { + + companion object { + + /** + * Property that is set in tests to indicate that the subprojects must be configured to use `mavenLocal()` instead of + * `mavenCentral()` and maven snapshots repository. + * + * **This is an internal property and should not be manually set by users.** + */ + private const val PROPERTY_ENABLE_MAVEN_LOCAL = "androidide.plugins.internal.testing.enableMavenLocal" + } + + override fun apply(target: Gradle) { + ideLog("Applying ${javaClass.simpleName}") + target.settingsEvaluated { settings -> + val isMavenLocalEnabled = settings.startParameter.run { + projectProperties.containsKey(PROPERTY_ENABLE_MAVEN_LOCAL) + && projectProperties[PROPERTY_ENABLE_MAVEN_LOCAL].toString().toBoolean() + } + + settings.addDependencyRepositories(isMavenLocalEnabled) + } + target.projectsLoaded { gradle -> + gradle.rootProject.subprojects.forEach { sub -> + sub.buildscript.dependencies.apply { + add("classpath", ideDependency("gradle-plugin")) + } + + sub.afterEvaluate { + sub.pluginManager.apply("${BuildInfo.PACKAGE_NAME}.gradle") + } + } + } + } + + @Suppress("UnstableApiUsage") + private fun Settings.addDependencyRepositories(isMavenLocalEnabled: Boolean) { + dependencyResolutionManagement.run { + repositories.configureRepositories(isMavenLocalEnabled) + } + + pluginManagement.apply { + repositories.configureRepositories(isMavenLocalEnabled) + } + } + + private fun RepositoryHandler.configureRepositories(isMavenLocalEnabled: Boolean) { + if (!isMavenLocalEnabled) { + // For release builds + mavenCentral() + + // For AndroidIDE CI builds + maven { repository -> + repository.url = URI.create( + "https://s01.oss.sonatype.org/content/repositories/snapshots/" + ) + } + } else { + // maven local has been enabled explicitly + mavenLocal() + } + + // for AGP API dependency + google() + } +} \ No newline at end of file diff --git a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/LogSenderPlugin.kt b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/LogSenderPlugin.kt index a0f7c503d..76c1519d1 100644 --- a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/LogSenderPlugin.kt +++ b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/LogSenderPlugin.kt @@ -17,9 +17,7 @@ package com.itsaky.androidide.gradle -import com.android.build.api.variant.AndroidComponentsExtension -import com.android.build.gradle.AppExtension -import com.itsaky.androidide.buildinfo.BuildInfo +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import org.gradle.api.Plugin import org.gradle.api.Project import java.util.concurrent.TimeUnit @@ -32,47 +30,54 @@ import java.util.concurrent.TimeUnit class LogSenderPlugin : Plugin { companion object { - private const val LOGSENDER_DEPENDENCY_ARTIFACT = "logsender" - private const val LOGSENDER_DEPENDENCY = - "${BuildInfo.MVN_GROUP_ID}:${LOGSENDER_DEPENDENCY_ARTIFACT}:${BuildInfo.VERSION_NAME_DOWNLOAD}" } override fun apply(target: Project) { + ideLog("Applying ${javaClass.simpleName}") + target.run { + check(plugins.hasPlugin(APP_PLUGIN)) { "${javaClass.simpleName} can only be applied to Android application projects." } - val debuggableBuilds = hashSetOf() + (extensions.getByName( + "androidComponents") as ApplicationAndroidComponentsExtension).apply { - val appExtension = extensions.getByType(AppExtension::class.java) - appExtension.buildTypes.forEach { - if (it.isDebuggable) { - logger.debug("Found debuggable build type : '${it.name}'") - debuggableBuilds.add(it.name) - } - } + finalizeDsl { appExtension -> + logger.warn("On finalize DSL") - logger.debug("Found ${debuggableBuilds.size} debuggable builds in project '${project.path}': $debuggableBuilds") + val debuggableBuilds = hashSetOf() - if (debuggableBuilds.isEmpty()) { - logger.warn("No debuggable builds found in project '${project.path}'") - return@run - } + appExtension.buildTypes.forEach { + if (it.isDebuggable) { + logger.debug("Found debuggable build type : '${it.name}'") + debuggableBuilds.add(it.name) + } + } - val androidComponents = extensions.getByType(AndroidComponentsExtension::class.java) - androidComponents.onVariants { variant -> - val buildType = variant.buildType ?: return@onVariants - if (buildType in debuggableBuilds) { - logger.info( - "Adding LogSender dependency ('${LOGSENDER_DEPENDENCY}')" + - " to variant '${variant.name}' of project '${project.path}'" - ) + logger.debug( + "Found ${debuggableBuilds.size} debuggable builds in project '${project.path}': $debuggableBuilds") - variant.runtimeConfiguration.apply { - resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS) - dependencies.add(project.dependencies.create(LOGSENDER_DEPENDENCY)) + if (debuggableBuilds.isEmpty()) { + logger.warn("No debuggable builds found in project '${project.path}'") + } + + onVariants { variant -> + logger.warn("on variant -> ${variant.name} ${variant.buildType}") + val buildType = variant.buildType ?: return@onVariants + if (buildType in debuggableBuilds) { + logger.info( + "Adding LogSender dependency ('${LOGSENDER_DEPENDENCY_ARTIFACT}')" + + " to variant '${variant.name}' of project '${project.path}'" + ) + + variant.runtimeConfiguration.apply { + resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS) + dependencies.add(project.dependencies.ideDependency(LOGSENDER_DEPENDENCY_ARTIFACT)) + } + } } } } diff --git a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/common.kt b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/common.kt index a39bd2206..dd8014432 100644 --- a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/common.kt +++ b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/common.kt @@ -17,8 +17,21 @@ package com.itsaky.androidide.gradle +import com.itsaky.androidide.buildinfo.BuildInfo +import org.gradle.api.Project +import org.gradle.api.artifacts.Dependency +import org.gradle.api.artifacts.dsl.DependencyHandler + /** * @author Akash Yadav */ -const val APP_PLUGIN = "com.android.application" \ No newline at end of file +const val APP_PLUGIN = "com.android.application" + +fun Project.ideDependency(artifact: String): Dependency { + return dependencies.ideDependency(artifact) +} + +fun DependencyHandler.ideDependency(artifact: String): Dependency { + return create("${BuildInfo.MVN_GROUP_ID}:${artifact}:${BuildInfo.VERSION_NAME_DOWNLOAD}") +} diff --git a/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/utils.kt b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/utils.kt new file mode 100644 index 000000000..d355f1f2b --- /dev/null +++ b/gradle-plugin/src/main/java/com/itsaky/androidide/gradle/utils.kt @@ -0,0 +1,22 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.gradle + +internal fun ideLog(message: String) { + System.err.println("[AndroidIDE] $message") +} \ No newline at end of file diff --git a/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPluginTest.kt b/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPluginTest.kt new file mode 100644 index 000000000..e60c14b7c --- /dev/null +++ b/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/AndroidIDEInitScriptPluginTest.kt @@ -0,0 +1,54 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.gradle + +import com.google.common.truth.Truth.assertThat +import com.itsaky.androidide.utils.FileProvider +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Test +import kotlin.io.path.pathString + +/** + * @author Akash Yadav + */ +class AndroidIDEInitScriptPluginTest { + + @Test + fun `test init script plugin is applied`() { + val projectRoot = openProject() + val initScript = FileProvider.testHomeDir().resolve(".androidide/init/androidide.init.gradle") + + val runner = GradleRunner.create() + .withProjectDir(projectRoot.toFile()) + .withPluginClasspath() + .withArguments( + ":app:tasks", // run any task, as long as it applies the plugins + "--init-script", initScript.pathString, + "-Pandroidide.plugins.internal.testing.enableMavenLocal=true", // plugins should be published to maven local first + "--stacktrace" + ) + + writeInitScript(initScript.toFile(), runner.pluginClasspath) + + val result = runner.build() + + assertThat(result.output).contains( + "[AndroidIDE] Applying ${AndroidIDEInitScriptPlugin::class.java.simpleName}" + ) + } +} \ No newline at end of file diff --git a/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/utils.kt b/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/utils.kt new file mode 100644 index 000000000..609d7c7bb --- /dev/null +++ b/gradle-plugin/src/test/java/com/itsaky/androidide/gradle/utils.kt @@ -0,0 +1,62 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.gradle + +import com.itsaky.androidide.utils.FileProvider +import java.io.File +import java.nio.file.Path +import kotlin.io.path.pathString + +internal fun writeInitScript(file: File, deps: List) { + file.parentFile.mkdirs() + + val root = FileProvider.projectRoot().pathString + val depsString = deps.filter { it.absolutePath.startsWith(root) } + .joinToString(separator = System.lineSeparator()) { + val isDir = it.isDirectory + "classpath ${if (isDir) "files" else "files"}(\"${it}\")" + } + + file.bufferedWriter().use { + it.write(""" + initscript { + dependencies { + // make sure the init script plugin is in classpath + $depsString + } + } + + apply plugin: com.itsaky.androidide.gradle.AndroidIDEInitScriptPlugin + """.trimIndent()) + } +} + +internal fun openProject(vararg plugins: String): Path { + val projectRoot = FileProvider.projectRoot() + .resolve("gradle-plugin/src/test/resources/sample-project") + val buildGradle = projectRoot.resolve("app/build.gradle.kts").toFile() + + val pluginsText = plugins.joinToString(separator = "\n") { "id(\"$it\")" } + buildGradle.parentFile.resolve("${buildGradle.name}.in") + .readText() + .replace("@@PLUGINS@@", pluginsText) + .also { + buildGradle.writeText(it) + } + return projectRoot +} \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/.gitignore b/gradle-plugin/src/test/resources/sample-project/.gitignore new file mode 100755 index 000000000..b6bc0116e --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/.gitignore @@ -0,0 +1,83 @@ +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +/bin/ +/gen/ +/out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# Gradle files +.gradle/ +/build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ diff --git a/gradle-plugin/src/test/resources/sample-project/app/.gitignore b/gradle-plugin/src/test/resources/sample-project/app/.gitignore new file mode 100755 index 000000000..58ef9a020 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/app/.gitignore @@ -0,0 +1,2 @@ +/build +build.gradle.kts \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/app/build.gradle.kts.in b/gradle-plugin/src/test/resources/sample-project/app/build.gradle.kts.in new file mode 100755 index 000000000..0c5f2b466 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/app/build.gradle.kts.in @@ -0,0 +1,49 @@ + +plugins { + id("com.android.application") + @@PLUGINS@@ +} + +android { + namespace = "com.example.myapplication2" + compileSdk = 33 + buildToolsVersion = "33.0.2" + + defaultConfig { + applicationId = "com.example.myapplication2" + minSdk = 21 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + + vectorDrawables { + useSupportLibrary = true + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + + buildFeatures { + viewBinding = true + + } + +} + +dependencies { + + + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("com.google.android.material:material:1.9.0") +} diff --git a/gradle-plugin/src/test/resources/sample-project/app/proguard-rules.pro b/gradle-plugin/src/test/resources/sample-project/app/proguard-rules.pro new file mode 100755 index 000000000..481bb4348 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/app/src/main/AndroidManifest.xml b/gradle-plugin/src/test/resources/sample-project/app/src/main/AndroidManifest.xml new file mode 100755 index 000000000..fe80d1d5a --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/app/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/app/src/main/res/values/strings.xml b/gradle-plugin/src/test/resources/sample-project/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..6fc03fbd3 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/app/src/main/res/values/strings.xml @@ -0,0 +1,20 @@ + + + + Sample app + \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/build.gradle.kts b/gradle-plugin/src/test/resources/sample-project/build.gradle.kts deleted file mode 100644 index 7efcee036..000000000 --- a/gradle-plugin/src/test/resources/sample-project/build.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -plugins { - id("com.android.application") version "7.2.0" apply false - id("com.android.library") version "7.2.0" apply false -} - -tasks.register("clean") { - delete(rootProject.buildDir) -} \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/gradle.properties b/gradle-plugin/src/test/resources/sample-project/gradle.properties new file mode 100755 index 000000000..2d1209582 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx512m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.jar b/gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..ccebba7710deaf9f98673a68957ea02138b60d0a GIT binary patch literal 61608 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 literal 0 HcmV?d00001 diff --git a/gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.properties b/gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.properties new file mode 100755 index 000000000..c898b7afd --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists \ No newline at end of file diff --git a/gradle-plugin/src/test/resources/sample-project/gradlew b/gradle-plugin/src/test/resources/sample-project/gradlew new file mode 100755 index 000000000..79a61d421 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle-plugin/src/test/resources/sample-project/gradlew.bat b/gradle-plugin/src/test/resources/sample-project/gradlew.bat new file mode 100755 index 000000000..6689b85be --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-plugin/src/test/resources/sample-project/settings.gradle.kts b/gradle-plugin/src/test/resources/sample-project/settings.gradle.kts new file mode 100755 index 000000000..399e9a2a0 --- /dev/null +++ b/gradle-plugin/src/test/resources/sample-project/settings.gradle.kts @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + google() + mavenCentral() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "Sample App" +include(":app") \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ed8de003..0b22d65fc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ agp = "8.0.2" agp-tooling = "8.1.0" gradle-tooling = "8.1.1" +junit-jupiter = "5.7.1" kotlin = "1.8.21" tree-sitter = "3.2.0" editor = "0.21.1-5c3385c-SNAPSHOT" @@ -101,6 +102,8 @@ git-jgit = { module = "org.eclipse.jgit:org.eclipse.jgit", version = "3.7.1.2015 # Tests tests-junit = { module = "junit:junit", version = "4.13.2" } +tests-junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } +tests-junit-platformLauncher = { module = "org.junit.platform:junit-platform-launcher" } tests-google-truth = { module = "com.google.truth:truth", version = "1.1.5" } tests-robolectric = { module = "org.robolectric:robolectric", version = "4.10.3" } tests-androidx-test-core = { module = "androidx.test:core", version = "1.5.0" } @@ -113,7 +116,7 @@ tests-mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = tests-mockk = { module = "io.mockk:mockk", version = "1.13.5" } # Tooling -tooling-agp = { module="com.android.tools.build:gradle", version.ref = "agp-tooling" } +tooling-agpApi = { module="com.android.tools.build:gradle-api", version.ref = "agp-tooling" } tooling-builderModel = { module="com.android.tools.build:builder-model", version.ref = "agp-tooling" } tooling-gradleApi = { module="org.gradle:gradle-tooling-api", version.ref = "gradle-tooling" } tooling-slf4j = { module = "org.slf4j:slf4j-api", version = "2.0.7" } diff --git a/shared/src/main/java/com/itsaky/androidide/utils/FileProvider.kt b/shared/src/main/java/com/itsaky/androidide/utils/FileProvider.kt index 9ea7b933b..5321a2aa3 100644 --- a/shared/src/main/java/com/itsaky/androidide/utils/FileProvider.kt +++ b/shared/src/main/java/com/itsaky/androidide/utils/FileProvider.kt @@ -49,9 +49,11 @@ class FileProvider { } } - @JvmStatic fun currentDir(): Path = Paths.get(System.getProperty("user.dir")!!) + @JvmStatic + fun currentDir(): Path = Paths.get(System.getProperty("user.dir")!!) - @JvmStatic fun implModule(): Path = projectRoot().resolve("subprojects/tooling-api-impl") + @JvmStatic + fun implModule(): Path = projectRoot().resolve("subprojects/tooling-api-impl") @JvmStatic fun projectRoot(): Path = @@ -59,7 +61,14 @@ class FileProvider { "Unable to file project root. Check if '${PROJECT_ROOT_FILE}' file exists in the project root directory." } - @JvmStatic fun testProjectRoot(): Path = projectRoot().resolve("tests/test-project") + @JvmStatic + private fun testsDir(): Path = projectRoot().resolve("tests") + + @JvmStatic + fun testHomeDir(): Path = testsDir().resolve("test-home") + + @JvmStatic + fun testProjectRoot(): Path = testsDir().resolve("test-project") /** * Get the path to the 'resources' directory. @@ -82,7 +91,8 @@ class FileProvider { return resources().resolve("${name}_template.$extension").normalize() } - @JvmStatic fun contents(file: Path): StringBuilder = StringBuilder(file.readText()) + @JvmStatic + fun contents(file: Path): StringBuilder = StringBuilder(file.readText()) } } diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 000000000..c3c8a18c4 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +/test-home \ No newline at end of file diff --git a/tests/test-home/.androidide/.gitignore b/tests/test-home/.androidide/.gitignore index 59d7aaecc..aec8cfdc7 100644 --- a/tests/test-home/.androidide/.gitignore +++ b/tests/test-home/.androidide/.gitignore @@ -1,2 +1 @@ -model.jar -plugin.jar +/init diff --git a/tests/test-home/.androidide/init/androidide.init.gradle b/tests/test-home/.androidide/init/androidide.init.gradle deleted file mode 100644 index d495bcc00..000000000 --- a/tests/test-home/.androidide/init/androidide.init.gradle +++ /dev/null @@ -1,3 +0,0 @@ -subprojects { - apply plugin: 'idea' -} \ No newline at end of file diff --git a/tests/test-home/.androidide/init/init.gradle b/tests/test-home/.androidide/init/init.gradle deleted file mode 100644 index 29333ab4f..000000000 --- a/tests/test-home/.androidide/init/init.gradle +++ /dev/null @@ -1,11 +0,0 @@ -import com.itsaky.androidide.tooling.plugin.AndroidIDEToolingApiPlugin - -initscript { - dependencies { - classpath files ("D:/Projects/AndroidStudioProjects/AndroidIDE/build-tools/tooling-api-impl/./src/test/test-home/.androidide/init/model.jar") - } -} - -allprojects { - apply plugin: AndroidIDEToolingApiPlugin -} \ No newline at end of file diff --git a/tests/test-home/.androidide/init/model.jar b/tests/test-home/.androidide/init/model.jar deleted file mode 100644 index 4085a6d0bfafdc1038032fbd26a8ee1b498b698c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65261 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℘_QU(l%MTG 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