Compare commits
2 Commits
49d673b0b8
...
592bd8c628
Author | SHA1 | Date | |
---|---|---|---|
592bd8c628 | |||
cfea3b5f11 |
52
java
52
java
@ -16,14 +16,18 @@ def locate_launcher_configuration (jdt_ls_path):
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
def locate_lombok ():
|
def locate_lombok ():
|
||||||
return "/home/malacoda/.m2/repository/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar"
|
return os.path.join(os.environ['HOME'], ".m2/repository/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar")
|
||||||
|
|
||||||
class Java(LspServer):
|
class Java(LspServer):
|
||||||
def __init__ (self, arguments):
|
def __init__ (self, arguments):
|
||||||
self.path = arguments[0]
|
self.path = arguments[0]
|
||||||
super().__init__([
|
|
||||||
"java",
|
command = ["java"]
|
||||||
f"-javaagent:{locate_lombok()}",
|
if "--enable-lombok" in arguments:
|
||||||
|
arguments.remove("--enable-lombok")
|
||||||
|
command.append(f"-javaagent:{locate_lombok()}")
|
||||||
|
|
||||||
|
command = command + [
|
||||||
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044",
|
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044",
|
||||||
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
|
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
|
||||||
"-Dosgi.bundles.defaultStartLevel=4",
|
"-Dosgi.bundles.defaultStartLevel=4",
|
||||||
@ -36,35 +40,19 @@ class Java(LspServer):
|
|||||||
"--add-modules=ALL-SYSTEM",
|
"--add-modules=ALL-SYSTEM",
|
||||||
"--add-opens", "java.base/java.util=ALL-UNNAMED",
|
"--add-opens", "java.base/java.util=ALL-UNNAMED",
|
||||||
"--add-opens", "java.base/java.lang=ALL-UNNAMED"
|
"--add-opens", "java.base/java.lang=ALL-UNNAMED"
|
||||||
] + arguments[1:])
|
] + arguments[1:]
|
||||||
|
|
||||||
|
super().__init__(command)
|
||||||
|
|
||||||
@command("java.apply.workspaceEdit")
|
@command("java.apply.workspaceEdit")
|
||||||
def workspaceEdit (self, arguments):
|
def workspaceEdit (self, arguments):
|
||||||
print(f"we {arguments}", file=sys.stderr)
|
|
||||||
for argument in arguments:
|
for argument in arguments:
|
||||||
for file_name, changes in argument['changes'].items():
|
self.send_to_client({
|
||||||
file_name = file_name[len(FILE_URI):]
|
"id": -1,
|
||||||
file_contents = ""
|
"method": "workspace/applyEdit",
|
||||||
|
"params": {
|
||||||
if os.path.exists(file_name):
|
"edit": {
|
||||||
with open(file_name) as in_file:
|
"changes": argument['changes']
|
||||||
file_contents = in_file.read()
|
}
|
||||||
|
}
|
||||||
for change in changes:
|
})
|
||||||
file_contents = perform_change(file_contents, change)
|
|
||||||
|
|
||||||
with open(file_name, "w") as out_file:
|
|
||||||
out_file.write(file_contents)
|
|
||||||
|
|
||||||
def get_character_offset (file_contents, line, character):
|
|
||||||
line_pos = 0
|
|
||||||
while line > 0:
|
|
||||||
line_pos = file_contents.index("\n", line_pos) + 1
|
|
||||||
line = line - 1
|
|
||||||
return line_pos + character
|
|
||||||
|
|
||||||
def perform_change (file_text, change):
|
|
||||||
change_start = get_character_offset(file_text, change['range']['start']['line'], change['range']['start']['character'])
|
|
||||||
change_end = get_character_offset(file_text, change['range']['end']['line'], change['range']['end']['character'])
|
|
||||||
print(f"change {change_start} {change['newText']} {change_end}", file=sys.stderr)
|
|
||||||
return file_text[:change_start] + change['newText'] + file_text[change_end:]
|
|
||||||
|
@ -40,6 +40,9 @@ def process_messages (source, sink, handlers, log):
|
|||||||
print("stop message handler", file=log)
|
print("stop message handler", file=log)
|
||||||
|
|
||||||
def transmit_payload (payload, sink):
|
def transmit_payload (payload, sink):
|
||||||
|
if isinstance(payload, dict):
|
||||||
|
payload = json.dumps(payload)
|
||||||
|
|
||||||
sink.write(f"{CONTENT_LENGTH}{len(payload)}\r\n\r\n{payload}".encode())
|
sink.write(f"{CONTENT_LENGTH}{len(payload)}\r\n\r\n{payload}".encode())
|
||||||
sink.flush()
|
sink.flush()
|
||||||
|
|
||||||
@ -94,10 +97,10 @@ class LspServer:
|
|||||||
run(self.command)
|
run(self.command)
|
||||||
|
|
||||||
def send_to_client (self, payload):
|
def send_to_client (self, payload):
|
||||||
transmit_payload(sys.stdout, payload)
|
transmit_payload(payload, sys.stdout.buffer)
|
||||||
|
|
||||||
def send_to_server (self, payload):
|
def send_to_server (self, payload):
|
||||||
transmit_payload(self.process.stdout, payload)
|
transmit_payload(payload, self.process.stdout)
|
||||||
|
|
||||||
def close (self):
|
def close (self):
|
||||||
if self.process:
|
if self.process:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user