From 5bb448b0a08ff836b267992d58ef92e69eb57b8a Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 6 Feb 2019 16:47:46 +0100 Subject: [PATCH] additional optimization to avoid additional project identification on every live hover hint update --- .../java/handlers/BootJavaHoverProvider.java | 22 +++++++++---------- .../boot/java/handlers/RunningAppMatcher.java | 4 ++-- .../java/utils/SpringLiveHoverWatchdog.java | 8 +++---- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java index e96d30b50..da87cca97 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaHoverProvider.java @@ -99,13 +99,11 @@ public class BootJavaHoverProvider implements HoverHandler { return SimpleTextDocumentService.NO_HOVER; } - public CodeLens[] getLiveHoverHints(final TextDocument document, final SpringBootApp[] runningBootApps) { + public CodeLens[] getLiveHoverHints(final TextDocument document, IJavaProject project, final SpringBootApp[] runningBootApps) { if (runningBootApps.length == 0) return new CodeLens[0]; + if (project == null) return new CodeLens[0]; - Optional project = getProject(document); - if (!project.isPresent()) return new CodeLens[0]; - - if (!hasActuatorDependency(project.get())) { + if (!hasActuatorDependency(project)) { // double check the running apps in case there is a non-boot app running with live beans enabled boolean nonBootLiveBeansAround = false; boolean onAppsClasspath = false; @@ -115,7 +113,7 @@ public class BootJavaHoverProvider implements HoverHandler { break; } else { try { - List binaryRoots = IClasspathUtil.getBinaryRoots(project.get().getClasspath(), Classpath::isSource); + List binaryRoots = IClasspathUtil.getBinaryRoots(project.getClasspath(), Classpath::isSource); for (String path : bootApp.getClasspath()) { File file = new File(path); if (binaryRoots.contains(file)) { @@ -134,7 +132,7 @@ public class BootJavaHoverProvider implements HoverHandler { } } - return server.getCompilationUnitCache().withCompilationUnit(project.get(), URI.create(document.getUri()), cu -> { + return server.getCompilationUnitCache().withCompilationUnit(project, URI.create(document.getUri()), cu -> { Collection result = new LinkedHashSet<>(); try { if (cu != null) { @@ -143,7 +141,7 @@ public class BootJavaHoverProvider implements HoverHandler { @Override public boolean visit(TypeDeclaration node) { try { - extractLiveHintsForType(node, document, project.get(), runningBootApps, result); + extractLiveHintsForType(node, document, project, runningBootApps, result); } catch (Exception e) { logger.error("error extracting live hint information for docURI '" + document.getUri() + "' - on node: " + node.toString(), e); @@ -154,7 +152,7 @@ public class BootJavaHoverProvider implements HoverHandler { @Override public boolean visit(SingleMemberAnnotation node) { try { - extractLiveHintsForAnnotation(node, document, project.get(), runningBootApps, result); + extractLiveHintsForAnnotation(node, document, project, runningBootApps, result); } catch (Exception e) { logger.error("error extracting live hint information for docURI '" + document.getUri() + "' - on node: " + node.toString(), e); } @@ -165,7 +163,7 @@ public class BootJavaHoverProvider implements HoverHandler { @Override public boolean visit(NormalAnnotation node) { try { - extractLiveHintsForAnnotation(node, document, project.get(), runningBootApps, result); + extractLiveHintsForAnnotation(node, document, project, runningBootApps, result); } catch (Exception e) { logger.error("error extracting live hint information for docURI '" + document.getUri() + "' - on node: " + node.toString(), e); } @@ -176,7 +174,7 @@ public class BootJavaHoverProvider implements HoverHandler { @Override public boolean visit(MarkerAnnotation node) { try { - extractLiveHintsForAnnotation(node, document, project.get(), runningBootApps, result); + extractLiveHintsForAnnotation(node, document, project, runningBootApps, result); } catch (Exception e) { logger.error("error extracting live hint information for docURI '" + document.getUri() + "' - on node: " + node.toString(), e); } @@ -187,7 +185,7 @@ public class BootJavaHoverProvider implements HoverHandler { @Override public boolean visit(MethodDeclaration node) { try { - extractLiveHintsForMethod(node, document, project.get(), runningBootApps, result); + extractLiveHintsForMethod(node, document, project, runningBootApps, result); } catch (Exception e) { logger.error("error extracting live hint information for docURI '" + document.getUri() + "' - on node: " + node.toString(), e); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/RunningAppMatcher.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/RunningAppMatcher.java index dea53d05c..9b4445294 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/RunningAppMatcher.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/RunningAppMatcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Pivotal, Inc. + * Copyright (c) 2018, 2019 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 @@ -58,7 +58,7 @@ public class RunningAppMatcher { public static boolean doesProjectNameMatch(SpringBootApp app, IJavaProject project) { try { String projectName = app.getSystemProperty("spring.boot.project.name"); - return projectName != null && projectName.equals(project.getElementName()); + return projectName != null && project != null && projectName.equals(project.getElementName()); } catch (Exception e) { return false; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java index aabc0b3bb..5ba577350 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringLiveHoverWatchdog.java @@ -156,7 +156,7 @@ public class SpringLiveHoverWatchdog { try { IJavaProject project = getCachedProject(docURI); SpringBootApp[] runningBootApps = RunningAppMatcher.getAllMatchingApps(runningAppProvider.getAllRunningSpringApps(), project).toArray(new SpringBootApp[0]); - update(docURI, runningBootApps); + update(docURI, project, runningBootApps); } catch (Exception e) { logger.error("", e); @@ -173,7 +173,7 @@ public class SpringLiveHoverWatchdog { for (String docURI : watchedDocs.keySet()) { IJavaProject project = getCachedProject(docURI); SpringBootApp[] matchingApps = RunningAppMatcher.getAllMatchingApps(cachedApps, project).toArray(new SpringBootApp[0]); - update(docURI, matchingApps); + update(docURI, project, matchingApps); } this.hoverProvider.setRunningSpringApps(cachedApps); @@ -185,14 +185,14 @@ public class SpringLiveHoverWatchdog { } // internal method, need to run on the scheduled executor pool, do not call outside of that - protected void update(String docURI, SpringBootApp[] runningBootApps) { + protected void update(String docURI, IJavaProject project, SpringBootApp[] runningBootApps) { if (highlightsEnabled) { try { boolean hasCurrentRunningBootApps = runningBootApps != null && runningBootApps.length > 0; if (hasCurrentRunningBootApps) { TextDocument doc = this.server.getTextDocumentService().get(docURI); if (doc != null) { - CodeLens[] infos = this.hoverProvider.getLiveHoverHints(doc, runningBootApps); + CodeLens[] infos = this.hoverProvider.getLiveHoverHints(doc, project, runningBootApps); publishLiveHints(docURI, infos); } }