From 644bf97c0c6f4ae79dfddb563d0a891311695f29 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Tue, 14 Sep 2021 18:24:26 +0530 Subject: [PATCH] Process resources after every change in XML files --- .../itsaky/androidide/DownloadActivity.java | 4 +- .../com/itsaky/androidide/EditorActivity.java | 48 +++++-- .../itsaky/androidide/TerminalActivity.java | 14 +- .../adapters/EditorPagerAdapter.java | 127 ++++++++++-------- .../adapters/SearchListAdapter.java | 2 +- .../androidide/fragments/EditorFragment.java | 1 - .../java/server/JavaLanguageServer.java | 8 +- .../androidide/managers/ToolsManager.java | 4 +- .../models/CompletionItemWrapper.java | 2 +- .../itsaky/androidide/models/SaveResult.java | 24 ++++ .../androidide/services/IDEService.java | 68 +++++++++- .../itsaky/androidide/shell/ShellServer.java | 14 +- .../androidide/sockets/SocketConnection.java | 4 +- .../androidide/tasks/BaseGradleTask.java | 5 + .../itsaky/androidide/tasks/GradleTask.java | 1 + .../tasks/gradle/lint/LintDebug.java | 2 +- .../tasks/gradle/lint/LintRelease.java | 2 +- .../gradle/plugin/InitializeIDEProject.java | 2 +- .../resources/ProcessDebugResources.java | 5 + .../itsaky/androidide/utils/Environment.java | 2 +- .../com/itsaky/androidide/utils/Logger.java | 10 +- .../rosemoe/editor/widget/CodeEditor.java | 4 +- .../res/layout/layout_editor_file_tree.xml | 7 +- .../lsp/DidChangeWatchedFilesParams.java | 4 + 24 files changed, 249 insertions(+), 115 deletions(-) create mode 100644 app/src/main/java/com/itsaky/androidide/models/SaveResult.java diff --git a/app/src/main/java/com/itsaky/androidide/DownloadActivity.java b/app/src/main/java/com/itsaky/androidide/DownloadActivity.java index 74e9b573a..b56c9dde0 100644 --- a/app/src/main/java/com/itsaky/androidide/DownloadActivity.java +++ b/app/src/main/java/com/itsaky/androidide/DownloadActivity.java @@ -109,12 +109,12 @@ public class DownloadActivity extends StudioActivity { } sb.append("echo 'Cleaning unsupported flags in binaries...' && $BUSYBOX find $JAVA_HOME -type f -exec androidide-cleaner {} \\; && "); sb.append("echo " + DONE); - LOG.d("Installation commands ", sb.toString().replace("&&", "\n")); + LOG.debug("Installation commands ", sb.toString().replace("&&", "\n")); server.bgAppend(sb.toString()); } private void checkInstalled(CharSequence out) { - LOG.v("Installation output: ", out); + LOG.verbose("Installation output: ", out); if(out != null) { final String line = out.toString().trim(); runOnUiThread(() -> { diff --git a/app/src/main/java/com/itsaky/androidide/EditorActivity.java b/app/src/main/java/com/itsaky/androidide/EditorActivity.java index 1fceb528c..bed094461 100644 --- a/app/src/main/java/com/itsaky/androidide/EditorActivity.java +++ b/app/src/main/java/com/itsaky/androidide/EditorActivity.java @@ -122,6 +122,7 @@ import java.util.Stack; import java.util.regex.Pattern; import me.piruin.quickaction.ActionItem; import me.piruin.quickaction.QuickAction; +import com.itsaky.androidide.models.SaveResult; public class EditorActivity extends StudioActivity implements FileTreeFragment.FileActionListener, IDEService.BuildListener, @@ -505,7 +506,14 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F } else if (id == R.id.menuEditor_lintRelease) { getBuildService().lintRelease(); } else if (id == R.id.menuEditor_save) { - saveAll(); + /** + * 1. Notify that all files are saved + * 2. If there were any XML files modified, call ':app:processDebugResources' task + * + * This will make sure that we generate view bindings and R.jar at proper time + * This will further result in updated code completion + */ + saveAll(true, true); } else if (id == R.id.menuEditor_undo && this.mCurrentFragment != null && this.mCurrentFragment.isVisible()) { this.mCurrentFragment.undo(); } else if (id == R.id.menuEditor_redo && this.mCurrentFragment != null && this.mCurrentFragment.isVisible()) { @@ -740,7 +748,7 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F @Override public void saveFiles() { - saveAll(); + saveAll(false, false); } // Can be called from a different different, better to run on UI thread @@ -961,7 +969,6 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F File file = new File(params.uri); if(!(file.exists() && file.isFile())) return; - diagnostics.put(file, params.diagnostics); getDiagnosticsList().setAdapter(new DiagnosticsAdapter(mapAsGroup(diagnostics), this)); @@ -1158,7 +1165,7 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F openFileAndSelect(file, range); } } catch (Throwable th) { - Logger.instance().e(ThrowableUtils.getFullStackTrace(th)); + Logger.instance().error(ThrowableUtils.getFullStackTrace(th)); } } @@ -1228,7 +1235,7 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F ); results.put(file, matches); } catch (Throwable th) { - Logger.instance().e(ThrowableUtils.getFullStackTrace(th)); + Logger.instance().error(ThrowableUtils.getFullStackTrace(th)); } } @@ -1521,11 +1528,32 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F getFileOptionsFragment(thisFile).show(getSupportFragmentManager(), TAG_FILE_OPTIONS_FRAGMENT); } - private boolean saveAll() { - boolean isGradleSaved = mPagerAdapter.saveAll(); - getApp().toast(R.string.all_saved, Toaster.Type.SUCCESS); - if(isGradleSaved) notifySyncNeeded(); - return isGradleSaved; + private boolean saveAll() { + return saveAll(true); + } + + private boolean saveAll(boolean notify) { + return saveAll(notify, false); + } + + private boolean saveAll(boolean notify, boolean canProcessResources) { + SaveResult result = mPagerAdapter.saveAll(); + if(notify) { + getApp().toast(R.string.all_saved, Toaster.Type.SUCCESS); + } + if(result.gradleSaved){ + notifySyncNeeded(); + } + LOG.info( + "saveAll()", + "notify:" + notify, + "processResources:" + canProcessResources, + "xmlSaved:" + result.xmlSaved, + "gradleSaved:" + result.gradleSaved); + if(result.xmlSaved && canProcessResources && getBuildService() != null) { + getBuildService().processDebugResources(); + } + return result.gradleSaved; } private void handleOptionClick(SheetOption o) { diff --git a/app/src/main/java/com/itsaky/androidide/TerminalActivity.java b/app/src/main/java/com/itsaky/androidide/TerminalActivity.java index a23d70068..f0a036eee 100644 --- a/app/src/main/java/com/itsaky/androidide/TerminalActivity.java +++ b/app/src/main/java/com/itsaky/androidide/TerminalActivity.java @@ -326,37 +326,37 @@ public class TerminalActivity extends StudioActivity { @Override public void logError(String tag, String message) { - LOG.e(message); + LOG.error(message); } @Override public void logWarn(String tag, String message) { - LOG.w(message); + LOG.warn(message); } @Override public void logInfo(String tag, String message) { - LOG.i(message); + LOG.info(message); } @Override public void logDebug(String tag, String message) { - LOG.d(message); + LOG.debug(message); } @Override public void logVerbose(String tag, String message) { - LOG.v(message); + LOG.verbose(message); } @Override public void logStackTraceWithMessage(String tag, String message, Exception e) { - LOG.e(message, ThrowableUtils.getFullStackTrace(e)); + LOG.error(message, e); } @Override public void logStackTrace(String tag, Exception e) { - LOG.e(e.getMessage(), ThrowableUtils.getFullStackTrace(e)); + LOG.error(e.getMessage(), e); } } } diff --git a/app/src/main/java/com/itsaky/androidide/adapters/EditorPagerAdapter.java b/app/src/main/java/com/itsaky/androidide/adapters/EditorPagerAdapter.java index 8b744edda..d7d0d9933 100644 --- a/app/src/main/java/com/itsaky/androidide/adapters/EditorPagerAdapter.java +++ b/app/src/main/java/com/itsaky/androidide/adapters/EditorPagerAdapter.java @@ -4,131 +4,146 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import com.itsaky.androidide.fragments.EditorFragment; +import com.itsaky.androidide.interfaces.JLSRequestor; import com.itsaky.androidide.models.AndroidProject; -import io.github.rosemoe.editor.widget.CodeEditor; +import com.itsaky.androidide.models.SaveResult; +import com.itsaky.lsp.Range; import java.io.File; import java.util.ArrayList; import java.util.List; -import com.itsaky.androidide.interfaces.JLSRequestor; -import com.itsaky.lsp.Range; +import com.itsaky.androidide.utils.Logger; -public class EditorPagerAdapter extends FragmentStatePagerAdapter -{ +public class EditorPagerAdapter extends FragmentStatePagerAdapter { private ArrayList mOpenedFiles; private ArrayList mFragments; private AndroidProject project; - - public EditorPagerAdapter(FragmentManager manager, AndroidProject project) - { + + private static final Logger LOG = Logger.instance("EditorPagerAdapter"); + + public EditorPagerAdapter(FragmentManager manager, AndroidProject project) { super(manager); this.project = project; this.mOpenedFiles = new ArrayList<>(); this.mFragments = new ArrayList<>(); } - - public EditorPagerAdapter(FragmentManager manager, AndroidProject project, List fragments, List files) - { + + public EditorPagerAdapter(FragmentManager manager, AndroidProject project, List fragments, List files) { super(manager); this.project = project; this.mOpenedFiles = new ArrayList<>(); this.mFragments = new ArrayList<>(); - + mOpenedFiles.addAll(files); mFragments.addAll(fragments); } - + public int findIndexOfEditorByFile(File file) { - for(int i=0;i= 0 && index < mFragments.size()) { - boolean hasGradle = false; + + public void save(int index, SaveResult result) { + if (index >= 0 && index < mFragments.size()) { EditorFragment frag = getFrag(index); - hasGradle = frag.isModified() && frag.getFile().getName().endsWith(EditorFragment.EXT_GRADLE); + + /** + * Must be called before frag.save() + * Otherwise, it'll always return false + */ + final boolean modified = frag.isModified(); + frag.save(); - return hasGradle; + + final boolean isGradle = frag.getFile().getName().endsWith(EditorFragment.EXT_GRADLE); + final boolean isXml = frag.getFile().getName().endsWith(EditorFragment.EXT_XML); + + LOG.info("Save file: " + frag.getFile(), + "isModified:" + modified, + "isGradle:" + isGradle, + "isXml:" + isXml); + + if (!result.gradleSaved) { + result.gradleSaved = modified && isGradle; + } + + if (!result.xmlSaved) { + result.xmlSaved = modified && isXml; + } } - return false; } - + public EditorFragment getFrag(int index) { return (EditorFragment) getItem(index); } - + public List getFragments() { return mFragments; } - + public List getOpenedFiles() { return mOpenedFiles; } - + @Override - public Fragment getItem(int p1) - { + public Fragment getItem(int p1) { return p1 < 0 || p1 >= mFragments.size() ? null : mFragments.get(p1); } - + @Override - public int getCount() - { + public int getCount() { return mFragments.size(); } @Override - public CharSequence getPageTitle(int position) - { - return mOpenedFiles.get(position).getName(); + public CharSequence getPageTitle(int position) { + String title = mOpenedFiles.get(position).getName(); + if(getFrag(position).isModified()) + title += "*"; + return title; } } diff --git a/app/src/main/java/com/itsaky/androidide/adapters/SearchListAdapter.java b/app/src/main/java/com/itsaky/androidide/adapters/SearchListAdapter.java index ad896cd4d..afcc4f5c2 100644 --- a/app/src/main/java/com/itsaky/androidide/adapters/SearchListAdapter.java +++ b/app/src/main/java/com/itsaky/androidide/adapters/SearchListAdapter.java @@ -89,7 +89,7 @@ public class SearchListAdapter extends RecyclerView.Adapter binding.text.setText(sb)); } catch (Exception e) { - Logger.instance().e(ThrowableUtils.getFullStackTrace(e)); + Logger.instance().error(ThrowableUtils.getFullStackTrace(e)); ThreadUtils.runOnUiThread(() -> binding.text.setText(match.match)); } }).start(); diff --git a/app/src/main/java/com/itsaky/androidide/fragments/EditorFragment.java b/app/src/main/java/com/itsaky/androidide/fragments/EditorFragment.java index 7cac089be..bedd5f2db 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/EditorFragment.java +++ b/app/src/main/java/com/itsaky/androidide/fragments/EditorFragment.java @@ -353,7 +353,6 @@ public class EditorFragment extends BaseFragment implements EditorEventListener @Override public void onNewTextSet(CodeEditor editor) { - isModified = true; } @Override diff --git a/app/src/main/java/com/itsaky/androidide/language/java/server/JavaLanguageServer.java b/app/src/main/java/com/itsaky/androidide/language/java/server/JavaLanguageServer.java index f0767556b..f545c486a 100644 --- a/app/src/main/java/com/itsaky/androidide/language/java/server/JavaLanguageServer.java +++ b/app/src/main/java/com/itsaky/androidide/language/java/server/JavaLanguageServer.java @@ -113,7 +113,7 @@ public class JavaLanguageServer implements ShellServer.Callback { }); } socket.close(); - LOG.i("Socket disconnected"); + LOG.info("Socket disconnected"); } catch (Throwable e) { logEx(e); } @@ -268,7 +268,7 @@ public class JavaLanguageServer implements ShellServer.Callback { send.write(bodyBytes); send.flush(); } catch (Throwable e) { - LOG.e("Error writing to server: " + ThrowableUtils.getFullStackTrace(e)); + LOG.error("Error writing to server: " + ThrowableUtils.getFullStackTrace(e)); } }).start(); } @@ -285,7 +285,7 @@ public class JavaLanguageServer implements ShellServer.Callback { } private void logEx(Throwable th) { - LOG.e(ThrowableUtils.getFullStackTrace(th)); + LOG.error(ThrowableUtils.getFullStackTrace(th)); } @Override @@ -353,7 +353,7 @@ public class JavaLanguageServer implements ShellServer.Callback { } } } catch (Throwable th) { - LOG.e("onServerOut", line, ThrowableUtils.getFullStackTrace(th)); + LOG.error("onServerOut", line, ThrowableUtils.getFullStackTrace(th)); } } diff --git a/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java b/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java index 30a866e0a..e00924ee9 100644 --- a/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java +++ b/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java @@ -193,8 +193,8 @@ public class ToolsManager { + "\n }" + "\n " + "\n project.afterEvaluate {" - + "\n project.tasks.getByName(\'assembleDebug\').finalizedBy(\'initializeIDEProject\')" - + "\n project.tasks.getByName(\'assembleRelease\').finalizedBy(\'initializeIDEProject\')" + + "\n project.tasks.getByName(\'compileDebugJavaWithJavac\').finalizedBy(\'initializeIDEProject\')" + + "\n project.tasks.getByName(\'compileReleaseJavaWithJavac\').finalizedBy(\'initializeIDEProject\')" + "\n }" + "\n }" + "\n " diff --git a/app/src/main/java/com/itsaky/androidide/models/CompletionItemWrapper.java b/app/src/main/java/com/itsaky/androidide/models/CompletionItemWrapper.java index a10e013c4..045e62099 100644 --- a/app/src/main/java/com/itsaky/androidide/models/CompletionItemWrapper.java +++ b/app/src/main/java/com/itsaky/androidide/models/CompletionItemWrapper.java @@ -106,7 +106,7 @@ public class CompletionItemWrapper implements SuggestItem, Comparable { CharPosition startPos = content.getIndexer().getCharPosition(start); CharPosition endPos = content.getIndexer().getCharPosition(end); - Logger.instance("CompletionItemWrapper").d("PartialIdentifer Range: " + start + "," + end + ", text: " + content.subSequence(start, end)); + Logger.instance("CompletionItemWrapper").debug("PartialIdentifer Range: " + start + "," + end + ", text: " + content.subSequence(start, end)); return new Range(new Position(startPos.line, startPos.column), new Position(endPos.line, endPos.column)); } diff --git a/app/src/main/java/com/itsaky/androidide/models/SaveResult.java b/app/src/main/java/com/itsaky/androidide/models/SaveResult.java new file mode 100644 index 000000000..8bae84dc1 --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/models/SaveResult.java @@ -0,0 +1,24 @@ +package com.itsaky.androidide.models; + +/** + * Result obtained when files are saved + */ +public final class SaveResult { + + /** + * Were any Gradle files saved? + */ + public boolean gradleSaved = false; + + /** + * Were any XML files saved? + */ + public boolean xmlSaved = false; + + public SaveResult() {} + + public SaveResult(boolean gradleSaved, boolean xmlSaved) { + this.gradleSaved = gradleSaved; + this.xmlSaved = xmlSaved; + } +} diff --git a/app/src/main/java/com/itsaky/androidide/services/IDEService.java b/app/src/main/java/com/itsaky/androidide/services/IDEService.java index a9dcd8032..b6b8682ee 100644 --- a/app/src/main/java/com/itsaky/androidide/services/IDEService.java +++ b/app/src/main/java/com/itsaky/androidide/services/IDEService.java @@ -26,6 +26,12 @@ import java.util.Date; import java.util.List; import java.util.Locale; import com.itsaky.androidide.tasks.gradle.resources.ProcessDebugResources; +import com.itsaky.androidide.language.java.server.JavaLanguageServer; +import com.itsaky.lsp.DidChangeWatchedFilesParams; +import com.itsaky.lsp.FileEvent; +import com.itsaky.androidide.models.project.IDEModule; +import java.io.FileFilter; +import com.itsaky.lsp.FileChangeType; public class IDEService implements ShellServer.Callback { @@ -107,11 +113,13 @@ public class IDEService implements ShellServer.Callback { listener.onBuildSuccessful(currentTask, charSequence.toString().trim()); appendOutputSeparator(); - if(currentTask != null && currentTask instanceof ProcessDebugResources) { + if(currentTask != null && currentTask.affectsGeneratedSources()) { /** - * An XML file was changed and saved - * Generaring R.jar + * If a task affects generated sources, we have to notify Java Language Server + * + * This is a must. */ + notifyExternalSourceChange(); } } else if(charSequence.toString().contains(BUILD_FAILED)) { @@ -180,6 +188,46 @@ public class IDEService implements ShellServer.Callback { private String getString(@StringRes int id, Object... format) { return app.getString(id, format); } + + /** + * Notifies about an external change event in generated .java files + * Generated source files can be: + * 1. ViewBinding/Databinding sources + * 2. BuildConfig + * We also notify Java language server to reload R.jar + */ + private void notifyExternalSourceChange() { + JavaLanguageServer server = app.getJavaLanguageServer(); + if(mIDEProject == null || server == null) return; + + server.didChangeWatchedFiles(new DidChangeWatchedFilesParams(createSourceChangeEvents())); + } + + /** + * Returns a list of FileEvent representing the change in generated sources + * + * Takes care of adding changes from all modules + */ + private List createSourceChangeEvents() { + final List events = new ArrayList<>(); + for(int i=0;i sources = FileUtils.listFilesInDirWithFilter(generated, JAVA_FILTER, true); + if(sources == null) continue; + for(File source : sources) { + events.add(new FileEvent(source.toURI(), FileChangeType.Changed)); + } + } + return events; + } private String getArguments(List tasks) { final PreferenceManager prefs = app.getPrefManager(); @@ -334,4 +382,18 @@ public class IDEService implements ShellServer.Callback { void appendOutput(GradleTask task, CharSequence text); void prepare(); } + + /** + * This FileFilter is used to list java source files in 'generated' dir + */ + private static final FileFilter JAVA_FILTER = new FileFilter(){ + + @Override + public boolean accept(File p1) { + return p1.isFile() + && !p1.isHidden() + && p1.getName().endsWith(".java") + && !p1.getName().equals("package-info.java"); + } + }; } diff --git a/app/src/main/java/com/itsaky/androidide/shell/ShellServer.java b/app/src/main/java/com/itsaky/androidide/shell/ShellServer.java index 7ec4101bf..36f46bc9d 100644 --- a/app/src/main/java/com/itsaky/androidide/shell/ShellServer.java +++ b/app/src/main/java/com/itsaky/androidide/shell/ShellServer.java @@ -31,20 +31,12 @@ public class ShellServer extends Thread { ProcessBuilder processBuilder = new ProcessBuilder(new String[]{command}); processBuilder.directory(new File(dirPath)); processBuilder.redirectErrorStream(true); + processBuilder.environment().putAll(Environment.getEnvironment(false)); try { this.process = processBuilder.start(); this.output = new BufferedReader(new InputStreamReader(process.getInputStream())); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("ln -sf /apex/com.android.runtime/lib64/bionic/libc.so $JAVA_HOME/lib/librt.so"); - stringBuilder.append("\nln -sf /apex/com.android.runtime/lib64/bionic/libc.so $JAVA_HOME/lib/libpthread.so"); - - final Map envs = Environment.getEnvironment(false); - for(Map.Entry env : envs.entrySet()) { - stringBuilder.append(String.format("\nexport %s=%s", env.getKey(), env.getValue())); - } - append(stringBuilder.toString(), false); } catch (Throwable th) { - LOG.e(ThrowableUtils.getFullStackTrace(th)); + LOG.error(ThrowableUtils.getFullStackTrace(th)); if (callback != null) { String out = ThrowableUtils.getFullStackTrace(th).concat("\n"); callback.output(out); @@ -109,7 +101,7 @@ public class ShellServer extends Thread { this.process.getOutputStream().write(str.concat("\n").getBytes()); this.process.getOutputStream().flush(); } catch (IOException e) { - LOG.e(ThrowableUtils.getFullStackTrace(e)); + LOG.error(ThrowableUtils.getFullStackTrace(e)); } } diff --git a/app/src/main/java/com/itsaky/androidide/sockets/SocketConnection.java b/app/src/main/java/com/itsaky/androidide/sockets/SocketConnection.java index 792b38d48..1bb466c43 100644 --- a/app/src/main/java/com/itsaky/androidide/sockets/SocketConnection.java +++ b/app/src/main/java/com/itsaky/androidide/sockets/SocketConnection.java @@ -44,7 +44,7 @@ public abstract class SocketConnection extends Thread { mWriter.write(message.getBytes()); mWriter.flush(); } catch (Throwable e) { - LOG.e("Error writing to server: " + ex(e)); + LOG.error("Error writing to server: " + ex(e)); } }).start(); } @@ -62,7 +62,7 @@ public abstract class SocketConnection extends Thread { CloseUtils.closeIOQuietly(mWriter, mSocket); onDisconnected(); } catch (Throwable e) { - LOG.e("Failed to connect to socket", ex(e)); + LOG.error("Failed to connect to socket", ex(e)); onFailedToConnect(e); } } diff --git a/app/src/main/java/com/itsaky/androidide/tasks/BaseGradleTask.java b/app/src/main/java/com/itsaky/androidide/tasks/BaseGradleTask.java index 94f3ac2c2..5c447b2c0 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/BaseGradleTask.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/BaseGradleTask.java @@ -4,6 +4,11 @@ import com.itsaky.androidide.services.IDEService; public abstract class BaseGradleTask implements GradleTask { + @Override + public boolean affectsGeneratedSources() { + return false; + } + @Override public boolean shouldSaveFiles() { return getType() == Type.BUILD diff --git a/app/src/main/java/com/itsaky/androidide/tasks/GradleTask.java b/app/src/main/java/com/itsaky/androidide/tasks/GradleTask.java index 52922214d..06f1079c3 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/GradleTask.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/GradleTask.java @@ -9,6 +9,7 @@ public interface GradleTask { public String getCommands(); public List getTasks(); public int getTaskID(); + public boolean affectsGeneratedSources(); public boolean shouldSaveFiles(); public boolean canOutput(); public boolean buildsApk(); diff --git a/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintDebug.java b/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintDebug.java index 2e9671c59..59aab55f2 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintDebug.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintDebug.java @@ -9,7 +9,7 @@ import java.util.Arrays; import java.util.List; public class LintDebug extends BaseGradleTask { - + @Override public String getName() { return StudioApp.getInstance().getString(R.string.lint_debug); diff --git a/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintRelease.java b/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintRelease.java index 6ac5386de..5f6bd1d99 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintRelease.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/gradle/lint/LintRelease.java @@ -9,7 +9,7 @@ import java.util.Arrays; import java.util.List; public class LintRelease extends BaseGradleTask { - + @Override public String getName() { return StudioApp.getInstance().getString(R.string.lint_release); diff --git a/app/src/main/java/com/itsaky/androidide/tasks/gradle/plugin/InitializeIDEProject.java b/app/src/main/java/com/itsaky/androidide/tasks/gradle/plugin/InitializeIDEProject.java index 1d42f3d70..f1ddc7216 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/gradle/plugin/InitializeIDEProject.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/gradle/plugin/InitializeIDEProject.java @@ -7,7 +7,7 @@ import java.util.List; import java.util.Arrays; public class InitializeIDEProject extends BaseGradleTask { - + @Override public String getName() { return "initializeIDEProject"; diff --git a/app/src/main/java/com/itsaky/androidide/tasks/gradle/resources/ProcessDebugResources.java b/app/src/main/java/com/itsaky/androidide/tasks/gradle/resources/ProcessDebugResources.java index bd67e0c35..5233aa435 100644 --- a/app/src/main/java/com/itsaky/androidide/tasks/gradle/resources/ProcessDebugResources.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/gradle/resources/ProcessDebugResources.java @@ -8,6 +8,11 @@ import java.util.Arrays; public class ProcessDebugResources extends BaseGradleTask { + @Override + public boolean affectsGeneratedSources() { + return true; + } + @Override public String getName() { return "processDebugResources"; diff --git a/app/src/main/java/com/itsaky/androidide/utils/Environment.java b/app/src/main/java/com/itsaky/androidide/utils/Environment.java index 54c1f9d6b..f03cabf73 100644 --- a/app/src/main/java/com/itsaky/androidide/utils/Environment.java +++ b/app/src/main/java/com/itsaky/androidide/utils/Environment.java @@ -94,7 +94,7 @@ public final class Environment { } return props; } catch (Throwable th) { - LOG.e("Error reading properties", th); + LOG.error("Error reading properties", th); return props; } } diff --git a/app/src/main/java/com/itsaky/androidide/utils/Logger.java b/app/src/main/java/com/itsaky/androidide/utils/Logger.java index e357f391f..e012136c4 100644 --- a/app/src/main/java/com/itsaky/androidide/utils/Logger.java +++ b/app/src/main/java/com/itsaky/androidide/utils/Logger.java @@ -14,7 +14,7 @@ public class Logger { private static com.elvishew.xlog.Logger xLogger; private static String TAG = "AndroidIDE"; - public Logger w(Object... messages) { + public Logger warn(Object... messages) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(TAG); @@ -64,7 +64,7 @@ public class Logger { return instance; } - public Logger d(Object... messages) { + public Logger debug(Object... messages) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(TAG); @@ -82,7 +82,7 @@ public class Logger { return this; } - public Logger e(Object... messages) { + public Logger error(Object... messages) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(TAG); @@ -102,7 +102,7 @@ public class Logger { return this; } - public Logger v(Object... messages) { + public Logger verbose(Object... messages) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(TAG); @@ -120,7 +120,7 @@ public class Logger { return this; } - public Logger i(Object... messages) { + public Logger info(Object... messages) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(TAG); diff --git a/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java b/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java index c36544579..811352bfe 100644 --- a/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java +++ b/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java @@ -4498,7 +4498,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca params.textDocument = new TextDocumentIdentifier(getFile().toURI()); jlsRequestor.findDefinition(params); } catch (Throwable th) { - Logger.instance("CodeEditor").e(ThrowableUtils.getFullStackTrace(th)); + Logger.instance("CodeEditor").error(ThrowableUtils.getFullStackTrace(th)); } } @@ -4511,7 +4511,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca params.textDocument = new TextDocumentIdentifier(getFile().toURI()); jlsRequestor.findReferences(params); } catch (Throwable th) { - Logger.instance("CodeEditor").e(ThrowableUtils.getFullStackTrace(th)); + Logger.instance("CodeEditor").error(ThrowableUtils.getFullStackTrace(th)); } } diff --git a/app/src/main/res/layout/layout_editor_file_tree.xml b/app/src/main/res/layout/layout_editor_file_tree.xml index 2490d74a3..0d938169e 100644 --- a/app/src/main/res/layout/layout_editor_file_tree.xml +++ b/app/src/main/res/layout/layout_editor_file_tree.xml @@ -3,9 +3,9 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:paddingTop="16dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" + android:paddingTop="8dp" android:paddingBottom="8dp"> changes = new ArrayList<>(); + + public DidChangeWatchedFilesParams(List changes) { + this.changes = changes; + } public DidChangeWatchedFilesParams() { changes = new ArrayList<>();