Интеграция языкового сервера 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»