Merge branch 'master' of github.com:spring-projects/sts4
This commit is contained in:
@@ -35,6 +35,7 @@ import org.springframework.ide.vscode.boot.java.handlers.ReferenceProvider;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.profiles.ActiveProfilesProvider;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.LiveAppURLSymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingHoverProvider;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.RequestMappingSymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.scope.ScopeCompletionProcessor;
|
||||
@@ -118,7 +119,7 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
|
||||
});
|
||||
|
||||
documents.onDocumentSymbol(new BootJavaDocumentSymbolHandler(indexer));
|
||||
workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(indexer));
|
||||
workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(indexer, new LiveAppURLSymbolProvider(serverParams.runningAppProvider)));
|
||||
|
||||
BootJavaCodeLensEngine codeLensHandler = createCodeLensEngine(this, javaProjectFinder);
|
||||
documents.onCodeLens(codeLensHandler::createCodeLenses);
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.List;
|
||||
|
||||
import org.eclipse.lsp4j.SymbolInformation;
|
||||
import org.eclipse.lsp4j.WorkspaceSymbolParams;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.LiveAppURLSymbolProvider;
|
||||
import org.springframework.ide.vscode.boot.java.utils.SpringIndexer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.WorkspaceSymbolHandler;
|
||||
|
||||
@@ -22,15 +23,22 @@ import org.springframework.ide.vscode.commons.languageserver.util.WorkspaceSymbo
|
||||
*/
|
||||
public class BootJavaWorkspaceSymbolHandler implements WorkspaceSymbolHandler {
|
||||
|
||||
private SpringIndexer indexer;
|
||||
private final SpringIndexer indexer;
|
||||
private final LiveAppURLSymbolProvider liveAppSymbolProvider;
|
||||
|
||||
public BootJavaWorkspaceSymbolHandler(SpringIndexer indexer) {
|
||||
public BootJavaWorkspaceSymbolHandler(SpringIndexer indexer, LiveAppURLSymbolProvider liveAppSymbolProvider) {
|
||||
this.indexer = indexer;
|
||||
this.liveAppSymbolProvider = liveAppSymbolProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends SymbolInformation> handle(WorkspaceSymbolParams params) {
|
||||
return indexer.getAllSymbols(params.getQuery());
|
||||
if (params.getQuery() != null && params.getQuery().startsWith("//")) {
|
||||
return liveAppSymbolProvider.getSymbols(params.getQuery());
|
||||
}
|
||||
else {
|
||||
return indexer.getAllSymbols(params.getQuery());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.requestmapping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.lsp4j.Location;
|
||||
import org.eclipse.lsp4j.Position;
|
||||
import org.eclipse.lsp4j.Range;
|
||||
import org.eclipse.lsp4j.SymbolInformation;
|
||||
import org.eclipse.lsp4j.SymbolKind;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp;
|
||||
import org.springframework.ide.vscode.commons.util.Log;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class LiveAppURLSymbolProvider {
|
||||
|
||||
private final RunningAppProvider runningAppProvider;
|
||||
|
||||
public LiveAppURLSymbolProvider(RunningAppProvider runningAppProvider) {
|
||||
this.runningAppProvider = runningAppProvider;
|
||||
}
|
||||
|
||||
public List<? extends SymbolInformation> getSymbols(String query) {
|
||||
System.out.println(query);
|
||||
|
||||
List<SymbolInformation> result = new ArrayList<>();
|
||||
|
||||
try {
|
||||
SpringBootApp[] runningApps = runningAppProvider.getAllRunningSpringApps().toArray(new SpringBootApp[0]);
|
||||
for (SpringBootApp app : runningApps) {
|
||||
try {
|
||||
collectLiveAppSymbols(result, app);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Log.log(e);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.log(e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void collectLiveAppSymbols(List<SymbolInformation> result, SpringBootApp app) throws Exception {
|
||||
String mappings = app.getRequestMappings();
|
||||
JSONObject requestMappings = new JSONObject(mappings);
|
||||
Iterator<String> keys = requestMappings.keys();
|
||||
while (keys.hasNext()) {
|
||||
String key = keys.next();
|
||||
String extractedPath = UrlUtil.extractPath(key);
|
||||
if (extractedPath != null) {
|
||||
String[] splitPath = UrlUtil.splitPath(extractedPath);
|
||||
for (String path : splitPath) {
|
||||
String url = UrlUtil.createUrl(app.getHost(), app.getPort(), path);
|
||||
result.add(new SymbolInformation(url, SymbolKind.Method, new Location(url, new Range(new Position(0, 0), new Position(0, 1)))));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,6 +10,9 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.requestmapping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -64,4 +67,32 @@ public class UrlUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static String[] splitPath(String path) {
|
||||
if (path.contains("||")) {
|
||||
List<String> result = new ArrayList<>();
|
||||
|
||||
String basePath = path.substring(0, path.indexOf("||")).trim();
|
||||
result.add(basePath);
|
||||
|
||||
if (basePath.lastIndexOf('/') > 0) {
|
||||
basePath = basePath.substring(0, basePath.lastIndexOf('/'));
|
||||
}
|
||||
|
||||
String additionalPaths = path.substring(path.indexOf("||"));
|
||||
StringTokenizer tokenizer = new StringTokenizer(additionalPaths, "||");
|
||||
while (tokenizer.hasMoreTokens()) {
|
||||
String token = tokenizer.nextToken().trim();
|
||||
if (token.length() > 0) {
|
||||
result.add(basePath + "/" + token);
|
||||
}
|
||||
}
|
||||
|
||||
return result.toArray(new String[result.size()]);
|
||||
}
|
||||
else {
|
||||
return new String[] {path};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public class SpringIndexer {
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<? extends SymbolInformation> getAllSymbols(String query) {
|
||||
public List<SymbolInformation> getAllSymbols(String query) {
|
||||
if (initializeTask != null) {
|
||||
try {
|
||||
initializeTask.get();
|
||||
|
||||
@@ -13,6 +13,7 @@ package org.springframework.ide.vscode.boot.java.conditionals.test;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -35,6 +36,7 @@ public class ConditionalsLiveHoverTest {
|
||||
mockAppProvider = new MockRunningAppProvider();
|
||||
harness = BootLanguageServerHarness.builder()
|
||||
.runningAppProvider(mockAppProvider.provider)
|
||||
.watchDogInterval(Duration.ofMillis(100))
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -43,7 +45,8 @@ public class ConditionalsLiveHoverTest {
|
||||
|
||||
File directory = new File(
|
||||
ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI());
|
||||
String docUri = "file://" +directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnMissingBeanConfig.java";
|
||||
String docUri = "file://" + directory.getAbsolutePath()
|
||||
+ "/src/main/java/example/ConditionalOnMissingBeanConfig.java";
|
||||
|
||||
harness.intialize(directory);
|
||||
|
||||
@@ -59,25 +62,20 @@ public class ConditionalsLiveHoverTest {
|
||||
|
||||
File directory = new File(
|
||||
ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI());
|
||||
String docUri = "file://" +directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnBeanConfig.java";
|
||||
|
||||
String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnBeanConfig.java";
|
||||
|
||||
// Build a mock running boot app
|
||||
mockAppProvider.builder()
|
||||
.isSpringBootApp(true)
|
||||
.port("1111")
|
||||
.processId("22022")
|
||||
.host("cfapps.io")
|
||||
.processName("test-conditionals-live-hover")
|
||||
.getAutoConfigReport("{\"positiveMatches\":{\"ConditionalOnBeanConfig#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}]}}")
|
||||
.build();
|
||||
mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io")
|
||||
.processName("test-conditionals-live-hover")
|
||||
.getAutoConfigReport(
|
||||
"{\"positiveMatches\":{\"ConditionalOnBeanConfig#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}]}}")
|
||||
.build();
|
||||
|
||||
harness.intialize(directory);
|
||||
|
||||
Editor editor = harness.newEditorFromFileUri(docUri, LanguageId.JAVA);
|
||||
editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" +
|
||||
"\n" +
|
||||
"Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'");
|
||||
editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n"
|
||||
+ "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'");
|
||||
|
||||
}
|
||||
|
||||
@@ -86,11 +84,12 @@ public class ConditionalsLiveHoverTest {
|
||||
|
||||
File directory = new File(
|
||||
ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI());
|
||||
String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnMissingBeanConfig.java";
|
||||
String docUri = "file://" + directory.getAbsolutePath()
|
||||
+ "/src/main/java/example/ConditionalOnMissingBeanConfig.java";
|
||||
|
||||
// Build a mock running boot app
|
||||
mockAppProvider.builder().isSpringBootApp(true).port("1111")
|
||||
.processId("22022").host("cfapps.io").processName("test-conditionals-live-hover")
|
||||
mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io")
|
||||
.processName("test-conditionals-live-hover")
|
||||
.getAutoConfigReport(
|
||||
"{\"positiveMatches\":{\"ConditionalOnMissingBeanConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}]}}")
|
||||
.build();
|
||||
@@ -102,4 +101,108 @@ public class ConditionalsLiveHoverTest {
|
||||
+ "Message: @ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleLiveHoverContentRealProject() throws Exception {
|
||||
|
||||
File directory = new File(
|
||||
ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI());
|
||||
String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/MultipleConditionals.java";
|
||||
|
||||
// Build a mock running boot app
|
||||
mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io")
|
||||
.processName("test-conditionals-live-hover")
|
||||
.getAutoConfigReport(
|
||||
"{\"positiveMatches\":{\"HelloConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}],\"HelloConfig2#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}],\"MultipleConditionals#hi\":[{\"condition\":\"OnClassCondition\",\"message\":\"@ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class\"},{\"condition\":\"OnWebApplicationCondition\",\"message\":\"@ConditionalOnWebApplication (required) found StandardServletEnvironment\"},{\"condition\":\"OnJavaCondition\",\"message\":\"@ConditionalOnJava (1.8 or newer) found 1.8\"},{\"condition\":\"OnExpressionCondition\",\"message\":\"@ConditionalOnExpression (#{true}) resulted in true\"},{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'\"}]}}")
|
||||
.build();
|
||||
|
||||
harness.intialize(directory);
|
||||
|
||||
Editor editor = harness.newEditorFromFileUri(docUri, LanguageId.JAVA);
|
||||
|
||||
editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n"
|
||||
+ "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'");
|
||||
|
||||
editor.assertHoverContains("@ConditionalOnWebApplication", "Condition: OnWebApplicationCondition\n" + "\n"
|
||||
+ "Message: @ConditionalOnWebApplication (required) found StandardServletEnvironment");
|
||||
|
||||
editor.assertHoverContains("@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)",
|
||||
"Condition: OnJavaCondition\n" + "\n" + "Message: @ConditionalOnJava (1.8 or newer) found 1.8");
|
||||
|
||||
editor.assertHoverContains("@ConditionalOnMissingClass", "Condition: OnClassCondition\n" + "\n"
|
||||
+ "Message: @ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class");
|
||||
|
||||
editor.assertHoverContains("@ConditionalOnExpression", "Condition: OnExpressionCondition\n" + "\n"
|
||||
+ "Message: @ConditionalOnExpression (#{true}) resulted in true");
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testMultipleLiveHoverHints() throws Exception {
|
||||
//
|
||||
// File directory = new File(
|
||||
// ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI());
|
||||
// String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/MultipleConditionals.java";
|
||||
//
|
||||
// // Build a mock running boot app
|
||||
// mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io")
|
||||
// .processName("test-conditionals-live-hover")
|
||||
// .getAutoConfigReport(
|
||||
// "{\"positiveMatches\":{\"HelloConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}],\"HelloConfig2#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}],\"MultipleConditionals#hi\":[{\"condition\":\"OnClassCondition\",\"message\":\"@ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class\"},{\"condition\":\"OnWebApplicationCondition\",\"message\":\"@ConditionalOnWebApplication (required) found StandardServletEnvironment\"},{\"condition\":\"OnJavaCondition\",\"message\":\"@ConditionalOnJava (1.8 or newer) found 1.8\"},{\"condition\":\"OnExpressionCondition\",\"message\":\"@ConditionalOnExpression (#{true}) resulted in true\"},{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'\"}]}}")
|
||||
// .build();
|
||||
//
|
||||
// harness.intialize(directory);
|
||||
//
|
||||
// Editor editor = harness.newEditor(LanguageId.JAVA, "package example;\n" +
|
||||
// "\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;\n" +
|
||||
// "import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;\n" +
|
||||
// "import org.springframework.context.annotation.Bean;\n" +
|
||||
// "import org.springframework.context.annotation.Configuration;\n" +
|
||||
// "\n" +
|
||||
// "@Configuration\n" +
|
||||
// "public class MultipleConditionals {\n" +
|
||||
// "\n" +
|
||||
// " @Bean\n" +
|
||||
// " @ConditionalOnBean\n" +
|
||||
// " @ConditionalOnWebApplication\n" +
|
||||
// " @ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)\n" +
|
||||
// " @ConditionalOnMissingClass\n" +
|
||||
// " @ConditionalOnExpression\n" +
|
||||
// " public Hello hi() {\n" +
|
||||
// " return null;\n" +
|
||||
// " }\n" +
|
||||
// " \n" +
|
||||
// " @Bean\n" +
|
||||
// " @ConditionalOnMissingBean\n" +
|
||||
// " @ConditionalOnNotWebApplication\n" +
|
||||
// " public Hello missing() {\n" +
|
||||
// " return null;\n" +
|
||||
// " }\n" +
|
||||
// "}");
|
||||
//
|
||||
//// editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n"
|
||||
//// + "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'");
|
||||
////
|
||||
//// editor.assertHoverContains("@ConditionalOnWebApplication", "Condition: OnWebApplicationCondition\n" + "\n"
|
||||
//// + "Message: @ConditionalOnWebApplication (required) found StandardServletEnvironment");
|
||||
////
|
||||
//// editor.assertHoverContains("@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)",
|
||||
//// "Condition: OnJavaCondition\n" + "\n" + "Message: @ConditionalOnJava (1.8 or newer) found 1.8");
|
||||
////
|
||||
//// editor.assertHoverContains("@ConditionalOnMissingClass", "Condition: OnClassCondition\n" + "\n"
|
||||
//// + "Message: @ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class");
|
||||
////
|
||||
//// editor.assertHoverContains("@ConditionalOnExpression", "Condition: OnExpressionCondition\n" + "\n"
|
||||
//// + "Message: @ConditionalOnExpression (#{true}) resulted in true");
|
||||
//
|
||||
// editor.assertHighlights("@ConditionalOnBean", "@ConditionalOnWebApplication",
|
||||
// "@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)", "@ConditionalOnMissingClass",
|
||||
// "@ConditionalOnExpression");
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.requestmapping.test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.requestmapping.UrlUtil;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class UrlUtilTest {
|
||||
|
||||
@Test
|
||||
public void testSplitPathWithoutDuplicate() {
|
||||
String path = "/superpath";
|
||||
String[] splitPath = UrlUtil.splitPath(path);
|
||||
assertEquals(1, splitPath.length);
|
||||
assertEquals("/superpath", splitPath[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSplitPathSimpleCaseWithEmptyOr() {
|
||||
String path = "/superpath/mypath || ";
|
||||
String[] splitPath = UrlUtil.splitPath(path);
|
||||
assertEquals(1, splitPath.length);
|
||||
assertEquals("/superpath/mypath", splitPath[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSplitPathSimpleCase() {
|
||||
String path = "/superpath/mypath || mypath.json";
|
||||
String[] splitPath = UrlUtil.splitPath(path);
|
||||
assertEquals(2, splitPath.length);
|
||||
assertEquals("/superpath/mypath", splitPath[0]);
|
||||
assertEquals("/superpath/mypath.json", splitPath[1]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSplitPathMultipleCases() {
|
||||
String path = "/superpath/mypath || mypath.json || somethingelse.what";
|
||||
String[] splitPath = UrlUtil.splitPath(path);
|
||||
assertEquals(3, splitPath.length);
|
||||
assertEquals("/superpath/mypath", splitPath[0]);
|
||||
assertEquals("/superpath/mypath.json", splitPath[1]);
|
||||
assertEquals("/superpath/somethingelse.what", splitPath[2]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package example;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class MultipleConditionals {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBean
|
||||
@ConditionalOnWebApplication
|
||||
@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)
|
||||
@ConditionalOnMissingClass
|
||||
@ConditionalOnExpression
|
||||
public Hello hi() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnNotWebApplication
|
||||
public Hello missing() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -48,7 +48,7 @@ public class CompositeJavaProjectFinder implements JavaProjectFinder {
|
||||
|
||||
@Override
|
||||
public Optional<IJavaProject> find(TextDocumentIdentifier doc) {
|
||||
return projectFinders.stream().map(finder -> finder.find(doc)).filter(Objects::nonNull).findFirst().orElse(null);
|
||||
return projectFinders.stream().map(finder -> finder.find(doc)).filter(Optional::isPresent).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user