From f10b38782ebce0dcc2c6e6ad1abb87a028cdf295 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Fri, 10 Nov 2017 14:50:01 -0800 Subject: [PATCH] Also fix @Bean attribute aware naming for function beans And restructure the code so function bean are not so much of a special case. --- .../boot/java/beans/BeansSymbolProvider.java | 113 +++++++++--------- 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/BeansSymbolProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/BeansSymbolProvider.java index c6c399054..2d06b509e 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/BeansSymbolProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/BeansSymbolProvider.java @@ -11,7 +11,6 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Collection; -import java.util.Collections; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -28,13 +27,19 @@ import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.SymbolKind; import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider; import org.springframework.ide.vscode.boot.java.utils.ASTUtils; +import org.springframework.ide.vscode.commons.languageserver.util.DocumentRegion; import org.springframework.ide.vscode.commons.util.BadLocationException; +import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.text.TextDocument; import com.google.common.collect.ImmutableList; +import reactor.util.function.Tuple2; +import reactor.util.function.Tuples; + /** * @author Martin Lippert + * @author Kris De Volder */ public class BeansSymbolProvider implements SymbolProvider { @@ -43,22 +48,6 @@ public class BeansSymbolProvider implements SymbolProvider { private static final String FUNCTION_SUPPLIER_TYPE = Supplier.class.getName(); private static final String[] NAME_ATTRIBUTES = {"value", "name"}; - @Override - public Collection getSymbols(Annotation node, TextDocument doc) { - try { - if (isFunctionBean(node)) { - return Collections.singleton(createFunctionSymbol(node, doc)); - } - else { - return createRegularBeanSymbols(node, doc); - } - } - catch (Exception e) { - e.printStackTrace(); - } - return ImmutableList.of(); - } - private boolean isFunctionBean(Annotation node) { ASTNode parent = node.getParent(); if (parent instanceof MethodDeclaration) { @@ -81,51 +70,70 @@ public class BeansSymbolProvider implements SymbolProvider { return false; } - private SymbolInformation createFunctionSymbol(Annotation node, TextDocument doc) throws BadLocationException { - StringBuilder symbolLabel = new StringBuilder(); - symbolLabel.append("@> "); +// private SymbolInformation createFunctionSymbol(Annotation node, TextDocument doc) throws BadLocationException { +// StringBuilder symbolLabel = new StringBuilder(); +// symbolLabel.append("@> "); +// +// String beanName = getBeanName(node); +// String beanType = getBeanType(node); +// +// symbolLabel.append('\''); +// symbolLabel.append(beanName); +// symbolLabel.append('\''); +// symbolLabel.append(" (@Bean) "); +// symbolLabel.append(beanType); +// +// SymbolInformation symbol = new SymbolInformation(symbolLabel.toString(), SymbolKind.Interface, +// new Location(doc.getUri(), doc.toRange(node.getStartPosition(), node.getLength()))); +// return symbol; +// } - String beanName = getBeanName(node); + @Override + public Collection getSymbols(Annotation node, TextDocument doc) { + boolean isFunction = isFunctionBean(node); + ImmutableList.Builder symbols = ImmutableList.builder(); String beanType = getBeanType(node); - - symbolLabel.append('\''); - symbolLabel.append(beanName); - symbolLabel.append('\''); - symbolLabel.append(" (@Bean) "); - symbolLabel.append(beanType); - - SymbolInformation symbol = new SymbolInformation(symbolLabel.toString(), SymbolKind.Interface, - new Location(doc.getUri(), doc.toRange(node.getStartPosition(), node.getLength()))); - return symbol; + for (Tuple2 nameAndRegion : getBeanNames(node, doc)) { + try { + symbols.add(new SymbolInformation( + beanLabel(isFunction, nameAndRegion.getT1(), beanType), + SymbolKind.Interface, + new Location(doc.getUri(), doc.toRange(nameAndRegion.getT2())) + )); + } catch (BadLocationException e) { + Log.log(e); + } + } + return symbols.build(); } - private Collection createRegularBeanSymbols(Annotation node, TextDocument doc) throws BadLocationException { - + Collection> getBeanNames(Annotation node, TextDocument doc) { Collection beanNameNodes = getBeanNameLiterals(node); if (beanNameNodes!=null && !beanNameNodes.isEmpty()) { - ImmutableList.Builder symbols = ImmutableList.builder(); + ImmutableList.Builder> namesAndRegions = ImmutableList.builder(); for (StringLiteral nameNode : beanNameNodes) { String name = ASTUtils.getLiteralValue(nameNode); - String type = getBeanType(node); - symbols.add(new SymbolInformation( - beanLabel(name, type), - SymbolKind.Interface, - new Location(doc.getUri(), doc.toRange(ASTUtils.stringRegion(doc, nameNode))) + namesAndRegions.add(Tuples.of(name, ASTUtils.stringRegion(doc, nameNode))); + } + return namesAndRegions.build(); + } else { + ASTNode parent = node.getParent(); + if (parent instanceof MethodDeclaration) { + MethodDeclaration method = (MethodDeclaration) parent; + return ImmutableList.of(Tuples.of( + method.getName().toString(), + ASTUtils.nameRegion(doc, node) )); } - return symbols.build(); - } else { - return ImmutableList.of(new SymbolInformation( - beanLabel(getBeanName(node), getBeanType(node)), - SymbolKind.Interface, - new Location(doc.getUri(), doc.toRange(ASTUtils.nameRegion(doc, node))) - )); + return ImmutableList.of(); } } - protected String beanLabel(String beanName, String beanType) { + protected String beanLabel(boolean isFunctionBean, String beanName, String beanType) { StringBuilder symbolLabel = new StringBuilder(); - symbolLabel.append("@+ "); + symbolLabel.append('@'); + symbolLabel.append(isFunctionBean ? '>' : '+'); + symbolLabel.append(' '); symbolLabel.append('\''); symbolLabel.append(beanName); symbolLabel.append('\''); @@ -143,15 +151,6 @@ public class BeansSymbolProvider implements SymbolProvider { return literals.build(); } - protected String getBeanName(Annotation node) { - ASTNode parent = node.getParent(); - if (parent instanceof MethodDeclaration) { - MethodDeclaration method = (MethodDeclaration) parent; - return method.getName().toString(); - } - return null; - } - protected String getBeanType(Annotation node) { ASTNode parent = node.getParent(); if (parent instanceof MethodDeclaration) {