Skip to content
This repository has been archived by the owner on Sep 17, 2023. It is now read-only.

Commit

Permalink
Fix empty editor on opening java files
Browse files Browse the repository at this point in the history
Signed-off-by: PranavPurwar <[email protected]>
  • Loading branch information
PranavPurwar committed Jul 14, 2023
1 parent 2283aa9 commit f3607f5
Show file tree
Hide file tree
Showing 8 changed files with 118 additions and 122 deletions.
16 changes: 8 additions & 8 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ dependencies {
implementation("com.google.code.gson:gson:2.10.1")
implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-perf-ktx:20.3.3")
implementation("com.google.firebase:firebase-perf-ktx:20.4.0")
implementation("com.google.gms:google-services:4.3.15")
implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.11")

Expand All @@ -129,7 +129,7 @@ dependencies {
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
implementation("androidx.viewpager2:viewpager2:1.1.0-beta02")

val editorVersion = "0.21.1-fb69afb-SNAPSHOT"
val editorVersion = "0.21.1-a50ba9c-SNAPSHOT"
implementation("io.github.Rosemoe.sora-editor:editor:$editorVersion")
implementation("io.github.Rosemoe.sora-editor:language-textmate:$editorVersion")
implementation("io.github.dingyi222666:treeview:1.2.1")
Expand All @@ -139,12 +139,12 @@ dependencies {
implementation("com.github.sya-ri:kgit:1.0.5")

// markwon
val markwon_version = "4.6.2"
implementation("io.noties.markwon:core:$markwon_version")
implementation("io.noties.markwon:html:$markwon_version")
implementation("io.noties.markwon:image:$markwon_version")
implementation("io.noties.markwon:image-glide:$markwon_version")
implementation("io.noties.markwon:linkify:$markwon_version")
val markwonVersion = "4.6.2"
implementation("io.noties.markwon:core:$markwonVersion")
implementation("io.noties.markwon:html:$markwonVersion")
implementation("io.noties.markwon:image:$markwonVersion")
implementation("io.noties.markwon:image-glide:$markwonVersion")
implementation("io.noties.markwon:linkify:$markwonVersion")

implementation("com.aliucord:Aliuhook:main-SNAPSHOT")
implementation("de.maxr1998:modernandroidpreferences:2.3.2")
Expand Down
39 changes: 19 additions & 20 deletions app/src/main/kotlin/org/cosmicide/rewrite/adapter/EditorAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import io.github.rosemoe.sora.event.ContentChangeEvent
import io.github.rosemoe.sora.event.SubscriptionReceipt
import io.github.rosemoe.sora.lang.EmptyLanguage
import io.github.rosemoe.sora.langs.textmate.TextMateColorScheme
import io.github.rosemoe.sora.langs.textmate.TextMateLanguage
import io.github.rosemoe.sora.langs.textmate.registry.ThemeRegistry
import io.github.rosemoe.sora.widget.subscribeEvent
import org.cosmicide.build.Javap
import org.cosmicide.editor.analyzers.EditorDiagnosticsMarker
import org.cosmicide.rewrite.editor.IdeEditor
Expand Down Expand Up @@ -70,16 +73,11 @@ class EditorAdapter(val fragment: Fragment, val fileViewModel: FileViewModel) :
fragments.forEach { it.save() }
}

fun destroyAll() {
fragments.forEach { fg ->
fg.editor.release()
fragment.childFragmentManager.beginTransaction().remove(fg).commit()
}
}

class CodeEditorFragment(val file: File) : Fragment() {

lateinit var editor: IdeEditor
private lateinit var eventReceiver: SubscriptionReceipt<ContentChangeEvent>

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand All @@ -91,36 +89,33 @@ class EditorAdapter(val fragment: Fragment, val fileViewModel: FileViewModel) :

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setText()
setEditorLanguage()
setColorScheme()
setText()
}

private fun setEditorLanguage() {
val project = ProjectHandler.getProject() ?: return
when (file.extension) {
"java" -> {
if (editor.editorLanguage is JavaLanguage) return
editor.setEditorLanguage(
JavaLanguage(
editor,
ProjectHandler.getProject()!!,
project,
file
)
)
editor.text.addContentListener(EditorDiagnosticsMarker.INSTANCE)
EditorDiagnosticsMarker.INSTANCE.init(
editor,
file,
ProjectHandler.getProject()!!
)
eventReceiver =
editor.subscribeEvent(EditorDiagnosticsMarker(editor, file, project))
}

"kt" -> {
if (editor.editorLanguage is KotlinLanguage) return
editor.setEditorLanguage(
KotlinLanguage(
editor,
ProjectHandler.getProject()!!,
project,
file
)
)
Expand All @@ -135,10 +130,6 @@ class EditorAdapter(val fragment: Fragment, val fileViewModel: FileViewModel) :
}
}

if (file.extension != "java") {
editor.text.removeContentListener(EditorDiagnosticsMarker.INSTANCE)
}

editor.setFont()
}

Expand All @@ -154,6 +145,9 @@ class EditorAdapter(val fragment: Fragment, val fileViewModel: FileViewModel) :
return
}

println("Reading file: ${file.absolutePath}")
println("File exists: ${file.exists()}")
println("Contents: ${file.readText()}")
editor.setText(file.readText())
}

Expand All @@ -166,5 +160,10 @@ class EditorAdapter(val fragment: Fragment, val fileViewModel: FileViewModel) :
super.onConfigurationChanged(newConfig)
setColorScheme()
}

override fun onDestroy() {
super.onDestroy()
editor.release()
}
}
}
13 changes: 12 additions & 1 deletion app/src/main/kotlin/org/cosmicide/rewrite/editor/IdeEditor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import com.google.common.collect.ImmutableSet
import io.github.rosemoe.sora.langs.textmate.TextMateColorScheme
import io.github.rosemoe.sora.langs.textmate.registry.ThemeRegistry
import io.github.rosemoe.sora.widget.CodeEditor
import io.github.rosemoe.sora.widget.component.EditorDiagnosticTooltipWindow
import io.github.rosemoe.sora.widget.schemes.EditorColorScheme
import org.cosmicide.rewrite.common.Prefs
import org.cosmicide.rewrite.extension.setCompletionLayout
import org.cosmicide.rewrite.extension.setFont
Expand All @@ -32,11 +34,13 @@ class IdeEditor @JvmOverloads constructor(
init {
colorScheme = TextMateColorScheme.create(ThemeRegistry.getInstance())
setCompletionLayout()
setTooltipImprovements()
setFont()
inputType = createInputFlags()
updateNonPrintablePaintingFlags()
updateTextSize()
updateTabSize()
setInterceptParentHorizontalScrollIfNeeded(true)
isLigatureEnabled = Prefs.useLigatures
isWordwrap = Prefs.wordWrap
setScrollBarEnabled(Prefs.scrollbarEnabled)
Expand Down Expand Up @@ -93,4 +97,11 @@ class IdeEditor @JvmOverloads constructor(
EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS or
EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
}
}

private fun setTooltipImprovements() {
getComponent(EditorDiagnosticTooltipWindow::class.java).apply {
setSize(500, 100)
parentView.setBackgroundColor(colorScheme.getColor(EditorColorScheme.WHOLE_BACKGROUND))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class EditorFragment(
binding.pager.apply {
editorAdapter = EditorAdapter(this@EditorFragment, fileViewModel)
adapter = editorAdapter
isUserInputEnabled = false
}

binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
Expand All @@ -79,7 +80,7 @@ class EditorFragment(
}

override fun onTabUnselected(tab: TabLayout.Tab?) {

binding.pager.currentItem = tab!!.position
}

override fun onTabReselected(tab: TabLayout.Tab?) {
Expand Down Expand Up @@ -228,7 +229,7 @@ class EditorFragment(


fun getCurrentFragment(): EditorAdapter.CodeEditorFragment? {
return editorAdapter.getItem(binding.tabLayout.selectedTabPosition)
return editorAdapter.getItem(binding.pager.currentItem)
}

private fun configureToolbar() {
Expand Down Expand Up @@ -448,9 +449,7 @@ class EditorFragment(
}

private fun navigateToCompileInfoFragment() {
for (i in 0 until editorAdapter.itemCount) {
editorAdapter.getItem(i)?.save()
}
editorAdapter.saveAll()
parentFragmentManager.beginTransaction().apply {
add(R.id.fragment_container, CompileInfoFragment())
addToBackStack(null)
Expand Down Expand Up @@ -490,7 +489,7 @@ class EditorFragment(
popup.setOnMenuItemClickListener {
when (it.itemId) {
R.id.close_tab -> {
fileViewModel.removeFile(fileViewModel.files.value!![position])
fileViewModel.removeFile(position)
}

R.id.close_all_tab -> fileViewModel.removeAll()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,13 @@ class FileViewModel : ViewModel() {
/**
* Removes the given file from the list of files.
*/
fun removeFile(file: File) {
files.value = files.value?.toMutableList()?.apply { remove(file) }
fun removeFile(pos: Int) {
files.value = files.value?.toMutableList()?.apply { removeAt(pos + 1) }

if (files.value!!.isEmpty()) {
setCurrentPosition(-1)
} else {
setCurrentPosition(currentPosition.value?.minus(1) ?: 0)
setCurrentPosition(pos - 1)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,82 +7,43 @@

package org.cosmicide.editor.analyzers

import io.github.rosemoe.sora.event.ContentChangeEvent
import io.github.rosemoe.sora.event.EventReceiver
import io.github.rosemoe.sora.event.Unsubscribe
import io.github.rosemoe.sora.lang.diagnostic.DiagnosticsContainer
import io.github.rosemoe.sora.text.Content
import io.github.rosemoe.sora.text.ContentListener
import io.github.rosemoe.sora.widget.CodeEditor
import io.github.rosemoe.sora.widget.component.EditorDiagnosticTooltipWindow
import io.github.rosemoe.sora.widget.schemes.EditorColorScheme
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.cosmicide.project.Project
import java.io.File

class EditorDiagnosticsMarker : ContentListener {
class EditorDiagnosticsMarker(
val editor: CodeEditor,
val file: File,
val project: Project
) : EventReceiver<ContentChangeEvent> {

private val analyzer: JavaAnalyzer by lazy { JavaAnalyzer(editor, project, file) }
private val diagnostics = DiagnosticsContainer()
private lateinit var editor: CodeEditor
private lateinit var file: File
private lateinit var project: Project
private var analyzer = JavaAnalyzer(editor, project)

fun init(editor: CodeEditor, file: File, project: Project) {
this.editor = editor
this.file = file
this.project = project
init {
analyze(editor.text)
editor.post {
val window = editor.getComponent(EditorDiagnosticTooltipWindow::class.java)
window.setSize(500, 100)
window.parentView.setBackgroundColor(editor.colorScheme.getColor(EditorColorScheme.WHOLE_BACKGROUND))
}
}

override fun beforeReplace(content: Content) {}

override fun afterInsert(
content: Content,
startLine: Int,
startColumn: Int,
endLine: Int,
endColumn: Int,
insertedContent: CharSequence
) {
analyze(content)
}

override fun afterDelete(
content: Content,
startLine: Int,
startColumn: Int,
endLine: Int,
endColumn: Int,
deletedContent: CharSequence
) {
analyze(content)
override fun onReceive(event: ContentChangeEvent, unsubscribe: Unsubscribe) {
analyze(event.editor.text)
}

private fun analyze(content: Content) = CoroutineScope(Dispatchers.IO).launch {
val code = content.toString()
file.writeText(code)
file.writeText(content.toString())
analyzer.reset()
try {
if (file.extension != "java") {
return@launch
}
analyzer.analyze()
diagnostics.reset()
diagnostics.addDiagnostics(analyzer.getDiagnostics())
editor.post {
editor.diagnostics = diagnostics
}
} catch (e: Exception) {
e.printStackTrace()
}
}

companion object {
val INSTANCE = EditorDiagnosticsMarker()
analyzer.analyze()
diagnostics.reset()
diagnostics.addDiagnostics(analyzer.getDiagnostics())

editor.diagnostics = diagnostics
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ import javax.tools.StandardLocation

class JavaAnalyzer(
val editor: CodeEditor,
val project: Project,
val currentFile: File
val project: Project
) {
private val args by lazy {
listOf(
Expand Down
Loading

0 comments on commit f3607f5

Please sign in to comment.