From d4db2635bd400e23ba47e09c9f2e549422ccf7ce Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Sun, 5 Mar 2023 23:29:39 +0530 Subject: [PATCH] refactor: move javapoet to separate module --- app/build.gradle.kts | 1 + .../assets/data/common/tooling-api-all.jar | Bin 16221419 -> 16221419 bytes .../itsaky/androidide/utils/ClassBuilder.kt | 17 ++++++++++++ lsp/java/build.gradle.kts | 1 + .../completion/ScopeCompletionProvider.kt | 23 +++++----------- settings.gradle.kts | 7 ++--- subprojects/javapoet/.gitignore | 1 + subprojects/javapoet/build.gradle.kts | 24 +++++++++++++++++ .../com/squareup/javapoet/AnnotationSpec.java | 0 .../com/squareup/javapoet/ArrayTypeName.java | 0 .../java/com/squareup/javapoet/ClassName.java | 0 .../java/com/squareup/javapoet/CodeBlock.java | 0 .../com/squareup/javapoet/CodeWriter.java | 0 .../java/com/squareup/javapoet/FieldSpec.java | 0 .../javapoet/ImportCollectingCodeWriter.java | 25 +++++++++--------- .../java/com/squareup/javapoet/JavaFile.java | 0 .../com/squareup/javapoet/LineWrapper.java | 0 .../com/squareup/javapoet/MethodSpec.java | 0 .../com/squareup/javapoet/NameAllocator.java | 0 .../com/squareup/javapoet/ParameterSpec.java | 0 .../javapoet/ParameterizedTypeName.java | 0 .../java/com/squareup/javapoet/TypeName.java | 0 .../java/com/squareup/javapoet/TypeSpec.java | 0 .../squareup/javapoet/TypeVariableName.java | 0 .../main/java/com/squareup/javapoet/Util.java | 0 .../squareup/javapoet/WildcardTypeName.java | 0 26 files changed, 67 insertions(+), 32 deletions(-) rename {lsp/java => app}/src/main/java/com/itsaky/androidide/utils/ClassBuilder.kt (76%) create mode 100644 subprojects/javapoet/.gitignore create mode 100644 subprojects/javapoet/build.gradle.kts rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/AnnotationSpec.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/ArrayTypeName.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/ClassName.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/CodeBlock.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/CodeWriter.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/FieldSpec.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java (77%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/JavaFile.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/LineWrapper.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/MethodSpec.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/NameAllocator.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/ParameterSpec.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/TypeName.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/TypeSpec.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/TypeVariableName.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/Util.java (100%) rename {lsp/java => subprojects/javapoet}/src/main/java/com/squareup/javapoet/WildcardTypeName.java (100%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 064ed2486..842c1bd79 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,6 +123,7 @@ dependencies { implementation(projects.eventbusEvents) implementation(projects.subprojects.aaptcompiler) implementation(projects.subprojects.javacServices) + implementation(projects.subprojects.javapoet) implementation(projects.subprojects.xmlUtils) implementation(projects.subprojects.projects) implementation(projects.subprojects.toolingApi) diff --git a/app/src/main/assets/data/common/tooling-api-all.jar b/app/src/main/assets/data/common/tooling-api-all.jar index a25ad46d3e1fa5290f01636fce5745891ef2b074..2aa15b4faeffe8a234021d2d0b25463cac45af0d 100644 GIT binary patch delta 20211 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. + */ + package com.itsaky.androidide.utils import android.os.Bundle diff --git a/lsp/java/build.gradle.kts b/lsp/java/build.gradle.kts index 36e470b43..3ceb484e2 100644 --- a/lsp/java/build.gradle.kts +++ b/lsp/java/build.gradle.kts @@ -53,6 +53,7 @@ dependencies { implementation(projects.lsp.api) implementation(projects.subprojects.javac) implementation(projects.subprojects.javacServices) + implementation(projects.subprojects.javapoet) implementation(projects.subprojects.googleJavaFormat) implementation(libs.androidx.ktx) diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt index 4b9bd6437..77c0d189d 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt @@ -20,13 +20,10 @@ package com.itsaky.androidide.lsp.java.providers.completion import com.itsaky.androidide.lsp.api.IServerSettings import com.itsaky.androidide.lsp.api.describeSnippet import com.itsaky.androidide.lsp.java.compiler.CompileTask -import com.itsaky.androidide.lsp.java.compiler.CompilerProvider import com.itsaky.androidide.lsp.java.compiler.JavaCompilerService import com.itsaky.androidide.lsp.java.edits.MultipleClassImportEditHandler -import com.itsaky.androidide.lsp.java.parser.ParseTask import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.lsp.java.utils.EditHelper.repeatSpaces -import com.itsaky.androidide.lsp.java.utils.FindHelper import com.itsaky.androidide.lsp.java.utils.JavaPoetUtils.Companion.buildMethod import com.itsaky.androidide.lsp.java.utils.JavaPoetUtils.Companion.print import com.itsaky.androidide.lsp.java.utils.ScopeHelper @@ -38,22 +35,18 @@ import com.itsaky.androidide.lsp.models.MatchLevel.NO_MATCH import com.itsaky.androidide.progress.ProgressManager.Companion.abortIfCancelled import com.itsaky.androidide.projects.FileManager import com.squareup.javapoet.MethodSpec.Builder -import openjdk.source.tree.ClassTree -import openjdk.source.tree.MethodTree -import openjdk.source.tree.Tree.Kind.CLASS -import openjdk.source.util.TreePath -import openjdk.source.util.Trees import java.nio.file.Path -import java.util.* -import java.util.function.* +import java.util.function.Predicate import jdkx.lang.model.element.ElementKind.METHOD import jdkx.lang.model.element.ExecutableElement import jdkx.lang.model.element.Modifier.FINAL import jdkx.lang.model.element.Modifier.PRIVATE import jdkx.lang.model.element.Modifier.STATIC -import jdkx.lang.model.element.TypeElement import jdkx.lang.model.type.DeclaredType -import jdkx.tools.JavaFileObject +import openjdk.source.tree.ClassTree +import openjdk.source.tree.Tree.Kind.CLASS +import openjdk.source.util.TreePath +import openjdk.source.util.Trees /** * Provides completions using [openjdk.source.tree.Scope]. @@ -162,8 +155,7 @@ class ScopeCompletionProvider( // Print the method details and the annotations // Print the method details and the annotations - val indent = - EditHelper.indent(FileManager.getDocumentContents(file), cursor.toInt()) + val indent = EditHelper.indent(FileManager.getDocumentContents(file), cursor.toInt()) val builder: Builder try { builder = buildMethod(method, types, type) @@ -195,8 +187,7 @@ class ScopeCompletionProvider( } imports.removeIf { "java.lang." == it || fileImports.contains(it) || filePackage == it } - item.additionalEditHandler = - MultipleClassImportEditHandler(imports, fileImports, file) + item.additionalEditHandler = MultipleClassImportEditHandler(imports, fileImports, file) return item } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 33004656d..2bba95bcf 100755 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -73,12 +73,13 @@ include( ":subprojects:framework-stubs", ":subprojects:fuzzysearch", ":subprojects:google-java-format", - ":subprojects:jdk-compiler", - ":subprojects:jdk-jdeps", + ":subprojects:java-compiler", ":subprojects:javac", ":subprojects:javac-services", - ":subprojects:java-compiler", + ":subprojects:javapoet", ":subprojects:jaxp", + ":subprojects:jdk-compiler", + ":subprojects:jdk-jdeps", ":subprojects:jdt", ":subprojects:layoutlib-api", ":subprojects:projects", diff --git a/subprojects/javapoet/.gitignore b/subprojects/javapoet/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/subprojects/javapoet/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/subprojects/javapoet/build.gradle.kts b/subprojects/javapoet/build.gradle.kts new file mode 100644 index 000000000..2a18f3fb4 --- /dev/null +++ b/subprojects/javapoet/build.gradle.kts @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +plugins { + kotlin("jvm") +} + +dependencies { + implementation(projects.subprojects.javaCompiler) +} \ No newline at end of file diff --git a/lsp/java/src/main/java/com/squareup/javapoet/AnnotationSpec.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/AnnotationSpec.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/AnnotationSpec.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/AnnotationSpec.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/ArrayTypeName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ArrayTypeName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/ArrayTypeName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/ArrayTypeName.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/ClassName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ClassName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/ClassName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/ClassName.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/CodeBlock.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/CodeBlock.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/CodeBlock.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/CodeBlock.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/CodeWriter.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/CodeWriter.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/CodeWriter.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/CodeWriter.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/FieldSpec.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/FieldSpec.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/FieldSpec.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/FieldSpec.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java similarity index 77% rename from lsp/java/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java index b765477cd..3551da0fc 100644 --- a/lsp/java/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java +++ b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ImportCollectingCodeWriter.java @@ -17,13 +17,12 @@ package com.squareup.javapoet; -import androidx.annotation.NonNull; - import java.io.IOException; import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import org.jetbrains.annotations.NotNull; /** * A code writer implementation which is used by {@link TypeName} to provide list of classes that @@ -65,7 +64,7 @@ public class ImportCollectingCodeWriter extends CodeWriter { this.importClasses.add(qualifiedName); } - @NonNull + @NotNull public Set getImportClasses() { return importClasses; } @@ -74,43 +73,43 @@ public class ImportCollectingCodeWriter extends CodeWriter { emit("$L", annotationSpec); } - public void emit(@NonNull ArrayTypeName arrayTypeName) throws IOException { + public void emit(@NotNull ArrayTypeName arrayTypeName) throws IOException { arrayTypeName.emit(this); } - public void emit(@NonNull ClassName className) throws IOException { + public void emit(@NotNull ClassName className) throws IOException { className.emit(this); } - public void emit(@NonNull FieldSpec field) throws IOException { + public void emit(@NotNull FieldSpec field) throws IOException { field.emit(this, Collections.emptySet()); } - public void emit(@NonNull MethodSpec methodSpec) throws IOException { + public void emit(@NotNull MethodSpec methodSpec) throws IOException { methodSpec.emit(this, "Constructor", Collections.emptySet()); } - public void emit(@NonNull ParameterizedTypeName parameterizedTypeName) throws IOException { + public void emit(@NotNull ParameterizedTypeName parameterizedTypeName) throws IOException { parameterizedTypeName.emit(this); } - public void emit(@NonNull ParameterSpec parameterSpec) throws IOException { + public void emit(@NotNull ParameterSpec parameterSpec) throws IOException { parameterSpec.emit(this, false); } - public void emit(@NonNull TypeName typeName) throws IOException { + public void emit(@NotNull TypeName typeName) throws IOException { typeName.emit(this); } - public void emit(@NonNull TypeSpec typeSpec) throws IOException { + public void emit(@NotNull TypeSpec typeSpec) throws IOException { typeSpec.emit(this, null, Collections.emptySet()); } - public void emit(@NonNull TypeVariableName typeVariableName) throws IOException { + public void emit(@NotNull TypeVariableName typeVariableName) throws IOException { typeVariableName.emit(this); } - public void emit(@NonNull WildcardTypeName wildcardTypeName) throws IOException { + public void emit(@NotNull WildcardTypeName wildcardTypeName) throws IOException { wildcardTypeName.emit(this); } } diff --git a/lsp/java/src/main/java/com/squareup/javapoet/JavaFile.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/JavaFile.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/JavaFile.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/JavaFile.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/LineWrapper.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/LineWrapper.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/LineWrapper.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/LineWrapper.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/MethodSpec.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/MethodSpec.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/MethodSpec.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/MethodSpec.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/NameAllocator.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/NameAllocator.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/NameAllocator.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/NameAllocator.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/ParameterSpec.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ParameterSpec.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/ParameterSpec.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/ParameterSpec.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/ParameterizedTypeName.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/TypeName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/TypeName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeName.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/TypeSpec.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeSpec.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/TypeSpec.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeSpec.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/TypeVariableName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeVariableName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/TypeVariableName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/TypeVariableName.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/Util.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/Util.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/Util.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/Util.java diff --git a/lsp/java/src/main/java/com/squareup/javapoet/WildcardTypeName.java b/subprojects/javapoet/src/main/java/com/squareup/javapoet/WildcardTypeName.java similarity index 100% rename from lsp/java/src/main/java/com/squareup/javapoet/WildcardTypeName.java rename to subprojects/javapoet/src/main/java/com/squareup/javapoet/WildcardTypeName.java