Partially working classpath change mechanics
Prints messages in language server logs, but doesn't really do anything else with the change events yet.
This commit is contained in:
@@ -23,5 +23,10 @@
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguage
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
import reactor.core.Disposable;
|
||||
|
||||
@@ -46,8 +47,8 @@ public class ClasspathListenerManager {
|
||||
List<Object> args = callbackParams.getArguments();
|
||||
//Note: not sure... but args might be deserialized as com.google.gson.JsonElement's.
|
||||
//If so the code below is not correct (casts will fail).
|
||||
String projectUri = (String) args.get(0);
|
||||
boolean deleted = args.size()>=2 && (Boolean)args.get(1);
|
||||
String projectUri = ((JsonElement) args.get(0)).getAsString();
|
||||
boolean deleted = args.size()>=2 && ((JsonElement)args.get(1)).getAsBoolean();
|
||||
classpathListener.changed(projectUri, deleted);
|
||||
return "done";
|
||||
}));
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -173,6 +174,10 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
|
||||
}
|
||||
|
||||
protected CompletableFuture<Object> executeCommand(ExecuteCommandParams params) {
|
||||
ExecuteCommandHandler handler = commands.get(params.getCommand());
|
||||
if (handler!=null) {
|
||||
return handler.handle(params);
|
||||
}
|
||||
if (CODE_ACTION_COMMAND_ID.equals(params.getCommand())) {
|
||||
Assert.isLegal(params.getArguments().size()==2);
|
||||
QuickfixResolveParams quickfixParams = new QuickfixResolveParams(
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package org.springframework.tooling.jdt.ls.extension;
|
||||
|
||||
import static org.springframework.tooling.jdt.ls.extension.Logger.log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
@@ -9,7 +10,6 @@ import org.eclipse.jdt.core.IJavaProject;
|
||||
import org.eclipse.jdt.ls.core.internal.IDelegateCommandHandler;
|
||||
import org.eclipse.jdt.ls.core.internal.JavaClientConnection;
|
||||
import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
|
||||
import org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer;
|
||||
import org.springframework.tooling.jdt.ls.extension.ClasspathListenerManager.ClasspathListener;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
@@ -29,11 +29,12 @@ public class ClasspathListenerHandler implements IDelegateCommandHandler {
|
||||
|
||||
@Override
|
||||
public void classpathChanged(IJavaProject jp) {
|
||||
log("Classpath changed "+jp.getElementName());
|
||||
String project = jp.getProject().getLocationURI().toString();
|
||||
boolean deleted = !jp.exists();
|
||||
JavaClientConnection conn = JavaLanguageServerPlugin.getInstance().getClientConnection();
|
||||
for (String callbackCommandId : subscribers) {
|
||||
conn.executeCommand(callbackCommandId, Arrays.asList(project, deleted));
|
||||
conn.executeCommand(callbackCommandId, project, deleted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,14 +43,17 @@ public class ClasspathListenerHandler implements IDelegateCommandHandler {
|
||||
|
||||
@Override
|
||||
public Object executeCommand(String commandId, List<Object> arguments, IProgressMonitor monitor) throws Exception {
|
||||
log("ClasspathListenerHandler executeCommand "+commandId+ ", "+arguments);
|
||||
if (commandId.equals("sts.java.addClasspathListener")) {
|
||||
return addClasspathListener((String)arguments.get(0));
|
||||
}
|
||||
return null;
|
||||
throw new IllegalArgumentException("Unknown command id: "+commandId);
|
||||
}
|
||||
|
||||
private Object addClasspathListener(String callbackCommandId) {
|
||||
log("ClasspathListenerHandler addClasspathListener "+callbackCommandId);
|
||||
classpathListener.subscribe(callbackCommandId);
|
||||
log("ClasspathListenerHandler addClasspathListener "+callbackCommandId+ " => OK");
|
||||
return "ok";
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ import org.eclipse.jdt.core.IJavaElementDelta;
|
||||
import org.eclipse.jdt.core.IJavaProject;
|
||||
import org.eclipse.jdt.core.JavaCore;
|
||||
|
||||
import static org.springframework.tooling.jdt.ls.extension.Logger.log;
|
||||
|
||||
/**
|
||||
* An instance of this class provides a means to register
|
||||
* listeners that get notified when classpath for a IJavaProject
|
||||
@@ -80,9 +82,12 @@ public class ClasspathListenerManager {
|
||||
* continually monitor them for changes from that point onward.
|
||||
*/
|
||||
public ClasspathListenerManager(ClasspathListener listener, boolean initialEvent) {
|
||||
log("Setting up ClasspathListenerManager");
|
||||
this.listener = listener;
|
||||
if (initialEvent) {
|
||||
log("Sending initial event for all projects ...");
|
||||
for (IProject p : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
|
||||
log("project = "+p);
|
||||
try {
|
||||
if (p.isAccessible() && p.hasNature(JavaCore.NATURE_ID)) {
|
||||
IJavaProject jp = JavaCore.create(p);
|
||||
@@ -92,6 +97,7 @@ public class ClasspathListenerManager {
|
||||
Logger.log(e);
|
||||
}
|
||||
}
|
||||
log("Sending initial event for all projects DONE");
|
||||
}
|
||||
JavaCore.addElementChangedListener(myListener=new MyListener(), ElementChangedEvent.POST_CHANGE);
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ResolveClasspathHandler implements IDelegateCommandHandler {
|
||||
}
|
||||
}
|
||||
Classpath classpath = new Classpath(cpEntries, javaProject.getOutputLocation().toString());
|
||||
log("classpath=" + classpath);
|
||||
log("classpath=" + classpath.getEntries().size()+ " entries");
|
||||
return classpath;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.springframework.ide.vscode.commons.languageserver.composable.Composab
|
||||
import org.springframework.ide.vscode.commons.languageserver.composable.CompositeLanguageServerComponents;
|
||||
import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
||||
|
||||
public class BootLanguageServer<C extends LanguageServerComponents> extends ComposableLanguageServer<C> {
|
||||
|
||||
@@ -24,11 +23,12 @@ public class BootLanguageServer<C extends LanguageServerComponents> extends Comp
|
||||
super(extensionId, _components);
|
||||
}
|
||||
|
||||
public static ComposableLanguageServer<CompositeLanguageServerComponents> create(LSFactory<BootLanguageServerParams> params) {
|
||||
public static ComposableLanguageServer<CompositeLanguageServerComponents> create(LSFactory<BootLanguageServerParams> _params) {
|
||||
return new ComposableLanguageServer<>("vscode-boot", s -> {
|
||||
BootLanguageServerParams params = _params.create(s);
|
||||
CompositeLanguageServerComponents.Builder components = new CompositeLanguageServerComponents.Builder();
|
||||
components.add(new BootPropertiesLanguageServerComponents(s, params));
|
||||
components.add(new BootJavaLanguageServerComponents(s, params));
|
||||
components.add(new BootPropertiesLanguageServerComponents(s, (ignore) -> params));
|
||||
components.add(new BootJavaLanguageServerComponents(s, (ignore) -> params));
|
||||
return components.build(s);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -72,6 +72,8 @@ import org.springframework.ide.vscode.commons.util.UriUtil;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
@@ -146,7 +148,7 @@ public class SpringIndexer {
|
||||
}
|
||||
}
|
||||
}, "Spring Annotation Index Update Worker");
|
||||
updateWorker.start();
|
||||
server.onInitialized(updateWorker::start);
|
||||
|
||||
getWorkspaceService().onDidChangeWorkspaceFolders(evt -> {
|
||||
log.debug("workspace roots have changed event arrived - added: " + evt.getEvent().getAdded() + " - removed: " + evt.getEvent().getRemoved());
|
||||
@@ -329,7 +331,8 @@ public class SpringIndexer {
|
||||
|
||||
public List<? extends SymbolAddOnInformation> getAdditonalInformation(String docURI) {
|
||||
waitForInitializeTask();
|
||||
return this.addonInformationByDoc.get(docURI);
|
||||
List<SymbolAddOnInformation> info = this.addonInformationByDoc.get(docURI);
|
||||
return info == null ? ImmutableList.of() : info;
|
||||
}
|
||||
|
||||
private List<SymbolInformation> searchMatchingSymbols(List<SymbolInformation> allsymbols, String query) {
|
||||
|
||||
@@ -52,13 +52,14 @@ public class JdtLsProjectCache implements JavaProjectFinder, ProjectObserver {
|
||||
public JdtLsProjectCache(SimpleLanguageServer server) {
|
||||
this.server = server;
|
||||
CompletableFuture<Disposable> disposable = new CompletableFuture<Disposable>();
|
||||
this.server.onInitialized(() -> disposable.complete(server.addClasspathListener(new ClasspathListener() {
|
||||
|
||||
@Override
|
||||
public void changed(String projectUri, boolean deleted) {
|
||||
log.info("Classpath changed: "+projectUri);
|
||||
}
|
||||
})));
|
||||
this.server.onInitialized(() ->
|
||||
disposable.complete(server.addClasspathListener(new ClasspathListener() {
|
||||
@Override
|
||||
public void changed(String projectUri, boolean deleted) {
|
||||
log.info("Classpath changed: "+projectUri);
|
||||
}
|
||||
}))
|
||||
);
|
||||
this.server.onShutdown(() -> disposable.thenAccept(Disposable::dispose));
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ const JAVA_LANGUAGE_ID = "java";
|
||||
export function activate(context: VSCode.ExtensionContext) {
|
||||
let options : commons.ActivatorOptions = {
|
||||
DEBUG: false,
|
||||
CONNECT_TO_LS: false,
|
||||
CONNECT_TO_LS: true,
|
||||
extensionId: 'vscode-spring-boot',
|
||||
preferJdk: true,
|
||||
checkjvm: (context: VSCode.ExtensionContext, jvm: commons.JVM) => {
|
||||
|
||||
Reference in New Issue
Block a user