Skip to content

Commit

Permalink
Integrate Event Broker in LspStatusManager
Browse files Browse the repository at this point in the history
  • Loading branch information
taldekar committed Jan 27, 2025
1 parent 548a9da commit 374e549
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 40 deletions.
2 changes: 1 addition & 1 deletion plugin/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.31.0",
org.apache.commons.logging;bundle-version="1.2.0",
slf4j.api;bundle-version="2.0.13",
org.apache.commons.lang3;bundle-version="3.14.0"
Bundle-Classpath: target/classes/,
Bundle-Classpath: .,
target/dependency/annotations-2.28.26.jar,
target/dependency/apache-client-2.28.26.jar,
target/dependency/auth-2.28.26.jar,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public abstract class AbstractQChatEditorActionsHandler extends AbstractHandler
@Override
public final boolean isEnabled() {
try {
return Activator.getLoginService().getAuthState().isLoggedIn() && !LspStatusManager.lspFailed();
return Activator.getLoginService().getAuthState().isLoggedIn() && !LspStatusManager.getInstance().lspFailed();
} catch (Exception e) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
import org.eclipse.core.commands.ExecutionEvent;

import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspStatusManager;

import software.aws.toolkits.eclipse.amazonq.views.ViewVisibilityManager;

public class QOpenLoginViewHandler extends AbstractHandler {
@Override
public final Object execute(final ExecutionEvent event) {
if (LspStatusManager.lspFailed()) {
if (LspStatusManager.getInstance().lspFailed()) {
ViewVisibilityManager.showLspStartUpFailedView("statusBar");
} else {
ViewVisibilityManager.showDefaultView("statusBar");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspManager;
import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspStatusManager;
import software.aws.toolkits.eclipse.amazonq.lsp.manager.fetcher.RecordLspSetupArgs;
import software.aws.toolkits.eclipse.amazonq.plugin.Activator;
import software.aws.toolkits.eclipse.amazonq.preferences.AmazonQPreferencePage;
import software.aws.toolkits.eclipse.amazonq.providers.LspManagerProvider;
import software.aws.toolkits.eclipse.amazonq.telemetry.LanguageServerTelemetryProvider;
import software.aws.toolkits.eclipse.amazonq.telemetry.metadata.ExceptionMetadata;
import software.aws.toolkits.eclipse.amazonq.util.ProxyUtil;
import software.aws.toolkits.telemetry.TelemetryDefinitions.Result;
import software.aws.toolkits.eclipse.amazonq.plugin.Activator;
import software.aws.toolkits.eclipse.amazonq.preferences.AmazonQPreferencePage;

public class QLspConnectionProvider extends AbstractLspConnectionProvider {

Expand All @@ -43,7 +43,7 @@ public QLspConnectionProvider() throws IOException {
commands.add("--set-credentials-encryption-key");
setCommands(commands);
} catch (Exception e) {
LspStatusManager.setToFailed();
LspStatusManager.getInstance().setToFailed();
throw(e);
}

Expand Down Expand Up @@ -77,12 +77,12 @@ public final void start() throws IOException {

lspEncryption.initializeEncryptedCommunication(serverStdIn);
} catch (Exception e) {
LspStatusManager.setToFailed();
LspStatusManager.getInstance().setToFailed();
emitInitFailure(ExceptionMetadata.scrubException(e));
Activator.getLogger().error("Error occured while initializing communication with Amazon Q Lsp Server", e);
}
} catch (Exception e) {
LspStatusManager.setToFailed();
LspStatusManager.getInstance().setToFailed();
emitInitFailure(ExceptionMetadata.scrubException(e));
throw e;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,47 @@

package software.aws.toolkits.eclipse.amazonq.lsp.manager;

import software.aws.toolkits.eclipse.amazonq.plugin.Activator;
import software.aws.toolkits.eclipse.amazonq.views.ViewVisibilityManager;

public final class LspStatusManager {

private static final LspStatusManager INSTANCE;
private LspState lspState;

static {
INSTANCE = new LspStatusManager();
}

private LspStatusManager() {
//prevent instantiation
lspState = LspState.PENDING;
Activator.getEventBroker().post(lspState);
}

public static LspStatusManager getInstance() {
return INSTANCE;
}

private static LspState lspState = LspState.PENDING;

public static boolean lspFailed() {
public boolean lspFailed() {
return (lspState == LspState.FAILED);
}
public static void setToActive() {

public void setToActive() {
lspState = LspState.ACTIVE;
Activator.getEventBroker().post(lspState);
ViewVisibilityManager.showDefaultView("restart");
}
public static void setToFailed() {

public void setToFailed() {
if (lspState != LspState.FAILED) {
ViewVisibilityManager.showLspStartUpFailedView("update");
lspState = LspState.FAILED;
}

Activator.getEventBroker().post(lspState);
}
public static LspState getLspState() {
public LspState getLspState() {
return lspState;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void setAmazonQServer(final LanguageServer server) {
future.complete(server);
}
emitInitializeMetric();
LspStatusManager.setToActive();
LspStatusManager.getInstance().setToActive();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public final void onEvent(final AuthState authState) {
// chat view
if (browser != null && !browser.isDisposed() && !chatStateManager.hasPreservedState()) {
Optional<String> content = getContent();
if (!content.isPresent() && !LspStatusManager.lspFailed()) {
if (!content.isPresent() && !LspStatusManager.getInstance().lspFailed()) {
canDisposeState = true;
ViewVisibilityManager.showChatAssetMissingView("update");
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ protected void showAlternateView() {

@Override
protected CompletableFuture<Boolean> isViewDisplayable() {
return CompletableFuture.completedFuture(LspStatusManager.lspFailed());
return CompletableFuture.completedFuture(LspStatusManager.getInstance().lspFailed());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,24 @@

package software.aws.toolkits.eclipse.amazonq.lsp.connection;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.verify;

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -17,27 +35,9 @@
import software.aws.toolkits.eclipse.amazonq.lsp.encryption.LspEncryptionManager;
import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspInstallResult;
import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspStatusManager;

import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider;
import software.aws.toolkits.eclipse.amazonq.util.LoggingService;
import software.aws.toolkits.eclipse.amazonq.util.ProxyUtil;

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.verify;

public final class QLspConnectionProviderTest {

@RegisterExtension
Expand All @@ -54,16 +54,19 @@ public final class QLspConnectionProviderTest {
@RegisterExtension
private static ProxyUtilsStaticMockExtension proxyUtilsStaticMockExtension = new ProxyUtilsStaticMockExtension();

private MockedStatic<LspStatusManager> mockLspStatusManager;
private MockedStatic<LspStatusManager> mockStaticLspStatusManager;
private LspStatusManager mockLspStatusManager;

@BeforeEach
void setupBeforeEach() {
mockLspStatusManager = mockStatic(LspStatusManager.class);
mockStaticLspStatusManager = mockStatic(LspStatusManager.class);
mockLspStatusManager = mock(LspStatusManager.class);
mockStaticLspStatusManager.when(LspStatusManager::getInstance).thenReturn(mockLspStatusManager);
}

@AfterEach
void tearDown() {
mockLspStatusManager.close();
mockStaticLspStatusManager.close();
}

private static final class TestProcessConnectionProvider extends ProcessStreamConnectionProvider {
Expand Down Expand Up @@ -107,7 +110,7 @@ void testConstructorInitializesCorrectly() throws IOException {
"/test/dir"
);

assertTrue(((ProcessStreamConnectionProvider) testProcessConnectionProvider).equals(provider));
assertTrue(testProcessConnectionProvider.equals(provider));
}

@Test
Expand Down

0 comments on commit 374e549

Please sign in to comment.