optimize handling of type dependencies when scanning symbols to avoid keeping track of self-references and binary types

This commit is contained in:
Martin Lippert
2020-02-14 18:03:30 +01:00
parent 5ff917367d
commit b466676eee
4 changed files with 74 additions and 14 deletions

View File

@@ -103,6 +103,31 @@ public class RequestMappingSymbolProviderTest {
fileScanListener.assertScannedUri(docUri, 1);
}
@Test
public void testUpdateDocumentWithConstantFromDifferentClass() throws Exception {
String docUri = directory.toPath().resolve("src/main/java/org/test/SimpleMappingClassWithConstantInDifferentClass.java").toUri().toString();
String constantsUri = directory.toPath().resolve("src/main/java/org/test/Constants.java").toUri().toString();
List<? extends SymbolInformation> symbols = indexer.getSymbols(docUri);
assertEquals(1, symbols.size());
assertTrue(containsSymbol(symbols, "@/path/from/constant", docUri, 6, 1, 6, 48));
//Verify whether dependency tracker logics works properly for this example.
SpringIndexerJavaDependencyTracker dt = indexer.getJavaIndexer().getDependencyTracker();
assertEquals(ImmutableSet.of("Lorg/test/Constants;"), dt.getAllDependencies().get(UriUtil.toFileString(docUri)));
TestFileScanListener fileScanListener = new TestFileScanListener();
indexer.getJavaIndexer().setFileScanListener(fileScanListener);
CompletableFuture<Void> updateFuture = indexer.updateDocument(docUri, FileUtils.readFileToString(UriUtil.toFile(docUri)), "test triggered");
updateFuture.get(5, TimeUnit.SECONDS);
assertEquals(ImmutableSet.of("Lorg/test/Constants;"), dt.getAllDependencies().get(UriUtil.toFileString(docUri)));
fileScanListener.assertScannedUris(docUri);
fileScanListener.assertScannedUri(constantsUri, 0);
fileScanListener.assertScannedUri(docUri, 1);
}
@Test
public void testCyclicalRequestMappingDependency() throws Exception {
//Cyclical dependency:
@@ -138,6 +163,20 @@ public class RequestMappingSymbolProviderTest {
List<? extends SymbolInformation> symbols = indexer.getSymbols(docUri);
assertEquals(1, symbols.size());
assertTrue(containsSymbol(symbols, "@/request/mapping/path/from/same/class/constant", docUri, 8, 1, 8, 52));
SpringIndexerJavaDependencyTracker dt = indexer.getJavaIndexer().getDependencyTracker();
assertEquals(ImmutableSet.of(), dt.getAllDependencies().get(UriUtil.toFileString(docUri)));
}
@Test
public void testSimpleRequestMappingSymbolFromConstantInBinaryType() throws Exception {
String docUri = directory.toPath().resolve("src/main/java/org/test/SimpleMappingClassWithConstantFromBinaryType.java").toUri().toString();
List<? extends SymbolInformation> symbols = indexer.getSymbols(docUri);
assertEquals(1, symbols.size());
assertTrue(containsSymbol(symbols, "@/(inferred)", docUri, 7, 1, 7, 53));
SpringIndexerJavaDependencyTracker dt = indexer.getJavaIndexer().getDependencyTracker();
assertEquals(ImmutableSet.of(), dt.getAllDependencies().get(UriUtil.toFileString(docUri)));
}
@Test

View File

@@ -0,0 +1,13 @@
package org.test;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
public class SimpleMappingClassWithConstantFromBinaryType {
@RequestMapping(AbstractBeanDefinition.INFER_METHOD)
public String hello() {
return "Hello";
}
}