mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix(lsp/java): remove hardcoded 4-space indentation in generated code
This commit is contained in:
+2
-1
@@ -34,6 +34,7 @@ import com.itsaky.androidide.lsp.java.compiler.CompileTask
|
||||
import com.itsaky.androidide.lsp.java.utils.EditHelper
|
||||
import com.itsaky.androidide.lsp.java.utils.JavaParserUtils
|
||||
import com.itsaky.androidide.lsp.java.utils.TypeUtils.toType
|
||||
import com.itsaky.androidide.preferences.internal.tabSize
|
||||
import com.itsaky.androidide.projects.ProjectManager
|
||||
import com.itsaky.androidide.resources.R
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
@@ -117,7 +118,7 @@ class GenerateSettersAndGettersAction : FieldBasedAction() {
|
||||
}
|
||||
|
||||
val leaf = path.leaf
|
||||
val indent = EditHelper.indent(task.task, task.root(file), leaf) + 4
|
||||
val indent = EditHelper.indent(task.task, task.root(file), leaf) + tabSize
|
||||
sb.append(createGetter(element, indent))
|
||||
if (!element.modifiers.contains(FINAL)) {
|
||||
sb.append(createSetter(element, indent))
|
||||
|
||||
+2
-1
@@ -29,6 +29,7 @@ import com.itsaky.androidide.lsp.java.JavaCompilerProvider
|
||||
import com.itsaky.androidide.lsp.java.actions.FieldBasedAction
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompileTask
|
||||
import com.itsaky.androidide.lsp.java.utils.EditHelper
|
||||
import com.itsaky.androidide.preferences.internal.tabSize
|
||||
import com.itsaky.androidide.projects.ProjectManager
|
||||
import com.itsaky.androidide.resources.R
|
||||
import com.itsaky.androidide.resources.R.string
|
||||
@@ -113,7 +114,7 @@ class GenerateToStringMethodAction : FieldBasedAction() {
|
||||
val file = data.requirePath()
|
||||
val editor = data[CodeEditor::class.java]!!
|
||||
val trees = JavacTrees.instance(task.task)
|
||||
val indent = EditHelper.indent(task.task, task.root(), type) + 4
|
||||
val indent = EditHelper.indent(task.task, task.root(), type) + tabSize
|
||||
val insert = EditHelper.insertAtEndOfClass(task.task, task.root(file), type)
|
||||
val string = StringBuilder()
|
||||
var isFirst = true
|
||||
|
||||
+4
-4
@@ -35,12 +35,11 @@ import com.itsaky.androidide.lsp.java.utils.FindHelper
|
||||
import com.itsaky.androidide.lsp.java.utils.JavaParserUtils
|
||||
import com.itsaky.androidide.lsp.java.utils.MethodPtr
|
||||
import com.itsaky.androidide.lsp.java.visitors.FindTypeDeclarationAt
|
||||
import com.itsaky.androidide.preferences.internal.tabSize
|
||||
import com.itsaky.androidide.projects.ProjectManager
|
||||
import com.itsaky.androidide.resources.R
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
import com.itsaky.androidide.utils.flashError
|
||||
import openjdk.source.tree.MethodTree
|
||||
import openjdk.source.util.Trees
|
||||
import io.github.rosemoe.sora.widget.CodeEditor
|
||||
import java.util.Arrays
|
||||
import java.util.Optional
|
||||
@@ -52,6 +51,8 @@ import jdkx.lang.model.element.TypeElement
|
||||
import jdkx.lang.model.type.DeclaredType
|
||||
import jdkx.lang.model.type.ExecutableType
|
||||
import jdkx.tools.JavaFileObject
|
||||
import openjdk.source.tree.MethodTree
|
||||
import openjdk.source.util.Trees
|
||||
|
||||
/**
|
||||
* Allows the user to override multiple methods from superclass at once.
|
||||
@@ -190,7 +191,6 @@ class OverrideSuperclassMethodsAction : BaseJavaCodeAction() {
|
||||
builder.show()
|
||||
}
|
||||
|
||||
@Suppress("Since15")
|
||||
private fun overrideMethods(data: ActionData, checkedMethods: MutableList<MethodPtr>) {
|
||||
val compiler =
|
||||
JavaCompilerProvider.get(ProjectManager.findModuleForFile(data.requireFile()) ?: return)
|
||||
@@ -205,7 +205,7 @@ class OverrideSuperclassMethodsAction : BaseJavaCodeAction() {
|
||||
val typeFinder = FindTypeDeclarationAt(task.task)
|
||||
val classTree = typeFinder.scan(task.root(), position)
|
||||
val thisClass = trees.getElement(typeFinder.path) as TypeElement
|
||||
val indent = EditHelper.indent(task.task, task.root(), classTree) + 4
|
||||
val indent = EditHelper.indent(task.task, task.root(), classTree) + tabSize
|
||||
val fileImports = task.root(file).imports.map { it.qualifiedIdentifier.toString() }.toSet()
|
||||
val filePackage = task.root(file).`package`.packageName.toString()
|
||||
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ package com.itsaky.androidide.lsp.java.rewrite;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.itsaky.androidide.preferences.internal.EditorPreferencesKt;
|
||||
import com.itsaky.androidide.utils.ILogger;
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompileTask;
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompilerProvider;
|
||||
@@ -87,7 +88,7 @@ public class GenerateRecordConstructor extends Rewrite {
|
||||
.append(initializers)
|
||||
.append("\n}");
|
||||
String string = buf.toString();
|
||||
int indent = EditHelper.indent(task.task, task.root(), typeTree) + 4;
|
||||
int indent = EditHelper.indent(task.task, task.root(), typeTree) + EditorPreferencesKt.getTabSize();
|
||||
string = string.replaceAll("\n", "\n" + EditHelper.repeatSpaces(indent));
|
||||
string = string + "\n\n";
|
||||
Position insert = insertPoint(task, typeTree);
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ package com.itsaky.androidide.lsp.java.rewrite;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.itsaky.androidide.preferences.internal.EditorPreferencesKt;
|
||||
import com.itsaky.androidide.utils.ILogger;
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompileTask;
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompilerProvider;
|
||||
@@ -104,7 +105,7 @@ public class ImplementAbstractMethods extends Rewrite {
|
||||
}
|
||||
|
||||
final Set<String> imports = new TreeSet<>();
|
||||
int indent = EditHelper.indent(task.task, task.root(), thisTree) + 4;
|
||||
int indent = EditHelper.indent(task.task, task.root(), thisTree) + EditorPreferencesKt.getTabSize();
|
||||
for (Element member : elements.getAllMembers(thisClass)) {
|
||||
if (member.getKind() == ElementKind.METHOD
|
||||
&& member.getModifiers().contains(Modifier.ABSTRACT)) {
|
||||
|
||||
@@ -18,14 +18,28 @@
|
||||
package com.itsaky.androidide.lsp.java.utils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.itsaky.androidide.lsp.java.compiler.CompilerProvider;
|
||||
import com.itsaky.androidide.lsp.java.rewrite.AddImport;
|
||||
import com.itsaky.androidide.lsp.models.TextEdit;
|
||||
import com.itsaky.androidide.models.Position;
|
||||
import com.itsaky.androidide.models.Range;
|
||||
import com.itsaky.androidide.lsp.models.TextEdit;
|
||||
import com.itsaky.androidide.projects.FileManager;
|
||||
import com.itsaky.androidide.preferences.internal.EditorPreferencesKt;
|
||||
import com.itsaky.androidide.projects.util.StringSearch;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
import jdkx.lang.model.element.ExecutableElement;
|
||||
import jdkx.lang.model.element.Modifier;
|
||||
import jdkx.lang.model.element.Name;
|
||||
import jdkx.lang.model.element.TypeElement;
|
||||
import jdkx.lang.model.type.ArrayType;
|
||||
import jdkx.lang.model.type.DeclaredType;
|
||||
import jdkx.lang.model.type.ExecutableType;
|
||||
import jdkx.lang.model.type.TypeMirror;
|
||||
import openjdk.source.tree.ClassTree;
|
||||
import openjdk.source.tree.CompilationUnitTree;
|
||||
import openjdk.source.tree.LineMap;
|
||||
@@ -35,33 +49,15 @@ import openjdk.source.util.JavacTask;
|
||||
import openjdk.source.util.SourcePositions;
|
||||
import openjdk.source.util.Trees;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import jdkx.lang.model.element.ExecutableElement;
|
||||
import jdkx.lang.model.element.Modifier;
|
||||
import jdkx.lang.model.element.Name;
|
||||
import jdkx.lang.model.element.TypeElement;
|
||||
import jdkx.lang.model.type.ArrayType;
|
||||
import jdkx.lang.model.type.DeclaredType;
|
||||
import jdkx.lang.model.type.ExecutableType;
|
||||
import jdkx.lang.model.type.TypeMirror;
|
||||
|
||||
public class EditHelper {
|
||||
|
||||
public static List<TextEdit> addImportIfNeeded(
|
||||
CompilerProvider compiler, Path file, Set<String> imports, String className) {
|
||||
public static List<TextEdit> addImportIfNeeded(CompilerProvider compiler, Path file,
|
||||
Set<String> imports, String className
|
||||
) {
|
||||
final String pkgName = Extractors.packageName(className);
|
||||
final String star = pkgName + ".*";
|
||||
if ("java.lang".equals(pkgName)
|
||||
|| imports.contains(className)
|
||||
|| imports.contains(star)
|
||||
|| file == null) {
|
||||
if ("java.lang".equals(pkgName) || imports.contains(className) || imports.contains(star) ||
|
||||
file == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@@ -74,8 +70,9 @@ public class EditHelper {
|
||||
return Arrays.asList(Objects.requireNonNull(addImport.rewrite(compiler).get(file)));
|
||||
}
|
||||
|
||||
public static TextEdit removeTree(
|
||||
final JavacTask task, final CompilationUnitTree root, final Tree remove) {
|
||||
public static TextEdit removeTree(final JavacTask task, final CompilationUnitTree root,
|
||||
final Tree remove
|
||||
) {
|
||||
SourcePositions pos = Trees.instance(task).getSourcePositions();
|
||||
LineMap lines = root.getLineMap();
|
||||
long start = pos.getStartPosition(root, remove);
|
||||
@@ -90,8 +87,9 @@ public class EditHelper {
|
||||
return new TextEdit(range, "");
|
||||
}
|
||||
|
||||
public static String printMethod(
|
||||
final ExecutableElement method, final ExecutableType parameterizedType, MethodTree source) {
|
||||
public static String printMethod(final ExecutableElement method,
|
||||
final ExecutableType parameterizedType, MethodTree source
|
||||
) {
|
||||
final StringBuilder buf = new StringBuilder();
|
||||
// TODO leading \n is extra, but needed for indent replaceAll trick
|
||||
buf.append("\n@Override\n");
|
||||
@@ -136,8 +134,9 @@ public class EditHelper {
|
||||
return indent(root, leaf, pos);
|
||||
}
|
||||
|
||||
private static int indent(
|
||||
@NonNull CompilationUnitTree root, Tree leaf, @NonNull SourcePositions pos) {
|
||||
private static int indent(@NonNull CompilationUnitTree root, Tree leaf,
|
||||
@NonNull SourcePositions pos
|
||||
) {
|
||||
LineMap lines = root.getLineMap();
|
||||
long startClass = pos.getStartPosition(root, leaf);
|
||||
long startLine = lines.getStartPosition(lines.getLineNumber(startClass));
|
||||
@@ -154,11 +153,12 @@ public class EditHelper {
|
||||
indent--;
|
||||
}
|
||||
}
|
||||
return indent * 4;
|
||||
return indent * EditorPreferencesKt.getTabSize();
|
||||
}
|
||||
|
||||
public static Position insertBefore(
|
||||
final JavacTask task, final CompilationUnitTree root, final Tree member) {
|
||||
public static Position insertBefore(final JavacTask task, final CompilationUnitTree root,
|
||||
final Tree member
|
||||
) {
|
||||
SourcePositions pos = Trees.instance(task).getSourcePositions();
|
||||
LineMap lines = root.getLineMap();
|
||||
long start = pos.getStartPosition(root, member);
|
||||
@@ -166,8 +166,9 @@ public class EditHelper {
|
||||
return new Position(line - 1, 0);
|
||||
}
|
||||
|
||||
public static Position insertAfter(
|
||||
final JavacTask task, final CompilationUnitTree root, final Tree member) {
|
||||
public static Position insertAfter(final JavacTask task, final CompilationUnitTree root,
|
||||
final Tree member
|
||||
) {
|
||||
SourcePositions pos = Trees.instance(task).getSourcePositions();
|
||||
LineMap lines = root.getLineMap();
|
||||
long end = pos.getEndPosition(root, member);
|
||||
@@ -175,8 +176,9 @@ public class EditHelper {
|
||||
return new Position(line, 0);
|
||||
}
|
||||
|
||||
public static Position insertAtEndOfClass(
|
||||
JavacTask task, CompilationUnitTree root, ClassTree leaf) {
|
||||
public static Position insertAtEndOfClass(JavacTask task, CompilationUnitTree root,
|
||||
ClassTree leaf
|
||||
) {
|
||||
SourcePositions pos = Trees.instance(task).getSourcePositions();
|
||||
LineMap lines = root.getLineMap();
|
||||
long end = pos.getEndPosition(root, leaf);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
package com.itsaky.androidide.lsp.java.utils
|
||||
|
||||
import com.itsaky.androidide.preferences.internal.tabSize
|
||||
import com.squareup.javapoet.AnnotationSpec
|
||||
import com.squareup.javapoet.ImportCollectingCodeWriter
|
||||
import com.squareup.javapoet.MethodSpec
|
||||
@@ -38,7 +39,7 @@ class JavaPoetUtils {
|
||||
qualifiedNames: Boolean = true,
|
||||
): String {
|
||||
val sb = StringBuilder()
|
||||
val writer = ImportCollectingCodeWriter(sb)
|
||||
val writer = ImportCollectingCodeWriter(sb, " ".repeat(tabSize), emptySet(), emptySet())
|
||||
|
||||
writer.isPrintQualifiedNames = qualifiedNames
|
||||
writer.emit(method)
|
||||
|
||||
Reference in New Issue
Block a user