mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
Regenerate source file when XML files are created/deleted/renamed
This commit is contained in:
Generated
+3
@@ -34,6 +34,9 @@
|
||||
<module name="AndroidIDE.gradle-tooling" target="1.8" />
|
||||
<module name="AndroidIDE.gradle-tooling.plugin" target="1.8" />
|
||||
<module name="AndroidIDE.javac" target="1.8" />
|
||||
<module name="AndroidIDE.lookup" target="11" />
|
||||
<module name="AndroidIDE.lookup.main" target="11" />
|
||||
<module name="AndroidIDE.lookup.test" target="11" />
|
||||
<module name="AndroidIDE.treesitter.test" target="1.7" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.itsaky.androidide.adapters.viewholders.FileTreeViewHolder
|
||||
import com.itsaky.androidide.app.StudioApp
|
||||
import com.itsaky.androidide.databinding.LayoutCreateFileJavaBinding
|
||||
import com.itsaky.androidide.databinding.LayoutDialogTextInputBinding
|
||||
import com.itsaky.androidide.eventbus.events.Event
|
||||
import com.itsaky.androidide.eventbus.events.file.FileCreationEvent
|
||||
import com.itsaky.androidide.eventbus.events.file.FileDeletionEvent
|
||||
import com.itsaky.androidide.eventbus.events.file.FileRenameEvent
|
||||
@@ -43,6 +44,7 @@ import com.itsaky.androidide.events.ListProjectFilesRequestEvent
|
||||
import com.itsaky.androidide.fragments.sheets.OptionsListFragment
|
||||
import com.itsaky.androidide.models.SheetOption
|
||||
import com.itsaky.androidide.projects.ProjectManager.getProjectDirPath
|
||||
import com.itsaky.androidide.projects.builder.BuildService
|
||||
import com.itsaky.androidide.tasks.executeAsync
|
||||
import com.itsaky.androidide.utils.DialogUtils
|
||||
import com.itsaky.androidide.utils.Environment
|
||||
@@ -335,7 +337,7 @@ class FileTreeActionHandler : BaseEventHandler() {
|
||||
app.toast(string.msg_file_exists, ERROR)
|
||||
} else {
|
||||
if (FileIOUtils.writeFileFromString(newFile, content)) {
|
||||
notifyFileCreated(newFile)
|
||||
notifyFileCreated(newFile, context)
|
||||
// TODO Notify language servers about file created event
|
||||
app.toast(string.msg_file_created, SUCCESS)
|
||||
if (lastHeld != null) {
|
||||
@@ -406,16 +408,16 @@ class FileTreeActionHandler : BaseEventHandler() {
|
||||
ProgressDialog.show(context, null, context.getString(string.please_wait), true, false)
|
||||
executeAsync({ FileUtils.delete(file) }) {
|
||||
progressDialog.dismiss()
|
||||
|
||||
|
||||
val deleted = it ?: false
|
||||
|
||||
|
||||
app.toast(
|
||||
if (deleted) string.deleted else string.delete_failed,
|
||||
if (deleted) SUCCESS else ERROR
|
||||
)
|
||||
|
||||
|
||||
if (deleted) {
|
||||
notifyFileDeleted(file)
|
||||
notifyFileDeleted(file, context)
|
||||
// TODO Notify language servers about file delete event
|
||||
if (lastHeld != null) {
|
||||
val parent = lastHeld!!.parent
|
||||
@@ -466,7 +468,7 @@ class FileTreeActionHandler : BaseEventHandler() {
|
||||
if (renamed) SUCCESS else ERROR
|
||||
)
|
||||
if (renamed) {
|
||||
notifyFileRenamed(file)
|
||||
notifyFileRenamed(file, context)
|
||||
// TODO Notify language servers about file rename event
|
||||
if (lastHeld != null) {
|
||||
val parent = lastHeld!!.parent
|
||||
@@ -495,15 +497,23 @@ class FileTreeActionHandler : BaseEventHandler() {
|
||||
EventBus.getDefault().post(ExpandTreeNodeRequestEvent(node))
|
||||
}
|
||||
|
||||
private fun notifyFileRenamed(file: File) {
|
||||
EventBus.getDefault().post(FileRenameEvent(file))
|
||||
private fun notifyFileRenamed(file: File, context: Context) {
|
||||
EventBus.getDefault().post(FileRenameEvent(file).putData(context))
|
||||
}
|
||||
|
||||
private fun notifyFileCreated(file: File) {
|
||||
EventBus.getDefault().post(FileCreationEvent(file))
|
||||
private fun notifyFileCreated(file: File, context: Context) {
|
||||
EventBus.getDefault().post(FileCreationEvent(file).putData(context))
|
||||
}
|
||||
|
||||
private fun notifyFileDeleted(file: File) {
|
||||
EventBus.getDefault().post(FileDeletionEvent(file))
|
||||
private fun notifyFileDeleted(file: File, context: Context) {
|
||||
EventBus.getDefault().post(FileDeletionEvent(file).putData(context))
|
||||
}
|
||||
|
||||
private fun Event.putData(context: Context): Event {
|
||||
put(Context::class.java, context)
|
||||
if (context is EditorActivity) {
|
||||
put(BuildService::class.java, context.buildService)
|
||||
}
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
+39
-5
@@ -16,7 +16,12 @@
|
||||
*/
|
||||
package com.itsaky.androidide.projects
|
||||
|
||||
import android.content.Context
|
||||
import com.itsaky.androidide.eventbus.events.EventReceiver
|
||||
import com.itsaky.androidide.eventbus.events.file.FileCreationEvent
|
||||
import com.itsaky.androidide.eventbus.events.file.FileDeletionEvent
|
||||
import com.itsaky.androidide.eventbus.events.file.FileEvent
|
||||
import com.itsaky.androidide.eventbus.events.file.FileRenameEvent
|
||||
import com.itsaky.androidide.eventbus.events.project.ProjectInitializedEvent
|
||||
import com.itsaky.androidide.projects.api.AndroidModule
|
||||
import com.itsaky.androidide.projects.api.ModuleProject
|
||||
@@ -29,7 +34,7 @@ import java.io.File
|
||||
import java.nio.file.Path
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode.MAIN
|
||||
import org.greenrobot.eventbus.ThreadMode.BACKGROUND
|
||||
|
||||
/**
|
||||
* Manages projects in AndroidIDE.
|
||||
@@ -173,10 +178,39 @@ object ProjectManager : EventReceiver {
|
||||
return false
|
||||
}
|
||||
|
||||
// No-op subscriber method
|
||||
@Suppress("unused")
|
||||
@Subscribe(threadMode = MAIN)
|
||||
fun noOp(obj: Throwable) {
|
||||
throw UnsupportedOperationException("No-op")
|
||||
@Subscribe(threadMode = BACKGROUND)
|
||||
fun onFileCreated(event: FileCreationEvent) {
|
||||
generateSourcesIfNecessary(event)
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
@Subscribe(threadMode = BACKGROUND)
|
||||
fun onFileDeleted(event: FileDeletionEvent) {
|
||||
generateSourcesIfNecessary(event)
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
@Subscribe(threadMode = BACKGROUND)
|
||||
fun onFileRenamed(event: FileRenameEvent) {
|
||||
generateSourcesIfNecessary(event)
|
||||
}
|
||||
|
||||
private fun generateSourcesIfNecessary(event: FileEvent) {
|
||||
val builder = event[BuildService::class.java] ?: return
|
||||
val file = event.file
|
||||
if (!isResource(file)) {
|
||||
return
|
||||
}
|
||||
|
||||
generateSources(builder)
|
||||
}
|
||||
|
||||
private fun isResource(file: File): Boolean {
|
||||
val module = findModuleForFile(file) ?: return false
|
||||
if (module is AndroidModule) {
|
||||
return module.getResourceDirectories().find { file.path.startsWith(it.path) } != null
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -216,7 +216,11 @@ abstract class ModuleProject(
|
||||
.findInPackage(packageName)
|
||||
.filterIsInstance(SourceNode::class.java)
|
||||
}
|
||||
|
||||
|
||||
open fun isFromThisModule(file: File) : Boolean {
|
||||
return isFromThisModule(file.toPath())
|
||||
}
|
||||
|
||||
open fun isFromThisModule(file: Path): Boolean {
|
||||
// TODO This can be probably improved
|
||||
return file.startsWith(this.projectDir.toPath())
|
||||
|
||||
+8
-3
@@ -20,23 +20,28 @@ package com.itsaky.androidide.eventbus.events.file
|
||||
import com.itsaky.androidide.eventbus.events.Event
|
||||
import java.io.File
|
||||
|
||||
/** Base class for file events. */
|
||||
abstract class FileEvent : Event() {
|
||||
abstract val file: File
|
||||
}
|
||||
|
||||
/**
|
||||
* Event dispatched when a new file is created in the file tree.
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
data class FileCreationEvent(val file: File) : Event()
|
||||
data class FileCreationEvent(override val file: File) : FileEvent()
|
||||
|
||||
/**
|
||||
* Event dispatched when a file is deleted in the file tree.
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
data class FileDeletionEvent(val file: File) : Event()
|
||||
data class FileDeletionEvent(override val file: File) : FileEvent()
|
||||
|
||||
/**
|
||||
* Event dispatched when a file is renamed in the file tree.
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class FileRenameEvent(val file: File) : Event()
|
||||
class FileRenameEvent(override val file: File) : FileEvent()
|
||||
|
||||
+1
-1
@@ -24,6 +24,7 @@ include ':lsp:testing'
|
||||
include ':build-tools:framework-stubs'
|
||||
include ':build-tools:google-java-format'
|
||||
include ':build-tools:javac'
|
||||
include ':build-tools:javac-services'
|
||||
include ':build-tools:tooling-api'
|
||||
include ':build-tools:tooling-api-events'
|
||||
include ':build-tools:tooling-api-impl'
|
||||
@@ -35,4 +36,3 @@ include ':build-tools:builder-model-impl'
|
||||
include ':build-tools:jsonrpc'
|
||||
include ':build-tools:projects'
|
||||
include ':build-tools:tooling-api-testing'
|
||||
include ':build-tools:javac-services'
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user