Интеграция языкового сервера Eclipse запускает связанный класс при каждом сопоставлении файлов.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Интеграция языкового сервера Eclipse запускает связанный класс при каждом сопоставлении файлов.

Сообщение Anonymous »

Я разрабатываю плагин для завершения кода, например copilot для eclipse. Для этого я использовал расширение org.eclipse.lsp4e.languageServer в своем плагине.xml и сопоставил с ним Java-файлы, как показано ниже

Код: Выделить всё








< /code>
Но это вызывает CodecompprocessStreamConnectionProvider всякий раз, когда я создаю новый файл Java. Кроме того, когда я создаю новый файл Java, существующий сервер получает запрос на выключение, а потоки закрыты, но не из моего кода, его сделано косвенно, а затем этот класс вызывается для каждого нового файла Java. < /P>
Как сделать сервер таким общим для всех файлов, и он не должен быть повторно повторно для каждого файла Java.  Я сделал класс Singleton, как ниже, но без помощи < /p>
public class CodecompProcessStreamConnectionProvider extends
ProcessStreamConnectionProvider {
private static CodecompProcessStreamConnectionProvider instance;
private boolean isInitialized = false;
private final CountDownLatch latch = new CountDownLatch(1);
private static final long INIT_SERVER_TIMEOUT_SECONDS = 180;

// Private constructor to prevent direct instantiation
public CodecompProcessStreamConnectionProvider() {
this.init();
}

// Public method to provide a global access point to the singleton instance
public static synchronized CodecompProcessStreamConnectionProvider getInstance() {
if (instance == null) {
instance = new CodecompProcessStreamConnectionProvider();
}
return instance;
}

protected void init() {
Logger.debug("Initializing chat server asynchronously");

try {
AsyncExecutor.executeWithTimeout(() -> {
try {
CodecompLocator locator = new CodecompLocator();
this.isInitialized = false;

List commands = new ArrayList();
String CodecompAgentFolderPath = locator.findAgent().toFile().getParent();
Logger.debug("Codecomp agent location: " + CodecompAgentFolderPath);
File file = new File(CodecompAgentFolderPath + "/node");
file.setReadable(true);
file.setExecutable(true);
commands.add(CodecompAgentFolderPath + "/node");
commands.add("language-server.js");
commands.add("--stdio");
this.setCommands(commands);

this.setWorkingDirectory(CodecompAgentFolderPath);
this.isInitialized = true;
Logger.debug("Chat server initialized successfully");
} catch (Exception e) {
Logger.error(e, Messages.CodecompProcessStreamConnectionProvider_ErrorStartingChatLanguageServer);
throw new RuntimeException("Error initializing chat server", e);
}
}, INIT_SERVER_TIMEOUT_SECONDS, TimeUnit.SECONDS);
} catch (TimeoutException e) {
Logger.error(e, Messages.CodecompProcessStreamConnectionProvider_ErrorStartingChatLanguageServer);
} catch (ExecutionException | InterruptedException e) {
Logger.error(e, Messages.CodecompProcessStreamConnectionProvider_ErrorStartingChatLanguageServer);
}
}

@Override
public void start() throws IOException {
super.start(); // Proceed with starting the server
}

protected ProcessBuilder createProcessBuilder() {
ProcessBuilder builder = super.createProcessBuilder();
builder.environment().put("Codecomp_AGENT_LOGMESSAGE", "true");

Map proxySettings = CodecompProxyUtil.getProxyVars();
proxySettings.forEach(builder.environment()::put);

return builder;
}

public Object getInitializationOptions(URI rootUri) {
CodecompInitializationOptions options = CodecompManager.getInstance().createInitializationOptions();
return options;
}

public void handleMessage(Message message, LanguageServer languageServer, URI rootURI) {
super.handleMessage(message, languageServer, rootURI);
}
}
может ли кто-нибудь помочь инициализировать сервер lsp4e один раз для сеанса и избежать нескольких экземпляров.


Подробнее здесь: https://stackoverflow.com/questions/793 ... file-mappi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»