fix: 修复若干问题,添加java lsp
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"WebSearch"
|
||||
]
|
||||
}
|
||||
}
|
||||
26
backend/jdt-language-server-1.57.0-202602111032/bin/jdtls
Normal file
26
backend/jdt-language-server-1.57.0-202602111032/bin/jdtls
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python3
|
||||
###############################################################################
|
||||
# Copyright (c) 2022 Marc Schreiber and others.
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0
|
||||
#
|
||||
# Contributors:
|
||||
# Marc Schreiber - initial API and implementation
|
||||
###############################################################################
|
||||
import importlib.util
|
||||
import sys
|
||||
import os
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
file_path = os.path.join(script_dir, "jdtls.py")
|
||||
|
||||
spec = importlib.util.spec_from_file_location("jdtls", file_path)
|
||||
jdtls = importlib.util.module_from_spec(spec)
|
||||
sys.modules["jdtls"] = jdtls
|
||||
spec.loader.exec_module(jdtls)
|
||||
|
||||
jdtls.main(sys.argv[1:])
|
||||
@@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
python %~dp0/jdtls %*
|
||||
pause
|
||||
136
backend/jdt-language-server-1.57.0-202602111032/bin/jdtls.py
Normal file
136
backend/jdt-language-server-1.57.0-202602111032/bin/jdtls.py
Normal file
@@ -0,0 +1,136 @@
|
||||
###############################################################################
|
||||
# Copyright (c) 2022 Marc Schreiber and others.
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0
|
||||
#
|
||||
# Contributors:
|
||||
# Marc Schreiber - initial API and implementation
|
||||
###############################################################################
|
||||
import argparse
|
||||
from hashlib import sha1
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
import tempfile
|
||||
|
||||
def get_java_executable(known_args):
|
||||
if known_args.java_executable is not None:
|
||||
java_executable = known_args.java_executable
|
||||
else:
|
||||
java_executable = 'java'
|
||||
|
||||
if 'JAVA_HOME' in os.environ:
|
||||
ext = '.exe' if platform.system() == 'Windows' else ''
|
||||
java_exec_to_test = Path(os.environ['JAVA_HOME']) / 'bin' / f'java{ext}'
|
||||
if java_exec_to_test.is_file():
|
||||
java_executable = str(java_exec_to_test.resolve())
|
||||
|
||||
if not known_args.validate_java_version:
|
||||
return java_executable
|
||||
|
||||
java_major_version = get_java_major_version(java_executable)
|
||||
|
||||
if java_major_version < 21:
|
||||
raise Exception("jdtls requires at least Java 21")
|
||||
|
||||
return java_executable
|
||||
|
||||
def get_java_major_version (java_executable):
|
||||
out = subprocess.check_output([java_executable, '-version'], stderr = subprocess.STDOUT, universal_newlines=True)
|
||||
|
||||
matches = re.finditer(r"(?<=version\s\")(?P<major>\d+)(\.\d+\.\d+(_\d+)?)?", out)
|
||||
for match in matches:
|
||||
return int(match.group("major"))
|
||||
|
||||
raise Exception("Could not determine Java version")
|
||||
|
||||
def find_equinox_launcher(jdtls_base_directory):
|
||||
plugins_dir = jdtls_base_directory / "plugins"
|
||||
if (plugins_dir / 'org.eclipse.equinox.launcher.jar').is_file():
|
||||
# mason-registry packaging
|
||||
return str(plugins_dir / 'org.eclipse.equinox.launcher.jar')
|
||||
|
||||
launchers = plugins_dir.glob('org.eclipse.equinox.launcher_*.jar')
|
||||
for launcher in launchers:
|
||||
return str(plugins_dir / launcher)
|
||||
|
||||
raise Exception("Cannot find equinox launcher")
|
||||
|
||||
def get_shared_config_path(jdtls_base_path):
|
||||
system = platform.system()
|
||||
|
||||
if system in ['Linux', 'FreeBSD']:
|
||||
config_dir = 'config_linux'
|
||||
elif system == 'Darwin':
|
||||
config_dir = 'config_mac'
|
||||
elif system == 'Windows':
|
||||
config_dir = 'config_win'
|
||||
else:
|
||||
raise Exception("Unknown platform {} detected".format(system))
|
||||
|
||||
return str(jdtls_base_path / config_dir)
|
||||
|
||||
def main(args):
|
||||
cwd_name = os.path.basename(os.getcwd())
|
||||
|
||||
system = platform.system()
|
||||
|
||||
if system == 'Windows' and 'APPDATA' in os.environ:
|
||||
cachedir = Path(os.environ['APPDATA'])
|
||||
elif system == 'Darwin' and 'HOME' in os.environ:
|
||||
cachedir = Path(os.environ['HOME']) / 'Library' / 'Caches'
|
||||
elif system == 'Linux' and 'HOME' in os.environ:
|
||||
cachedir = Path(os.environ['HOME']) / '.cache'
|
||||
else:
|
||||
cachedir = Path(tempfile.gettempdir())
|
||||
|
||||
cachedir = cachedir / 'jdtls'
|
||||
jdtls_data_path = os.path.join(cachedir, "jdtls-" + sha1(cwd_name.encode()).hexdigest())
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--validate-java-version', action='store_true', default=True)
|
||||
parser.add_argument('--no-validate-java-version', dest='validate_java_version', action='store_false')
|
||||
parser.add_argument("--java-executable", help="Path to java executable used to start runtime.")
|
||||
parser.add_argument("--jvm-arg",
|
||||
default=[],
|
||||
action="append",
|
||||
help="An additional JVM option (can be used multiple times. Note, use with equal sign. For example: --jvm-arg=-Dlog.level=ALL")
|
||||
parser.add_argument("-data", default=jdtls_data_path)
|
||||
|
||||
known_args, args = parser.parse_known_args(args)
|
||||
java_executable = get_java_executable(known_args)
|
||||
java_major_version = get_java_major_version(java_executable)
|
||||
|
||||
jdtls_base_path = Path(__file__).parent.parent
|
||||
shared_config_path = get_shared_config_path(jdtls_base_path)
|
||||
jar_path = find_equinox_launcher(jdtls_base_path)
|
||||
|
||||
exec_args = ["-Declipse.application=org.eclipse.jdt.ls.core.id1",
|
||||
"-Dosgi.bundles.defaultStartLevel=4",
|
||||
"-Declipse.product=org.eclipse.jdt.ls.core.product",
|
||||
"-Dosgi.checkConfiguration=true",
|
||||
"-Dosgi.sharedConfiguration.area=" + shared_config_path,
|
||||
"-Dosgi.sharedConfiguration.area.readOnly=true",
|
||||
"-Dosgi.configuration.cascaded=true",
|
||||
"-Xms1G",
|
||||
"--add-modules=ALL-SYSTEM",
|
||||
"--add-opens", "java.base/java.util=ALL-UNNAMED",
|
||||
"--add-opens", "java.base/java.lang=ALL-UNNAMED"] \
|
||||
+ known_args.jvm_arg \
|
||||
+ ["-jar", jar_path,
|
||||
"-data", known_args.data] \
|
||||
+ args
|
||||
|
||||
if (java_major_version >= 24):
|
||||
exec_args = [ '-Djdk.xml.maxGeneralEntitySizeLimit=0', '-Djdk.xml.totalEntitySizeLimit=0' ] + exec_args
|
||||
|
||||
if os.name == 'posix':
|
||||
os.execvp(java_executable, exec_args)
|
||||
else:
|
||||
subprocess.run([java_executable] + exec_args)
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
#safe table
|
||||
#Sun Feb 15 22:37:38 CST 2026
|
||||
.contributions=5
|
||||
.contributors=5
|
||||
.extraData=5
|
||||
.mainData=5
|
||||
.namespaces=5
|
||||
.orphans=5
|
||||
.table=5
|
||||
.crca8161cbd.v1
|
||||
@@ -0,0 +1,10 @@
|
||||
#safe table
|
||||
#Sun Feb 15 22:38:43 CST 2026
|
||||
.contributions=6
|
||||
.contributors=6
|
||||
.extraData=6
|
||||
.mainData=6
|
||||
.namespaces=6
|
||||
.orphans=6
|
||||
.table=6
|
||||
.crc552025a9.v1
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
#safe table
|
||||
#Sun Feb 15 22:38:50 CST 2026
|
||||
framework.info=192
|
||||
.crcaa8d7f53.v1
|
||||
@@ -0,0 +1,4 @@
|
||||
#safe table
|
||||
#Sun Feb 15 22:39:05 CST 2026
|
||||
framework.info=193
|
||||
.crc09b9ce13.v1
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user