PT #164943593: XML bean scanning exclude output folders and pom

This commit is contained in:
BoykoAlex
2019-04-02 21:58:58 -04:00
parent fee9b6bc94
commit 3dd1c2dfd0
4 changed files with 59 additions and 6 deletions

View File

@@ -11,9 +11,14 @@
package org.springframework.ide.vscode.boot.java.utils;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -34,6 +39,8 @@ import org.springframework.ide.vscode.commons.java.IJavaProject;
import org.springframework.ide.vscode.commons.util.UriUtil;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import com.google.common.collect.ImmutableList;
/**
* @author Martin Lippert
*/
@@ -181,11 +188,37 @@ public class SpringIndexerXML implements SpringIndexer {
}
private String[] getFiles(IJavaProject project) throws Exception {
return Files.walk(Paths.get(project.getLocationUri()))
.filter(path -> path.getFileName().toString().endsWith(".xml"))
.filter(Files::isRegularFile)
.map(path -> path.toAbsolutePath().toString())
.toArray(String[]::new);
List<Path> outputFolders = IClasspathUtil.getOutputFolders(project.getClasspath()).map(f -> f.toPath()).collect(Collectors.toList());
ImmutableList.Builder<String> builder = ImmutableList.builder();
Files.walkFileTree(Paths.get(project.getLocationUri()), new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
return outputFolders.contains(dir) ? FileVisitResult.SKIP_SUBTREE : FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
String fileName = file.getFileName().toString();
if (fileName.endsWith(".xml") && !"pom.xml".equals(fileName)) {
builder.add(file.toAbsolutePath().toString());
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
ImmutableList<String> list = builder.build();
return list.toArray(new String[list.size()]);
}
private SymbolCacheKey getCacheKey(IJavaProject project) {

View File

@@ -70,13 +70,16 @@ public class SpringIndexerXMLProjectTest {
public void testScanningSimpleSpringXMLConfig() throws Exception {
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
assertEquals(4, allSymbols.size());
assertEquals(5, allSymbols.size());
String docUri = directory.toPath().resolve("config/simple-spring-config.xml").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'transactionManager' DataSourceTransactionManager", docUri, 6, 14, 6, 37));
assertTrue(containsSymbol(allSymbols, "@+ 'jdbcTemplate' JdbcTemplate", docUri, 8, 14, 8, 31));
assertTrue(containsSymbol(allSymbols, "@+ 'namedParameterJdbcTemplate' NamedParameterJdbcTemplate", docUri, 12, 14, 12, 45));
assertTrue(containsSymbol(allSymbols, "@+ 'persistenceExceptionTranslationPostProcessor' PersistenceExceptionTranslationPostProcessor", docUri, 18, 10, 18, 97));
String beansOnClasspathDocUri = directory.toPath().resolve("src/main/resources/beans.xml").toUri().toString();
assertTrue(containsSymbol(allSymbols, "@+ 'sb' SimpleBean", beansOnClasspathDocUri, 6, 14, 6, 21));
}
private boolean containsSymbol(List<? extends SymbolInformation> symbols, String name, String uri, int startLine, int startCHaracter, int endLine, int endCharacter) {

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<beans>
<bean id="sb"
class="org.test.SimpleBean">
</bean>
</beans>
</beans>