From 6f06259ca81cfb8396d8f0912f9d4675b3734316 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 20 Feb 2025 20:55:26 +0100 Subject: [PATCH] GH-1431: fix broken hierarchical vs non-hierarchical symbol generation for concourse yaml --- ...ypeBasedYamlHierarchicalSymbolHandler.java | 26 ++++++++++++------- .../ConcourseLanguageServerBootApp.java | 4 +-- .../vscode/concourse/ConcourseEditorTest.java | 16 ++++++------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java index e108cd99a7..cdc779797f 100644 --- a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java +++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.text.DocumentRegion; import org.springframework.ide.vscode.commons.util.text.IDocument; @@ -140,20 +141,27 @@ public void addChild(DocumentSymbol sym) { private Stack stack = new Stack<>(); private ImmutableList.Builder rootSymbols; + private SimpleLanguageServer server; - public TypeBasedYamlHierarchicalSymbolHandler(TypeBasedYamlSymbolHandler baseHandler, - List hierarchicalDefinitionTypes) { - this.baseHandler = baseHandler; - Builder builder = ImmutableMap.builder(); - for (HierarchicalDefType hdt : hierarchicalDefinitionTypes) { - builder.put(hdt.defType, hdt); - } - this.hierarchicalDefinitionTypes = builder.build(); + public TypeBasedYamlHierarchicalSymbolHandler(TypeBasedYamlSymbolHandler baseHandler, List hierarchicalDefinitionTypes, SimpleLanguageServer server) { + this.baseHandler = baseHandler; + Builder builder = ImmutableMap.builder(); + for (HierarchicalDefType hdt : hierarchicalDefinitionTypes) { + builder.put(hdt.defType, hdt); + } + this.hierarchicalDefinitionTypes = builder.build(); + this.server = server; } @Override public List handle(DocumentSymbolParams params) { - return outlineByUri.get(params.getTextDocument().getUri()); + if (server.hasHierarchicalDocumentSymbolSupport()) { + return outlineByUri.get(params.getTextDocument().getUri()); + } + else { + return this.baseHandler.handle(params); + } + } @Override diff --git a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java index aa685eb2e9..5ee0f54d34 100644 --- a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java +++ b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java @@ -48,9 +48,9 @@ public static void main(String[] args) throws Exception { return new ASTTypeCache(); } - @Bean DocumentSymbolHandler documentSymbolHandler(SimpleTextDocumentService documents, ASTTypeCache astTypeCache, PipelineYmlSchema schema) { + @Bean DocumentSymbolHandler documentSymbolHandler(SimpleTextDocumentService documents, ASTTypeCache astTypeCache, PipelineYmlSchema schema, SimpleLanguageServer server) { TypeBasedYamlSymbolHandler baseHandler = new TypeBasedYamlSymbolHandler(documents, astTypeCache, schema.getDefinitionTypes()); - return new TypeBasedYamlHierarchicalSymbolHandler(baseHandler, schema.getHierarchicalDefinitionTypes()); + return new TypeBasedYamlHierarchicalSymbolHandler(baseHandler, schema.getHierarchicalDefinitionTypes(), server); } @Bean PipelineYmlSchema pipelineYmlSchema(ConcourseModel models, GithubInfoProvider github) { diff --git a/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java b/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java index 98eb6708d9..c1b04b01d7 100644 --- a/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java +++ b/headless-services/concourse-language-server/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2024 Pivotal, Inc. + * Copyright (c) 2016, 2025 Pivotal, 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 @@ -5023,13 +5023,13 @@ void gotoSymbolInPipeline() throws Exception { ); editor.assertDocumentSymbols( - "some-resource-type|ResourceType", - "foo-resource|Resource", - "bar-resource|Resource", - "do-some-stuff|Job", - "do-more-stuff|Job", - "group-one|Group", - "group-two|Group" + "some-resource-type", + "foo-resource", + "bar-resource", + "do-some-stuff", + "do-more-stuff", + "group-one", + "group-two" ); }