* Remove legacy handlers system (BaseHandler, DefaultHandler, JavaHandler, PythonHandler, HandlerRegistry) * Introduce response_handlers module with ResponseRegistry for LSP response routing * Replace HandlerRegistry usage in LSPManager with ResponseRegistry * Convert LSPManagerUI client lifecycle to GObject signals * Remove GLib.idle_add usage in LSP client event dispatch * Move completion request logic into LSPServerEventsMixin * Replace provider.py and provider_response_cache.py with modular provider/ package * Simplify plugin wiring via response_registry.set_event_hub() This refactor decouples response handling, simplifies event flow, and prepares the LSP manager for easier language-specific extensions.
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
# Python imports
|
|
|
|
# Lib imports
|
|
import gi
|
|
gi.require_version('GtkSource', '4')
|
|
|
|
from gi.repository import GtkSource
|
|
|
|
# Application imports
|
|
from libs.event_factory import Event_Factory, Code_Event_Types
|
|
|
|
from .default import DefaultHandler
|
|
|
|
|
|
|
|
class JavaHandler(DefaultHandler):
|
|
"""Java-specific: overrides definition, handles classFileContents."""
|
|
|
|
def handle(self, method: str, response, controller):
|
|
match method:
|
|
case "textDocument/definition":
|
|
self._handle_definition(response, controller)
|
|
case "java/classFileContents":
|
|
self._handle_class_file_contents(response)
|
|
case _:
|
|
super().handle(method, response, controller)
|
|
|
|
def _handle_definition(self, response, controller):
|
|
if not response: return
|
|
|
|
uri = response[0]["uri"]
|
|
if "jdt://" in uri:
|
|
controller._lsp_java_class_file_contents(uri)
|
|
return
|
|
|
|
self.context._prompt_goto_request(uri, response[0]["range"])
|
|
|
|
def _handle_class_file_contents(self, text: str):
|
|
event = Event_Factory.create_event("get_active_view")
|
|
self.context.emit_to("source_views", event)
|
|
|
|
view = event.response
|
|
file = view.command.exec("new_file")
|
|
buffer = view.get_buffer()
|
|
itr = buffer.get_iter_at_mark(buffer.get_insert())
|
|
lm = GtkSource.LanguageManager.get_default()
|
|
language = lm.get_language("java")
|
|
file.ftype = "java"
|
|
|
|
buffer.set_language(language)
|
|
buffer.insert(itr, text, -1)
|