diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index fb20bc573..3b2d95f8e 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -43,6 +43,10 @@ import org.eclipse.lsp4j.CodeLensOptions; import org.eclipse.lsp4j.Command; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticSeverity; +import org.eclipse.lsp4j.DidChangeNotebookDocumentParams; +import org.eclipse.lsp4j.DidCloseNotebookDocumentParams; +import org.eclipse.lsp4j.DidOpenNotebookDocumentParams; +import org.eclipse.lsp4j.DidSaveNotebookDocumentParams; import org.eclipse.lsp4j.ExecuteCommandOptions; import org.eclipse.lsp4j.ExecuteCommandParams; import org.eclipse.lsp4j.InitializeParams; @@ -68,6 +72,7 @@ import org.eclipse.lsp4j.WorkspaceServerCapabilities; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.LanguageClientAware; +import org.eclipse.lsp4j.services.NotebookDocumentService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; @@ -130,6 +135,7 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC public final LazyCompletionResolver completionResolver = createCompletionResolver(); private SimpleTextDocumentService tds; + private NotebookDocumentService nts; private SimpleWorkspaceService workspace; private STS4LanguageClient client; private final LanguageServerProperties props; @@ -596,6 +602,39 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC return tds; } + @Override + public NotebookDocumentService getNotebookDocumentService() { + if (nts == null) { + nts = createNotebookDocumentService(); + } + return nts; + } + + private NotebookDocumentService createNotebookDocumentService() { + return new NotebookDocumentService() { + + @Override + public void didSave(DidSaveNotebookDocumentParams params) { + throw new UnsupportedOperationException(); + } + + @Override + public void didOpen(DidOpenNotebookDocumentParams params) { + throw new UnsupportedOperationException(); + } + + @Override + public void didClose(DidCloseNotebookDocumentParams params) { + throw new UnsupportedOperationException(); + } + + @Override + public void didChange(DidChangeNotebookDocumentParams params) { + throw new UnsupportedOperationException(); + } + }; + } + protected SimpleTextDocumentService createTextDocumentService() { return new SimpleTextDocumentService(this, props, appContext); } diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java index 108c04ce5..1d02f3a24 100644 --- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java +++ b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/ORAstUtils.java @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.commons.rewrite.java; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.nio.channels.ClosedByInterruptException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -246,6 +247,14 @@ public class ORAstUtils { private static void logExceptionWhileParsing(Throwable t) { if (!(t instanceof JavaParsingException || t instanceof StringIndexOutOfBoundsException)) { + if (t instanceof RuntimeException) { + RuntimeException re = (RuntimeException) t; + if (re.getCause() instanceof ClosedByInterruptException) { + // Parse or scan interrupted + log.debug("", t); + return; + } + } // Do not log parse exceptions. Can be too many while user is typing code log.error("", t); } diff --git a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/PreciseBeanType.java b/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/PreciseBeanType.java deleted file mode 100644 index d3cde88c0..000000000 --- a/headless-services/commons/commons-rewrite/src/main/java/org/springframework/ide/vscode/commons/rewrite/java/PreciseBeanType.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2022 VMware, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VMware, Inc. - initial API and implementation - *******************************************************************************/ -package org.springframework.ide.vscode.commons.rewrite.java; - -import org.openrewrite.Cursor; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.search.UsesType; -import org.openrewrite.java.tree.J; -import org.openrewrite.java.tree.JavaType; -import org.openrewrite.java.tree.TypeTree; -import org.openrewrite.java.tree.TypeUtils; - -public class PreciseBeanType extends Recipe { - - private final static String BEAN = "org.springframework.context.annotation.Bean"; - - private final static String MSG_KEY = "returnType"; - - @Override - public String getDisplayName() { - return "Replace Bean method return types with concrete types being returned. This is required for Spring 6 AOT"; - } - - @Override - protected TreeVisitor getSingleSourceApplicableTest() { - return new UsesType(BEAN); - } - - @Override - protected TreeVisitor getVisitor() { - return new JavaIsoVisitor() { - @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext executionContext) { - J.MethodDeclaration m = super.visitMethodDeclaration(method, executionContext); - if (isBeanMethod(m)) { - Object o = getCursor().pollMessage(MSG_KEY); - if (o != null) { - if (!o.equals(method.getReturnTypeExpression().getType())) { - if (o instanceof JavaType.FullyQualified) { - JavaType.FullyQualified actualType = (JavaType.FullyQualified) o; - if (m.getReturnTypeExpression() instanceof J.Identifier) { - J.Identifier identifierReturnExpr = (J.Identifier) m.getReturnTypeExpression(); - maybeAddImport(actualType); - if (identifierReturnExpr.getType() instanceof JavaType.FullyQualified) { - maybeRemoveImport((JavaType.FullyQualified) identifierReturnExpr.getType()); - } - m = m.withReturnTypeExpression(identifierReturnExpr - .withType(actualType) - .withSimpleName(actualType.getClassName()) - ); - } else if (m.getReturnTypeExpression() instanceof J.ParameterizedType) { - J.ParameterizedType parameterizedType = (J.ParameterizedType) m.getReturnTypeExpression(); - maybeAddImport(actualType); - if (parameterizedType.getType() instanceof JavaType.FullyQualified) { - maybeRemoveImport((JavaType.FullyQualified) parameterizedType.getType()); - } - m = m.withReturnTypeExpression(parameterizedType - .withType(actualType) - .withClazz(TypeTree.build(actualType.getClassName()).withType(actualType)) - ); - } - - } else if (o instanceof JavaType.Array) { - JavaType.Array actualType = (JavaType.Array) o; - if (m.getReturnTypeExpression() instanceof J.ArrayType && actualType.getElemType() instanceof JavaType.FullyQualified) { - JavaType.FullyQualified actualElementType = (JavaType.FullyQualified) actualType.getElemType(); - J.ArrayType arrayType = (J.ArrayType) m.getReturnTypeExpression(); - maybeAddImport(actualElementType); - if (arrayType.getElementType() instanceof JavaType.FullyQualified) { - maybeRemoveImport((JavaType.FullyQualified) arrayType.getElementType()); - } - m = m.withReturnTypeExpression(arrayType - .withElementType(TypeTree.build(actualElementType.getClassName()).withType(actualType)) - ); - } - } - } - } - } - return m; - } - - private boolean isBeanMethod(J.MethodDeclaration m) { - return m.getLeadingAnnotations().stream().anyMatch(a -> TypeUtils.isOfClassType(a.getType(), BEAN)); - } - - @Override - public J.Return visitReturn(J.Return _return, ExecutionContext executionContext) { - Cursor methodCursor = getCursor(); - while (methodCursor != null && !(methodCursor.getValue() instanceof J.Lambda || methodCursor.getValue() instanceof J.MethodDeclaration)) { - methodCursor = methodCursor.getParent(); - } - if (methodCursor != null && methodCursor.getValue() instanceof J.MethodDeclaration) { - methodCursor.putMessage(MSG_KEY, _return.getExpression().getType()); - } - return super.visitReturn(_return, executionContext); - } - }; - } -} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java index 435a816e4..91b71dd47 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/reconcile/PreciseBeanTypeProblem.java @@ -37,7 +37,7 @@ public class PreciseBeanTypeProblem implements RecipeSpringJavaProblemDescriptor @Override public String getRecipeId() { - return "org.springframework.ide.vscode.commons.rewrite.java.PreciseBeanType"; + return "org.openrewrite.java.spring.boot3.PreciseBeanType"; } @Override