From 8a510cac92275e85eeeb8cf8bb1afe9fed4002f9 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Mon, 17 Jan 2022 11:36:57 +0530 Subject: [PATCH] Reorganized classes --- .../java/com/itsaky/lsp/java/FileStore.java | 1 + .../itsaky/lsp/java/JavaLanguageServer.java | 1 + .../java/com/itsaky/lsp/java/ParseTask.java | 14 -- .../com/itsaky/lsp/java/ScanClassPath.java | 155 ------------------ .../lsp/java/{ => compiler}/CompileBatch.java | 29 +++- .../lsp/java/{ => compiler}/CompileTask.java | 20 ++- .../java/{ => compiler}/CompilerProvider.java | 22 ++- .../{ => compiler}/JavaCompilerService.java | 34 +++- .../java/{ => compiler}/ReusableCompiler.java | 41 ++--- .../{ => compiler}/SourceFileManager.java | 27 ++- .../java/{ => compiler}/SourceFileObject.java | 21 ++- .../{utils => compiler}/SynchronizedTask.java | 19 ++- .../com/itsaky/lsp/java/parser/ParseTask.java | 31 ++++ .../itsaky/lsp/java/{ => parser}/Parser.java | 47 ++++-- .../java/providers/CodeActionProvider.java | 6 +- .../providers/JavaCompletionProvider.java | 12 +- .../lsp/java/providers/SignatureProvider.java | 10 +- .../itsaky/lsp/java/rewrite/AddException.java | 5 +- .../itsaky/lsp/java/rewrite/AddImport.java | 4 +- .../rewrite/AddSuppressWarningAnnotation.java | 5 +- .../lsp/java/rewrite/ConvertFieldToBlock.java | 4 +- .../rewrite/ConvertVariableToStatement.java | 4 +- .../lsp/java/rewrite/CreateMissingMethod.java | 6 +- .../rewrite/GenerateRecordConstructor.java | 6 +- .../rewrite/ImplementAbstractMethods.java | 8 +- .../java/rewrite/OverrideInheritedMethod.java | 7 +- .../itsaky/lsp/java/rewrite/RemoveClass.java | 4 +- .../lsp/java/rewrite/RemoveException.java | 5 +- .../itsaky/lsp/java/rewrite/RemoveMethod.java | 5 +- .../com/itsaky/lsp/java/rewrite/Rewrite.java | 4 +- .../lsp/java/rewrite/RewriteNotSupported.java | 2 +- .../itsaky/lsp/java/{ => utils}/Cache.java | 21 ++- .../com/itsaky/lsp/java/utils/FindHelper.java | 4 +- .../lsp/java/{ => utils}/MarkdownHelper.java | 21 ++- .../itsaky/lsp/java/utils/ScanClassPath.java | 69 ++++++++ .../itsaky/lsp/java/utils/ScopeHelper.java | 2 +- .../lsp/java/{ => utils}/StringSearch.java | 37 ++++- .../itsaky/lsp/java/visitors/FindNameAt.java | 2 +- 38 files changed, 420 insertions(+), 295 deletions(-) delete mode 100644 lsp/java/src/main/java/com/itsaky/lsp/java/ParseTask.java delete mode 100644 lsp/java/src/main/java/com/itsaky/lsp/java/ScanClassPath.java rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/CompileBatch.java (84%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/CompileTask.java (68%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/CompilerProvider.java (52%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/JavaCompilerService.java (91%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/ReusableCompiler.java (89%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/SourceFileManager.java (80%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => compiler}/SourceFileObject.java (81%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{utils => compiler}/SynchronizedTask.java (65%) create mode 100644 lsp/java/src/main/java/com/itsaky/lsp/java/parser/ParseTask.java rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => parser}/Parser.java (91%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => utils}/Cache.java (72%) rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => utils}/MarkdownHelper.java (89%) create mode 100644 lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScanClassPath.java rename lsp/java/src/main/java/com/itsaky/lsp/java/{ => utils}/StringSearch.java (93%) diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/FileStore.java b/lsp/java/src/main/java/com/itsaky/lsp/java/FileStore.java index 3af5fe0f3..8901bda8c 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/FileStore.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/FileStore.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import com.itsaky.androidide.utils.Logger; +import com.itsaky.lsp.java.utils.StringSearch; import com.itsaky.lsp.models.DocumentChangeEvent; import com.itsaky.lsp.models.DocumentCloseEvent; import com.itsaky.lsp.models.DocumentOpenEvent; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/JavaLanguageServer.java b/lsp/java/src/main/java/com/itsaky/lsp/java/JavaLanguageServer.java index fa2041f34..9639b730d 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/JavaLanguageServer.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/JavaLanguageServer.java @@ -30,6 +30,7 @@ import com.itsaky.lsp.api.ILanguageServer; import com.itsaky.lsp.api.IReferenceProvider; import com.itsaky.lsp.api.IServerSettings; import com.itsaky.lsp.api.ISignatureHelpProvider; +import com.itsaky.lsp.java.compiler.JavaCompilerService; import com.itsaky.lsp.java.providers.JavaCompletionProvider; import com.itsaky.lsp.java.providers.SignatureProvider; import com.itsaky.lsp.java.models.JavaServerConfiguration; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/ParseTask.java b/lsp/java/src/main/java/com/itsaky/lsp/java/ParseTask.java deleted file mode 100644 index 4904e99d4..000000000 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/ParseTask.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.itsaky.lsp.java; - -import com.sun.source.tree.CompilationUnitTree; -import com.sun.source.util.JavacTask; - -public class ParseTask { - public final JavacTask task; - public final CompilationUnitTree root; - - public ParseTask(JavacTask task, CompilationUnitTree root) { - this.task = task; - this.root = root; - } -} diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/ScanClassPath.java b/lsp/java/src/main/java/com/itsaky/lsp/java/ScanClassPath.java deleted file mode 100644 index 58c173b67..000000000 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/ScanClassPath.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.itsaky.lsp.java; - -import androidx.annotation.NonNull; - -import com.google.common.reflect.ClassPath; -import com.itsaky.androidide.utils.Logger; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLClassLoader; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; -import java.util.HashSet; -import java.util.Locale; -import java.util.Set; - -import jdk.internal.jrtfs.JrtFileSystemProvider; - -class ScanClassPath { - - // TODO delete this and implement findPublicTypeDeclarationInJdk some other way - /** All exported modules that are present in JDK 10 or 11 */ - static String[] JDK_MODULES = { - "java.activation", - "java.base", - "java.compiler", - "java.corba", - "java.datatransfer", - "java.desktop", - "java.instrument", - "java.jnlp", - "java.logging", - "java.management", - "java.management.rmi", - "java.naming", - "java.net.http", - "java.prefs", - "java.rmi", - "java.scripting", - "java.se", - "java.se.ee", - "java.security.jgss", - "java.security.sasl", - "java.smartcardio", - "java.sql", - "java.sql.rowset", - "java.transaction", - "java.transaction.xa", - "java.xml", - "java.xml.bind", - "java.xml.crypto", - "java.xml.ws", - "java.xml.ws.annotation", - "javafx.base", - "javafx.controls", - "javafx.fxml", - "javafx.graphics", - "javafx.media", - "javafx.swing", - "javafx.web", - "jdk.accessibility", - "jdk.aot", - "jdk.attach", - "jdk.charsets", - "jdk.compiler", - "jdk.crypto.cryptoki", - "jdk.crypto.ec", - "jdk.dynalink", - "jdk.editpad", - "jdk.hotspot.agent", - "jdk.httpserver", - "jdk.incubator.httpclient", - "jdk.internal.ed", - "jdk.internal.jvmstat", - "jdk.internal.le", - "jdk.internal.opt", - "jdk.internal.vm.ci", - "jdk.internal.vm.compiler", - "jdk.internal.vm.compiler.management", - "jdk.jartool", - "jdk.javadoc", - "jdk.jcmd", - "jdk.jconsole", - "jdk.jdeps", - "jdk.jdi", - "jdk.jdwp.agent", - "jdk.jfr", - "jdk.jlink", - "jdk.jshell", - "jdk.jsobject", - "jdk.jstatd", - "jdk.localedata", - "jdk.management", - "jdk.management.agent", - "jdk.management.cmm", - "jdk.management.jfr", - "jdk.management.resource", - "jdk.naming.dns", - "jdk.naming.rmi", - "jdk.net", - "jdk.pack", - "jdk.packager.services", - "jdk.rmic", - "jdk.scripting.nashorn", - "jdk.scripting.nashorn.shell", - "jdk.sctp", - "jdk.security.auth", - "jdk.security.jgss", - "jdk.snmp", - "jdk.unsupported", - "jdk.unsupported.desktop", - "jdk.xml.dom", - "jdk.zipfs", - }; - - static Set classPathTopLevelClasses(Set classPath) { - LOG.info(String.format(Locale.getDefault (), "Searching for top-level classes in %d classpath locations", classPath.size())); - - URL[] urls = classPath.stream().map(ScanClassPath::toUrl).toArray(URL[]::new); - ClassLoader classLoader = new URLClassLoader(urls, null); - - ClassPath scanner; - - try { - scanner = ClassPath.from(classLoader); - } catch (IOException e) { - throw new RuntimeException(e); - } - - Set classes = new HashSet(); - for (ClassPath.ClassInfo c : scanner.getTopLevelClasses()) { - classes.add(c.getName()); - } - - LOG.info(String.format(Locale.ROOT, "Found %d classes in classpath", classes.size())); - - return classes; - } - - private static URL toUrl(@NonNull Path p) { - try { - return p.toUri().toURL(); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - - private static final Logger LOG = Logger.instance ("ScanClassPath"); -} diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileBatch.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileBatch.java similarity index 84% rename from lsp/java/src/main/java/com/itsaky/lsp/java/CompileBatch.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileBatch.java index 77633f008..d3bed8c9b 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileBatch.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileBatch.java @@ -1,7 +1,26 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.compiler; import com.itsaky.androidide.utils.Environment; import com.itsaky.androidide.utils.Logger; +import com.itsaky.lsp.java.FileStore; +import com.itsaky.lsp.java.parser.Parser; import com.sun.source.tree.CompilationUnitTree; import com.sun.source.util.JavacTask; @@ -21,7 +40,7 @@ import javax.lang.model.element.Name; import javax.tools.Diagnostic; import javax.tools.JavaFileObject; -class CompileBatch implements AutoCloseable { +public class CompileBatch implements AutoCloseable { final JavaCompilerService parent; static ReusableCompiler.Borrow borrow; @@ -61,7 +80,7 @@ class CompileBatch implements AutoCloseable { Set needsAdditionalSources () { // Check for "class not found errors" that refer to package private classes Set addFiles = new HashSet (); - for (Diagnostic err : parent.diags) { + for (Diagnostic err : parent.diagnostics) { if (!err.getCode ().equals ("compiler.err.cant.resolve.location")) { continue; } @@ -112,11 +131,11 @@ class CompileBatch implements AutoCloseable { private static ReusableCompiler.Borrow batchTask (JavaCompilerService parent, Collection sources) { - parent.diags.clear (); + parent.diagnostics.clear (); final Iterable options = options (parent.classPath); return parent.compiler.getTask (parent.fileManager, - parent.diags::add, + parent.diagnostics::add, options, Collections.emptyList (), sources); diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileTask.java similarity index 68% rename from lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileTask.java index 6761f4e4a..f261cdf68 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompileTask.java @@ -1,7 +1,25 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.compiler; import androidx.annotation.NonNull; +import com.itsaky.lsp.java.compiler.CompileBatch; import com.sun.source.tree.CompilationUnitTree; import com.sun.source.util.JavacTask; import java.nio.file.Path; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/CompilerProvider.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompilerProvider.java similarity index 52% rename from lsp/java/src/main/java/com/itsaky/lsp/java/CompilerProvider.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompilerProvider.java index 3d83773bb..e638ca7e4 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/CompilerProvider.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/CompilerProvider.java @@ -1,6 +1,23 @@ -package com.itsaky.lsp.java; +/* + * 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 . + */ -import com.itsaky.lsp.java.utils.SynchronizedTask; +package com.itsaky.lsp.java.compiler; + +import com.itsaky.lsp.java.parser.ParseTask; import java.nio.file.Path; import java.nio.file.Paths; @@ -8,6 +25,7 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; + import javax.tools.JavaFileObject; public interface CompilerProvider { diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/JavaCompilerService.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/JavaCompilerService.java similarity index 91% rename from lsp/java/src/main/java/com/itsaky/lsp/java/JavaCompilerService.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/JavaCompilerService.java index 206fb1e7e..91887cd77 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/JavaCompilerService.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/JavaCompilerService.java @@ -1,8 +1,30 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.compiler; import com.itsaky.androidide.utils.Logger; +import com.itsaky.lsp.java.FileStore; +import com.itsaky.lsp.java.parser.ParseTask; +import com.itsaky.lsp.java.parser.Parser; +import com.itsaky.lsp.java.utils.ScanClassPath; +import com.itsaky.lsp.java.utils.Cache; import com.itsaky.lsp.java.utils.Extractors; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.utils.StringSearch; import com.itsaky.lsp.java.visitors.FindTypeDeclarations; import com.sun.source.tree.CompilationUnitTree; @@ -28,7 +50,7 @@ import javax.tools.Diagnostic; import javax.tools.JavaFileObject; import javax.tools.StandardLocation; -class JavaCompilerService implements CompilerProvider { +public class JavaCompilerService implements CompilerProvider { private CompileBatch cachedCompile; @@ -37,14 +59,14 @@ class JavaCompilerService implements CompilerProvider { final ReusableCompiler compiler = new ReusableCompiler (); final SynchronizedTask synchronizedTask = new SynchronizedTask (); final ReentrantLock lock = new ReentrantLock (); - final List> diags = new ArrayList<> (); + final List> diagnostics = new ArrayList<> (); final Map cachedModified = new HashMap<> (); // Use the same file manager for multiple tasks, so we don't repeatedly re-compile the same files // TODO intercept files that aren't in the batch and erase method bodies so compilation is faster final SourceFileManager fileManager; - JavaCompilerService (Set classPath, Set docPath) { + public JavaCompilerService (Set classPath, Set docPath) { LOG.debug ("Class path:"); for (Path p : classPath) { LOG.debug (" " + p); @@ -341,7 +363,7 @@ class JavaCompilerService implements CompilerProvider { public synchronized SynchronizedTask compile (Collection sources) { synchronized (synchronizedTask) { final CompileBatch compile = compileBatch (sources); - final CompileTask compileTask = new CompileTask (compile, diags); + final CompileTask compileTask = new CompileTask (compile, diagnostics); synchronizedTask.setTask (compileTask); return synchronizedTask; } diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/ReusableCompiler.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/ReusableCompiler.java similarity index 89% rename from lsp/java/src/main/java/com/itsaky/lsp/java/ReusableCompiler.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/ReusableCompiler.java index f14923a8d..224513e05 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/ReusableCompiler.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/ReusableCompiler.java @@ -1,36 +1,31 @@ -// Forked from JavacTaskImpl /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This file is part of AndroidIDE. * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. + * 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. * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). + * 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 version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . */ -package com.itsaky.lsp.java; +// Forked from JavacTaskImpl +package com.itsaky.lsp.java.compiler; import com.itsaky.androidide.utils.Logger; import com.sun.source.util.JavacTask; import com.sun.source.util.TaskEvent; import com.sun.source.util.TaskListener; -import com.sun.tools.javac.api.*; +import com.sun.tools.javac.api.JavacTaskImpl; +import com.sun.tools.javac.api.JavacTool; +import com.sun.tools.javac.api.JavacTrees; +import com.sun.tools.javac.api.MultiTaskListener; import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.Annotate; import com.sun.tools.javac.comp.Check; @@ -78,7 +73,7 @@ import javax.tools.JavaFileObject; *

This is NOT part of any supported API. If you write code that depends on this, you do so at your own risk. This * code and its internal interfaces are subject to change or deletion without notice. */ -class ReusableCompiler { +public class ReusableCompiler { private static final Logger LOG = Logger.instance ("ReusableCompiler"); private static final JavacTool systemProvider = JavacTool.create (); diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/SourceFileManager.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SourceFileManager.java similarity index 80% rename from lsp/java/src/main/java/com/itsaky/lsp/java/SourceFileManager.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SourceFileManager.java index 72a1f7d51..d4c2813b3 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/SourceFileManager.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SourceFileManager.java @@ -1,5 +1,24 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.compiler; + +import com.itsaky.lsp.java.FileStore; +import com.itsaky.lsp.java.utils.StringSearch; import com.sun.tools.javac.api.JavacTool; import java.io.File; @@ -12,9 +31,9 @@ import java.util.stream.Stream; import javax.tools.*; -class SourceFileManager extends ForwardingJavaFileManager { +public class SourceFileManager extends ForwardingJavaFileManager { - SourceFileManager() { + public SourceFileManager() { super(createDelegateFileManager()); } @@ -40,7 +59,7 @@ class SourceFileManager extends ForwardingJavaFileManager. + */ + +package com.itsaky.lsp.java.compiler; + +import com.itsaky.lsp.java.FileStore; import java.io.*; import java.net.URI; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/SynchronizedTask.java b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SynchronizedTask.java similarity index 65% rename from lsp/java/src/main/java/com/itsaky/lsp/java/utils/SynchronizedTask.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SynchronizedTask.java index 1111052d1..04bd0569e 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/SynchronizedTask.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/compiler/SynchronizedTask.java @@ -15,9 +15,24 @@ * along with AndroidIDE. If not, see . */ -package com.itsaky.lsp.java.utils; +/* + * 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 . + */ -import com.itsaky.lsp.java.CompileTask; +package com.itsaky.lsp.java.compiler; import java.util.function.Consumer; import java.util.function.Function; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/parser/ParseTask.java b/lsp/java/src/main/java/com/itsaky/lsp/java/parser/ParseTask.java new file mode 100644 index 000000000..763e0ffd3 --- /dev/null +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/parser/ParseTask.java @@ -0,0 +1,31 @@ +/* + * 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.lsp.java.parser; + +import com.sun.source.tree.CompilationUnitTree; +import com.sun.source.util.JavacTask; + +public class ParseTask { + public final JavacTask task; + public final CompilationUnitTree root; + + public ParseTask(JavacTask task, CompilationUnitTree root) { + this.task = task; + this.root = root; + } +} diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/Parser.java b/lsp/java/src/main/java/com/itsaky/lsp/java/parser/Parser.java similarity index 91% rename from lsp/java/src/main/java/com/itsaky/lsp/java/Parser.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/parser/Parser.java index 7be0b859d..9106efdf6 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/Parser.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/parser/Parser.java @@ -1,8 +1,27 @@ -package com.itsaky.lsp.java; +/* + * 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 . + */ -import android.text.TextUtils; +package com.itsaky.lsp.java.parser; import com.itsaky.androidide.utils.Logger; +import com.itsaky.lsp.java.FileStore; +import com.itsaky.lsp.java.compiler.SourceFileManager; +import com.itsaky.lsp.java.compiler.SourceFileObject; +import com.itsaky.lsp.java.utils.StringSearch; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.sun.source.tree.BlockTree; @@ -47,7 +66,7 @@ import javax.lang.model.element.TypeElement; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; -class Parser { +public class Parser { private static final JavaCompiler COMPILER = JavacTool.create (); private static final SourceFileManager FILE_MANAGER = new SourceFileManager (); @@ -66,11 +85,11 @@ class Parser { ); } - final JavaFileObject file; - final String contents; - final JavacTask task; - final CompilationUnitTree root; - final Trees trees; + public final JavaFileObject file; + public final String contents; + public final JavacTask task; + public final CompilationUnitTree root; + public final Trees trees; private Parser (JavaFileObject file) { this.file = file; @@ -88,7 +107,7 @@ class Parser { this.trees = Trees.instance (task); } - static Parser parseFile (Path file) { + public static Parser parseFile (Path file) { return parseJavaFileObject (new SourceFileObject (file)); } @@ -111,7 +130,7 @@ class Parser { cachedModified = file.getLastModified (); } - static Parser parseJavaFileObject (JavaFileObject file) { + public static Parser parseJavaFileObject (JavaFileObject file) { if (needsParse (file)) { loadParse (file); } else { @@ -120,8 +139,8 @@ class Parser { return cachedParse; } - Set packagePrivateClasses () { - Set result = new HashSet (); + public Set packagePrivateClasses () { + Set result = new HashSet<> (); for (Tree t : root.getTypeDecls ()) { if (t instanceof ClassTree) { ClassTree c = (ClassTree) t; @@ -134,7 +153,7 @@ class Parser { return result; } - static Range range (JavacTask task, CharSequence contents, TreePath path) { + public static Range range (JavacTask task, CharSequence contents, TreePath path) { // Find start position Trees trees = Trees.instance (task); SourcePositions pos = trees.getSourcePositions (); @@ -258,7 +277,7 @@ class Parser { return leaf.toString (); } - List accessibleClasses (String partialName, String fromPackage) { + public List accessibleClasses (String partialName, String fromPackage) { String toPackage = Objects.toString (root.getPackageName (), ""); boolean samePackage = fromPackage.equals (toPackage) || toPackage.isEmpty (); List result = new ArrayList (); diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/CodeActionProvider.java b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/CodeActionProvider.java index c695cf1bd..292c8957e 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/CodeActionProvider.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/CodeActionProvider.java @@ -21,8 +21,8 @@ import androidx.annotation.NonNull; import com.itsaky.androidide.utils.Logger; import com.itsaky.lsp.api.ICodeActionProvider; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.rewrite.AddException; import com.itsaky.lsp.java.rewrite.AddImport; import com.itsaky.lsp.java.rewrite.AddSuppressWarningAnnotation; @@ -36,7 +36,7 @@ import com.itsaky.lsp.java.rewrite.RemoveClass; import com.itsaky.lsp.java.rewrite.RemoveException; import com.itsaky.lsp.java.rewrite.RemoveMethod; import com.itsaky.lsp.java.rewrite.Rewrite; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.java.visitors.FindMethodDeclarationAt; import com.itsaky.lsp.java.visitors.FindTypeDeclarationAt; import com.itsaky.lsp.models.CodeActionItem; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/JavaCompletionProvider.java b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/JavaCompletionProvider.java index e2b13286f..e7b4e8dfb 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/JavaCompletionProvider.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/JavaCompletionProvider.java @@ -24,17 +24,17 @@ import androidx.annotation.Nullable; import com.itsaky.androidide.utils.Logger; import com.itsaky.lsp.api.ICompletionProvider; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.FileStore; -import com.itsaky.lsp.java.ParseTask; -import com.itsaky.lsp.java.SourceFileObject; -import com.itsaky.lsp.java.StringSearch; +import com.itsaky.lsp.java.parser.ParseTask; +import com.itsaky.lsp.java.compiler.SourceFileObject; +import com.itsaky.lsp.java.utils.StringSearch; import com.itsaky.lsp.java.rewrite.AddImport; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.utils.Extractors; import com.itsaky.lsp.java.utils.ScopeHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.java.visitors.FindCompletionsAt; import com.itsaky.lsp.java.visitors.PruneMethodBodies; import com.itsaky.lsp.models.Command; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/SignatureProvider.java b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/SignatureProvider.java index 6c48a19e9..744ee649d 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/providers/SignatureProvider.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/providers/SignatureProvider.java @@ -20,14 +20,14 @@ package com.itsaky.lsp.java.providers; import androidx.annotation.NonNull; import com.itsaky.lsp.api.ISignatureHelpProvider; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.MarkdownHelper; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.utils.MarkdownHelper; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.utils.ScopeHelper; import com.itsaky.lsp.java.utils.ShortTypePrinter; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.java.visitors.FindInvocationAt; import com.itsaky.lsp.models.ParameterInformation; import com.itsaky.lsp.models.SignatureHelp; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddException.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddException.java index 5ed02fb05..0f2023838 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddException.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddException.java @@ -17,10 +17,9 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddImport.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddImport.java index 68a7654fe..313f29d2b 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddImport.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddImport.java @@ -17,8 +17,8 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddSuppressWarningAnnotation.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddSuppressWarningAnnotation.java index 4d5c03fe3..8c48018ef 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddSuppressWarningAnnotation.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/AddSuppressWarningAnnotation.java @@ -17,11 +17,10 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertFieldToBlock.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertFieldToBlock.java index 8a4209622..04a1ccfb1 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertFieldToBlock.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertFieldToBlock.java @@ -17,8 +17,8 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertVariableToStatement.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertVariableToStatement.java index 6f2463acd..3fc9b6905 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertVariableToStatement.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ConvertVariableToStatement.java @@ -17,8 +17,8 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.visitors.FindVariableAt; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/CreateMissingMethod.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/CreateMissingMethod.java index 18f8c69f9..e58c2231a 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/CreateMissingMethod.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/CreateMissingMethod.java @@ -18,10 +18,10 @@ package com.itsaky.lsp.java.rewrite; import com.itsaky.androidide.utils.Logger; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.EditHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.java.visitors.FindMethodCallAt; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/GenerateRecordConstructor.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/GenerateRecordConstructor.java index 46b754201..9fa3092c8 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/GenerateRecordConstructor.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/GenerateRecordConstructor.java @@ -18,10 +18,10 @@ package com.itsaky.lsp.java.rewrite; import com.itsaky.androidide.utils.Logger; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.EditHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ImplementAbstractMethods.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ImplementAbstractMethods.java index 4b04f3076..28df76a11 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ImplementAbstractMethods.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/ImplementAbstractMethods.java @@ -18,12 +18,12 @@ package com.itsaky.lsp.java.rewrite; import com.itsaky.androidide.utils.Logger; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/OverrideInheritedMethod.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/OverrideInheritedMethod.java index eb20a69fd..d530e5cac 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/OverrideInheritedMethod.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/OverrideInheritedMethod.java @@ -17,12 +17,11 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.java.visitors.FindTypeDeclarationAt; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveClass.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveClass.java index 2e036968d..72d4271fd 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveClass.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveClass.java @@ -17,8 +17,8 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompilerProvider; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.visitors.FindTypeDeclarationAt; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveException.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveException.java index 7711c076f..f1bd0fef2 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveException.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveException.java @@ -17,10 +17,9 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.Position; import com.itsaky.lsp.models.Range; import com.itsaky.lsp.models.TextEdit; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveMethod.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveMethod.java index ab643356b..1fe3ce9d7 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveMethod.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RemoveMethod.java @@ -16,11 +16,10 @@ */ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.java.utils.EditHelper; import com.itsaky.lsp.java.utils.FindHelper; -import com.itsaky.lsp.java.utils.SynchronizedTask; +import com.itsaky.lsp.java.compiler.SynchronizedTask; import com.itsaky.lsp.models.TextEdit; import com.sun.source.tree.MethodTree; import com.sun.source.util.Trees; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/Rewrite.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/Rewrite.java index d19181b40..9028aac7f 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/Rewrite.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/Rewrite.java @@ -17,12 +17,10 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; -import com.itsaky.lsp.models.Range; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.models.TextEdit; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Collections; import java.util.Map; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RewriteNotSupported.java b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RewriteNotSupported.java index 461e1f167..c8e2b9b8c 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RewriteNotSupported.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/rewrite/RewriteNotSupported.java @@ -17,7 +17,7 @@ package com.itsaky.lsp.java.rewrite; -import com.itsaky.lsp.java.CompilerProvider; +import com.itsaky.lsp.java.compiler.CompilerProvider; import com.itsaky.lsp.models.TextEdit; import java.nio.file.Path; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/Cache.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/Cache.java similarity index 72% rename from lsp/java/src/main/java/com/itsaky/lsp/java/Cache.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/utils/Cache.java index c9fbc872b..b1bb565fe 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/Cache.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/Cache.java @@ -1,4 +1,23 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.utils; + +import com.itsaky.lsp.java.FileStore; import java.nio.file.Path; import java.time.Instant; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/FindHelper.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/FindHelper.java index 8ab1cae3b..6ca5c8f84 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/FindHelper.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/FindHelper.java @@ -17,8 +17,8 @@ package com.itsaky.lsp.java.utils; -import com.itsaky.lsp.java.CompileTask; -import com.itsaky.lsp.java.ParseTask; +import com.itsaky.lsp.java.compiler.CompileTask; +import com.itsaky.lsp.java.parser.ParseTask; import com.itsaky.lsp.java.visitors.FindTypeDeclarationNamed; import com.itsaky.lsp.models.Location; import com.itsaky.lsp.models.Position; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/MarkdownHelper.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/MarkdownHelper.java similarity index 89% rename from lsp/java/src/main/java/com/itsaky/lsp/java/MarkdownHelper.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/utils/MarkdownHelper.java index 8d31655f3..9a69b6e79 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/MarkdownHelper.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/MarkdownHelper.java @@ -1,4 +1,21 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.utils; import com.itsaky.lsp.models.MarkupContent; import com.itsaky.lsp.models.MarkupKind; @@ -194,7 +211,7 @@ public class MarkdownHelper { } /** If `commentText` looks like HTML, convert it to markdown */ - static String asMarkdown(String commentText) { + public static String asMarkdown(String commentText) { if (isHtml(commentText)) { commentText = htmlToMarkdown(commentText); } diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScanClassPath.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScanClassPath.java new file mode 100644 index 000000000..9df450b0b --- /dev/null +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScanClassPath.java @@ -0,0 +1,69 @@ +/* + * 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.lsp.java.utils; + +import androidx.annotation.NonNull; + +import com.google.common.reflect.ClassPath; +import com.itsaky.androidide.utils.Logger; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +public class ScanClassPath { + + public static Set classPathTopLevelClasses(Set classPath) { + LOG.info(String.format(Locale.getDefault (), "Searching for top-level classes in %d classpath locations", classPath.size())); + + URL[] urls = classPath.stream().map(ScanClassPath::toUrl).toArray(URL[]::new); + ClassLoader classLoader = new URLClassLoader(urls, null); + + ClassPath scanner; + + try { + scanner = ClassPath.from(classLoader); + } catch (IOException e) { + throw new RuntimeException(e); + } + + Set classes = new HashSet<> (); + for (ClassPath.ClassInfo c : scanner.getTopLevelClasses()) { + classes.add(c.getName()); + } + + LOG.info(String.format(Locale.ROOT, "Found %d classes in classpath", classes.size())); + + return classes; + } + + private static URL toUrl(@NonNull Path p) { + try { + return p.toUri().toURL(); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + private static final Logger LOG = Logger.instance ("ScanClassPath"); +} diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScopeHelper.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScopeHelper.java index dc59e01ed..47ac2b269 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScopeHelper.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/ScopeHelper.java @@ -17,7 +17,7 @@ package com.itsaky.lsp.java.utils; -import com.itsaky.lsp.java.CompileTask; +import com.itsaky.lsp.java.compiler.CompileTask; import com.sun.source.tree.Scope; import com.sun.source.util.Trees; diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/StringSearch.java b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/StringSearch.java similarity index 93% rename from lsp/java/src/main/java/com/itsaky/lsp/java/StringSearch.java rename to lsp/java/src/main/java/com/itsaky/lsp/java/utils/StringSearch.java index 63b3d65dd..78b0917fc 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/StringSearch.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/utils/StringSearch.java @@ -1,4 +1,23 @@ -package com.itsaky.lsp.java; +/* + * 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.lsp.java.utils; + +import com.itsaky.lsp.java.FileStore; import java.io.BufferedReader; import java.io.IOException; @@ -150,7 +169,7 @@ public class StringSearch { return startsWord (text, offset) && endsWord (text, offset + pattern.length - 1); } - int nextWord (String text) { + private int nextWord (String text) { return nextWord (text.getBytes ()); } @@ -218,7 +237,7 @@ public class StringSearch { private static final ByteBuffer SEARCH_BUFFER = ByteBuffer.allocateDirect (1024 * 1024); // TODO cache the progress made by searching shorter queries - static boolean containsWordMatching (Path java, String query) { + public static boolean containsWordMatching (Path java, String query) { if (FileStore.activeDocuments ().contains (java)) { String text = FileStore.contents (java); return matchesTitleCase (text, query); @@ -240,7 +259,7 @@ public class StringSearch { } } - static boolean containsWord (Path java, String query) { + public static boolean containsWord (Path java, String query) { StringSearch search = new StringSearch (query); if (FileStore.activeDocuments ().contains (java)) { byte[] text = FileStore.contents (java).getBytes (); @@ -349,7 +368,7 @@ public class StringSearch { return Character.isAlphabetic (c) || Character.isDigit (c) || c == '_' || c == '$'; } - static boolean containsType (Path file, TypeElement el) { + public static boolean containsType (Path file, TypeElement el) { switch (el.getKind ()) { case INTERFACE: return containsInterface (file, el.getSimpleName ().toString ()); @@ -381,13 +400,13 @@ public class StringSearch { } // TODO this doesn't work for inner classes, eliminate - static String mostName (String name) { + public static String mostName (String name) { int lastDot = name.lastIndexOf ('.'); return lastDot == -1 ? "" : name.substring (0, lastDot); } // TODO this doesn't work for inner classes, eliminate - static String lastName (String name) { + public static String lastName (String name) { int i = name.lastIndexOf ('.'); if (i == -1) { return name; @@ -396,7 +415,7 @@ public class StringSearch { } } - static String fileName (URI uri) { + public static String fileName (URI uri) { String[] parts = uri.toString ().split ("/"); if (parts.length == 0) { return ""; @@ -404,7 +423,7 @@ public class StringSearch { return parts[parts.length - 1]; } - static String packageName (Path file) { + public static String packageName (Path file) { Pattern packagePattern = Pattern.compile ("^package +(.*);"); Pattern startOfClass = Pattern.compile ("^[\\w ]*class +\\w+"); try (BufferedReader lines = FileStore.lines (file)) { diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/visitors/FindNameAt.java b/lsp/java/src/main/java/com/itsaky/lsp/java/visitors/FindNameAt.java index d2e1328d5..e90aa11c7 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/visitors/FindNameAt.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/visitors/FindNameAt.java @@ -17,7 +17,7 @@ package com.itsaky.lsp.java.visitors; -import com.itsaky.lsp.java.CompileTask; +import com.itsaky.lsp.java.compiler.CompileTask; import com.itsaky.lsp.java.utils.FindHelper; import com.sun.source.tree.*; import com.sun.source.util.*;