SpringModelService minor refactoring and flattening
This commit is contained in:
@@ -97,8 +97,10 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemC
|
|||||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
|
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
|
||||||
import org.springframework.ide.vscode.commons.protocol.STS4LanguageClient;
|
import org.springframework.ide.vscode.commons.protocol.STS4LanguageClient;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.SpringModelLanguageServer;
|
import org.springframework.ide.vscode.commons.protocol.spring.Bean;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.SpringModelService;
|
import org.springframework.ide.vscode.commons.protocol.spring.BeansParams;
|
||||||
|
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndex;
|
||||||
|
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexLanguageServer;
|
||||||
import org.springframework.ide.vscode.commons.util.Assert;
|
import org.springframework.ide.vscode.commons.util.Assert;
|
||||||
import org.springframework.ide.vscode.commons.util.AsyncRunner;
|
import org.springframework.ide.vscode.commons.util.AsyncRunner;
|
||||||
import org.springframework.ide.vscode.commons.util.BadLocationException;
|
import org.springframework.ide.vscode.commons.util.BadLocationException;
|
||||||
@@ -121,7 +123,7 @@ import reactor.core.scheduler.Schedulers;
|
|||||||
* with apis to register various callbacks so that language server implementor
|
* with apis to register various callbacks so that language server implementor
|
||||||
* can attach their own 'handlers' for whatever the functionality they want to implement.
|
* can attach their own 'handlers' for whatever the functionality they want to implement.
|
||||||
*/
|
*/
|
||||||
public final class SimpleLanguageServer implements Sts4LanguageServer, SpringModelLanguageServer, LanguageClientAware, ServiceNotificationsClient, SimpleLanguageServerWrapper {
|
public final class SimpleLanguageServer implements Sts4LanguageServer, SpringIndexLanguageServer, LanguageClientAware, ServiceNotificationsClient, SimpleLanguageServerWrapper {
|
||||||
|
|
||||||
private static Logger log = LoggerFactory.getLogger(SimpleLanguageServer.class);
|
private static Logger log = LoggerFactory.getLogger(SimpleLanguageServer.class);
|
||||||
|
|
||||||
@@ -924,12 +926,14 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, SpringMod
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SpringModelService getSpringModelService() {
|
public CompletableFuture<List<Bean>> beans(BeansParams params) {
|
||||||
try {
|
Map<String, SpringIndex> allSpringIndex = appContext.getBeansOfType(SpringIndex.class, false, false);
|
||||||
return (SpringModelService) appContext.getBean(SpringModelService.class);
|
Assert.isLegal(allSpringIndex.size() <= 1, "One at most SpringModel bean is expected");
|
||||||
} catch (Throwable e) {
|
if (!allSpringIndex.isEmpty()) {
|
||||||
return null;
|
SpringIndex springIndex = allSpringIndex.values().iterator().next();
|
||||||
|
return springIndex.beans(params);
|
||||||
}
|
}
|
||||||
|
return CompletableFuture.completedFuture(Collections.emptyList());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,14 +28,14 @@ import org.springframework.ide.vscode.commons.protocol.java.JavaSearchParams;
|
|||||||
import org.springframework.ide.vscode.commons.protocol.java.JavaTypeHierarchyParams;
|
import org.springframework.ide.vscode.commons.protocol.java.JavaTypeHierarchyParams;
|
||||||
import org.springframework.ide.vscode.commons.protocol.java.TypeData;
|
import org.springframework.ide.vscode.commons.protocol.java.TypeData;
|
||||||
import org.springframework.ide.vscode.commons.protocol.java.TypeDescriptorData;
|
import org.springframework.ide.vscode.commons.protocol.java.TypeDescriptorData;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.SpringModelLanguageClient;
|
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexLanguageClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some 'custom' extensions to standard LSP {@link LanguageClient}.
|
* Some 'custom' extensions to standard LSP {@link LanguageClient}.
|
||||||
*
|
*
|
||||||
* @author Kris De Volder
|
* @author Kris De Volder
|
||||||
*/
|
*/
|
||||||
public interface STS4LanguageClient extends LanguageClient, SpringModelLanguageClient {
|
public interface STS4LanguageClient extends LanguageClient, SpringIndexLanguageClient {
|
||||||
|
|
||||||
@JsonNotification("sts/liveprocess/connected")
|
@JsonNotification("sts/liveprocess/connected")
|
||||||
void liveProcessConnected(LiveProcessSummary processKey);
|
void liveProcessConnected(LiveProcessSummary processKey);
|
||||||
|
|||||||
@@ -10,15 +10,11 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.springframework.ide.vscode.commons.protocol.spring;
|
package org.springframework.ide.vscode.commons.protocol.spring;
|
||||||
|
|
||||||
import org.eclipse.lsp4j.jsonrpc.services.JsonDelegate;
|
import java.util.List;
|
||||||
import org.eclipse.lsp4j.services.LanguageServer;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public interface SpringModelLanguageServer extends LanguageServer {
|
public interface SpringIndex {
|
||||||
|
|
||||||
/**
|
CompletableFuture<List<Bean>> beans(BeansParams params);
|
||||||
* Provides access to the spring model services.
|
|
||||||
*/
|
|
||||||
@JsonDelegate
|
|
||||||
SpringModelService getSpringModelService();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ package org.springframework.ide.vscode.commons.protocol.spring;
|
|||||||
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification;
|
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification;
|
||||||
import org.eclipse.lsp4j.services.LanguageClient;
|
import org.eclipse.lsp4j.services.LanguageClient;
|
||||||
|
|
||||||
public interface SpringModelLanguageClient extends LanguageClient {
|
public interface SpringIndexLanguageClient extends LanguageClient {
|
||||||
|
|
||||||
@JsonNotification("spring/index/updated")
|
@JsonNotification("spring/index/updated")
|
||||||
void indexUpdated();
|
void indexUpdated();
|
||||||
@@ -14,12 +14,11 @@ import java.util.List;
|
|||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest;
|
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest;
|
||||||
import org.eclipse.lsp4j.jsonrpc.services.JsonSegment;
|
import org.eclipse.lsp4j.services.LanguageServer;
|
||||||
|
|
||||||
@JsonSegment("spring/index")
|
public interface SpringIndexLanguageServer extends LanguageServer {
|
||||||
public interface SpringModelService {
|
|
||||||
|
@JsonRequest("spring/index/beans")
|
||||||
@JsonRequest
|
|
||||||
default CompletableFuture<List<Bean>> beans(BeansParams params) {
|
default CompletableFuture<List<Bean>> beans(BeansParams params) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocu
|
|||||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService;
|
import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.Bean;
|
import org.springframework.ide.vscode.commons.protocol.spring.Bean;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.BeansParams;
|
import org.springframework.ide.vscode.commons.protocol.spring.BeansParams;
|
||||||
import org.springframework.ide.vscode.commons.protocol.spring.SpringModelService;
|
import org.springframework.ide.vscode.commons.protocol.spring.SpringIndex;
|
||||||
import org.springframework.ide.vscode.commons.util.Futures;
|
import org.springframework.ide.vscode.commons.util.Futures;
|
||||||
import org.springframework.ide.vscode.commons.util.StringUtil;
|
import org.springframework.ide.vscode.commons.util.StringUtil;
|
||||||
import org.springframework.ide.vscode.commons.util.UriUtil;
|
import org.springframework.ide.vscode.commons.util.UriUtil;
|
||||||
@@ -84,7 +84,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
* @author Martin Lippert
|
* @author Martin Lippert
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class SpringSymbolIndex implements InitializingBean, SpringModelService {
|
public class SpringSymbolIndex implements InitializingBean, SpringIndex {
|
||||||
|
|
||||||
@Autowired SimpleLanguageServer server;
|
@Autowired SimpleLanguageServer server;
|
||||||
@Autowired BootJavaConfig config;
|
@Autowired BootJavaConfig config;
|
||||||
|
|||||||
@@ -63,9 +63,8 @@ export interface ExtensionAPI {
|
|||||||
*
|
*
|
||||||
* Returns Spring Model object.
|
* Returns Spring Model object.
|
||||||
*/
|
*/
|
||||||
readonly getSpringModel: () => SpringModel;
|
readonly getSpringIndex: () => SpringIndex;
|
||||||
|
|
||||||
readonly onSpringModelUpdated: Event<void>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LiveProcessDataQuery {
|
interface LiveProcessDataQuery {
|
||||||
@@ -108,8 +107,9 @@ interface InjectionPoint {
|
|||||||
readonly location: Location;
|
readonly location: Location;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SpringModel {
|
interface SpringIndex {
|
||||||
readonly beans: (params: BeansParams) => Promise<Bean[]>;
|
readonly beans: (params: BeansParams) => Promise<Bean[]>;
|
||||||
|
readonly onSpringIndexUpdated: Event<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface BeansParams {
|
interface BeansParams {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { commands, Uri } from "vscode";
|
import { commands, Uri } from "vscode";
|
||||||
import { Emitter, LanguageClient } from "vscode-languageclient/node";
|
import { Emitter, LanguageClient } from "vscode-languageclient/node";
|
||||||
import {Bean, BeansParams, ExtensionAPI, SpringModel} from "./api";
|
import {Bean, BeansParams, ExtensionAPI, SpringIndex} from "./api";
|
||||||
import {
|
import {
|
||||||
LiveProcess,
|
LiveProcess,
|
||||||
LiveProcessConnectedNotification,
|
LiveProcessConnectedNotification,
|
||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
LiveProcessUpdatedNotification,
|
LiveProcessUpdatedNotification,
|
||||||
LiveProcessGcPausesMetricsUpdatedNotification,
|
LiveProcessGcPausesMetricsUpdatedNotification,
|
||||||
LiveProcessMemoryMetricsUpdatedNotification,
|
LiveProcessMemoryMetricsUpdatedNotification,
|
||||||
SpringModelUpdatedNotification
|
SpringIndexUpdatedNotification
|
||||||
} from "./notification";
|
} from "./notification";
|
||||||
import VSCode from "vscode";
|
import VSCode from "vscode";
|
||||||
import {RequestType} from "vscode-languageclient";
|
import {RequestType} from "vscode-languageclient";
|
||||||
@@ -20,7 +20,7 @@ export class ApiManager {
|
|||||||
private onDidLiveProcessUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
private onDidLiveProcessUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
||||||
private onDidLiveProcessGcPausesMetricsUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
private onDidLiveProcessGcPausesMetricsUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
||||||
private onDidLiveProcessMemoryMetricsUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
private onDidLiveProcessMemoryMetricsUpdateEmitter: Emitter<LiveProcess> = new Emitter<LiveProcess>();
|
||||||
private onSpringModelUpdateEmitter: Emitter<void> = new Emitter<void>();
|
private onSpringIndexUpdateEmitter: Emitter<void> = new Emitter<void>();
|
||||||
|
|
||||||
public constructor(client: LanguageClient) {
|
public constructor(client: LanguageClient) {
|
||||||
const onDidLiveProcessConnect = this.onDidLiveProcessConnectEmitter.event;
|
const onDidLiveProcessConnect = this.onDidLiveProcessConnectEmitter.event;
|
||||||
@@ -28,7 +28,7 @@ export class ApiManager {
|
|||||||
const onDidLiveProcessUpdate = this.onDidLiveProcessUpdateEmitter.event;
|
const onDidLiveProcessUpdate = this.onDidLiveProcessUpdateEmitter.event;
|
||||||
const onDidLiveProcessGcPausesMetricsUpdate = this.onDidLiveProcessGcPausesMetricsUpdateEmitter.event;
|
const onDidLiveProcessGcPausesMetricsUpdate = this.onDidLiveProcessGcPausesMetricsUpdateEmitter.event;
|
||||||
const onDidLiveProcessMemoryMetricsUpdate = this.onDidLiveProcessMemoryMetricsUpdateEmitter.event;
|
const onDidLiveProcessMemoryMetricsUpdate = this.onDidLiveProcessMemoryMetricsUpdateEmitter.event;
|
||||||
const onSpringModelUpdated = this.onSpringModelUpdateEmitter.event;
|
const onSpringIndexUpdated = this.onSpringIndexUpdateEmitter.event;
|
||||||
|
|
||||||
const COMMAND_LIVEDATA_GET = "sts/livedata/get";
|
const COMMAND_LIVEDATA_GET = "sts/livedata/get";
|
||||||
const getLiveProcessData = async (query) => {
|
const getLiveProcessData = async (query) => {
|
||||||
@@ -61,14 +61,15 @@ export class ApiManager {
|
|||||||
client.onNotification(LiveProcessGcPausesMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessGcPausesMetricsUpdateEmitter.fire(process));
|
client.onNotification(LiveProcessGcPausesMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessGcPausesMetricsUpdateEmitter.fire(process));
|
||||||
client.onNotification(LiveProcessMemoryMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessMemoryMetricsUpdateEmitter.fire(process));
|
client.onNotification(LiveProcessMemoryMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessMemoryMetricsUpdateEmitter.fire(process));
|
||||||
|
|
||||||
client.onNotification(SpringModelUpdatedNotification.type, () => this.onSpringModelUpdateEmitter.fire());
|
client.onNotification(SpringIndexUpdatedNotification.type, () => this.onSpringIndexUpdateEmitter.fire());
|
||||||
|
|
||||||
const beansRequestType = new RequestType<BeansParams, Bean[], void>('spring/index/beans');
|
const beansRequestType = new RequestType<BeansParams, Bean[], void>('spring/index/beans');
|
||||||
const beans = (params: BeansParams) => {
|
const beans = (params: BeansParams) => {
|
||||||
return client.sendRequest(beansRequestType, params);
|
return client.sendRequest(beansRequestType, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getSpringModel = () => ({
|
const getSpringIndex = () => ({
|
||||||
|
onSpringIndexUpdated,
|
||||||
beans
|
beans
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -79,13 +80,12 @@ export class ApiManager {
|
|||||||
onDidLiveProcessUpdate,
|
onDidLiveProcessUpdate,
|
||||||
onDidLiveProcessMemoryMetricsUpdate,
|
onDidLiveProcessMemoryMetricsUpdate,
|
||||||
onDidLiveProcessGcPausesMetricsUpdate,
|
onDidLiveProcessGcPausesMetricsUpdate,
|
||||||
onSpringModelUpdated,
|
|
||||||
getLiveProcessData,
|
getLiveProcessData,
|
||||||
refreshLiveProcessData,
|
refreshLiveProcessData,
|
||||||
getLiveProcessMetricsData,
|
getLiveProcessMetricsData,
|
||||||
refreshLiveProcessMetricsData,
|
refreshLiveProcessMetricsData,
|
||||||
listConnectedProcesses,
|
listConnectedProcesses,
|
||||||
getSpringModel
|
getSpringIndex
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,6 @@ export namespace LiveProcessMemoryMetricsUpdatedNotification {
|
|||||||
export const type = new NotificationType<LiveProcess>('sts/liveprocess/memory/metrics/updated');
|
export const type = new NotificationType<LiveProcess>('sts/liveprocess/memory/metrics/updated');
|
||||||
}
|
}
|
||||||
|
|
||||||
export namespace SpringModelUpdatedNotification {
|
export namespace SpringIndexUpdatedNotification {
|
||||||
export const type = new NotificationType<void>('spring/index/updated');
|
export const type = new NotificationType<void>('spring/index/updated');
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user