refactored symbol cache to enable reuse for various types of cache items and separated symbol cache from beans index cache
This commit is contained in:
@@ -36,6 +36,7 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.ide.vscode.boot.index.cache.AbstractIndexCacheable;
|
||||
import org.springframework.ide.vscode.boot.index.cache.IndexCacheKey;
|
||||
import org.springframework.ide.vscode.boot.index.cache.IndexCacheOnDisc;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.EnhancedSymbolInformation;
|
||||
@@ -67,7 +68,7 @@ public class IndexCacheOnDiscTest {
|
||||
|
||||
@Test
|
||||
void testEmptyCache() throws Exception {
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("something", "0"), new String[0]);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("something", "0"), new String[0], CachedSymbol.class);
|
||||
assertNull(result);
|
||||
}
|
||||
|
||||
@@ -87,15 +88,15 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols = new ArrayList<>();
|
||||
WorkspaceSymbol symbol = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location("docURI", new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol = new EnhancedSymbolInformation(symbol, null);
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol, null));
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, ImmutableMultimap.of(
|
||||
file1.toString(), "file1dep1",
|
||||
file2.toString(), "file2dep1",
|
||||
file2.toString(), "file2dep2"
|
||||
));
|
||||
), CachedSymbol.class);
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
|
||||
CachedSymbol[] cachedSymbols = result.getLeft();
|
||||
assertNotNull(cachedSymbols);
|
||||
@@ -113,8 +114,6 @@ public class IndexCacheOnDiscTest {
|
||||
|
||||
assertEquals(timeFile1.toMillis(), cache.getModificationTimestamp(new IndexCacheKey("somekey", "1"), file1.toString()));
|
||||
assertEquals(0, cache.getModificationTimestamp(new IndexCacheKey("somekey", "1"), "random-non-existing-file"));
|
||||
|
||||
assertNull(cachedSymbols[0].getBean());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -133,11 +132,11 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols = new ArrayList<>();
|
||||
WorkspaceSymbol symbol = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location("docURI", new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol = new EnhancedSymbolInformation(symbol, null);
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol, null));
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null, CachedSymbol.class);
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("otherkey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("otherkey", "1"), files, CachedSymbol.class);
|
||||
assertNull(result);
|
||||
}
|
||||
|
||||
@@ -157,16 +156,16 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols = new ArrayList<>();
|
||||
WorkspaceSymbol symbol = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location("docURI", new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol = new EnhancedSymbolInformation(symbol, null);
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol, null));
|
||||
generatedSymbols.add(new CachedSymbol("", timeFile1.toMillis(), enhancedSymbol));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, ImmutableMultimap.of(
|
||||
file1.toString(), "file1dep",
|
||||
file2.toString(), "file2dep"
|
||||
));
|
||||
), CachedSymbol.class);
|
||||
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 1000));
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNull(result);
|
||||
}
|
||||
|
||||
@@ -181,10 +180,10 @@ public class IndexCacheOnDiscTest {
|
||||
Files.createFile(file3);
|
||||
|
||||
String[] files = {file1.toString(), file2.toString()};
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, new ArrayList<>(), null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, new ArrayList<>(), null, CachedSymbol.class);
|
||||
|
||||
String[] moreFiles = {file1.toString(), file2.toString(), file3.toString()};
|
||||
assertNull(cache.retrieve(new IndexCacheKey("somekey", "1"), moreFiles));
|
||||
assertNull(cache.retrieve(new IndexCacheKey("somekey", "1"), moreFiles, CachedSymbol.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -198,20 +197,20 @@ public class IndexCacheOnDiscTest {
|
||||
Files.createFile(file3);
|
||||
|
||||
String[] files = {file1.toString(), file2.toString(), file3.toString()};
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, new ArrayList<>(), null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, new ArrayList<>(), null, CachedSymbol.class);
|
||||
|
||||
String[] fewerFiles = {file1.toString(), file2.toString()};
|
||||
assertNull(cache.retrieve(new IndexCacheKey("somekey", "1"), fewerFiles));
|
||||
assertNull(cache.retrieve(new IndexCacheKey("somekey", "1"), fewerFiles, CachedSymbol.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDeleteOldCacheFileIfNewOneIsStored() throws Exception {
|
||||
IndexCacheKey key1 = new IndexCacheKey("somekey", "1");
|
||||
cache.store(key1, new String[0], new ArrayList<>(), null);
|
||||
cache.store(key1, new String[0], new ArrayList<>(), null, CachedSymbol.class);
|
||||
assertTrue(Files.exists(tempDir.resolve(Paths.get(key1.toString() + ".json"))));
|
||||
|
||||
IndexCacheKey key2 = new IndexCacheKey("somekey", "2");
|
||||
cache.store(key2, new String[0], new ArrayList<>(), null);
|
||||
cache.store(key2, new String[0], new ArrayList<>(), null, CachedSymbol.class);
|
||||
assertTrue(Files.exists(tempDir.resolve(Paths.get(key2.toString() + ".json"))));
|
||||
assertFalse(Files.exists(tempDir.resolve(Paths.get(key1.toString() + ".json"))));
|
||||
}
|
||||
@@ -231,11 +230,11 @@ public class IndexCacheOnDiscTest {
|
||||
WebfluxElementsInformation addon = new WebfluxElementsInformation(new Range(new Position(4, 4), new Position(5, 5)), new Range(new Position(6, 6), new Position(7, 7)));
|
||||
EnhancedSymbolInformation enhancedSymbol = new EnhancedSymbolInformation(symbol, new SymbolAddOnInformation[]{addon});
|
||||
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null, CachedSymbol.class);
|
||||
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files);
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(cachedSymbols);
|
||||
assertEquals(1, cachedSymbols.length);
|
||||
|
||||
@@ -268,9 +267,9 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols1 = new ArrayList<>();
|
||||
WorkspaceSymbol symbol1 = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location("docURI", new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol1 = new EnhancedSymbolInformation(symbol1, null);
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1, null));
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null, CachedSymbol.class);
|
||||
|
||||
List<CachedSymbol> generatedSymbols2 = new ArrayList<>();
|
||||
symbol1 = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location(doc1URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
@@ -279,13 +278,13 @@ public class IndexCacheOnDiscTest {
|
||||
WorkspaceSymbol symbol2 = new WorkspaceSymbol("symbol2", SymbolKind.Interface, Either.forLeft(new Location(doc1URI, new Range(new Position(5, 5), new Position(5, 10)))));
|
||||
EnhancedSymbolInformation enhancedSymbol2 = new EnhancedSymbolInformation(symbol2, null);
|
||||
|
||||
generatedSymbols2.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, enhancedSymbol1, null));
|
||||
generatedSymbols2.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, enhancedSymbol2, null));
|
||||
generatedSymbols2.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, enhancedSymbol1));
|
||||
generatedSymbols2.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, enhancedSymbol2));
|
||||
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 2000));
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, null);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, null, CachedSymbol.class);
|
||||
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files);
|
||||
AbstractIndexCacheable[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(cachedSymbols);
|
||||
assertEquals(2, cachedSymbols.length);
|
||||
|
||||
@@ -317,18 +316,18 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols = new ArrayList<>();
|
||||
WorkspaceSymbol symbol1 = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location(doc1URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol1 = new EnhancedSymbolInformation(symbol1, null);
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1));
|
||||
|
||||
WorkspaceSymbol symbol2 = new WorkspaceSymbol("symbol2", SymbolKind.Field, Either.forLeft(new Location(doc2URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol2 = new EnhancedSymbolInformation(symbol2, null);
|
||||
generatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2));
|
||||
|
||||
WorkspaceSymbol symbol3 = new WorkspaceSymbol("symbol3", SymbolKind.Field, Either.forLeft(new Location(doc3URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol3 = new EnhancedSymbolInformation(symbol3, null);
|
||||
generatedSymbols.add(new CachedSymbol(doc3URI, timeFile3.toMillis(), enhancedSymbol3, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc3URI, timeFile3.toMillis(), enhancedSymbol3));
|
||||
|
||||
// store original version of the symbols to the cache
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, null, CachedSymbol.class);
|
||||
|
||||
|
||||
// create updated and new symbols
|
||||
@@ -340,23 +339,23 @@ public class IndexCacheOnDiscTest {
|
||||
WorkspaceSymbol newSymbol1 = new WorkspaceSymbol("symbol1-new", SymbolKind.Interface, Either.forLeft(new Location(doc1URI, new Range(new Position(5, 5), new Position(5, 10)))));
|
||||
EnhancedSymbolInformation newEnhancedSymbol1 = new EnhancedSymbolInformation(newSymbol1, null);
|
||||
|
||||
updatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, updatedEnhancedSymbol1, null));
|
||||
updatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, newEnhancedSymbol1, null));
|
||||
updatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, updatedEnhancedSymbol1));
|
||||
updatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis() + 2000, newEnhancedSymbol1));
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 2000));
|
||||
|
||||
WorkspaceSymbol updatedSymbol2 = new WorkspaceSymbol("symbol2-updated", SymbolKind.Field, Either.forLeft(new Location(doc2URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation updatedEnhancedSymbol2 = new EnhancedSymbolInformation(updatedSymbol2, null);
|
||||
updatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis() + 3000, updatedEnhancedSymbol2, null));
|
||||
updatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis() + 3000, updatedEnhancedSymbol2));
|
||||
assertTrue(file2.toFile().setLastModified(timeFile2.toMillis() + 3000));
|
||||
|
||||
String[] updatedFiles = new String[]{file1.toAbsolutePath().toString(), file2.toAbsolutePath().toString()};
|
||||
long[] updatedModificationTimestamps = new long[]{timeFile1.toMillis() + 2000, timeFile2.toMillis() + 3000};
|
||||
|
||||
// update multiple files in the cache
|
||||
cache.update(new IndexCacheKey("somekey", "1"), updatedFiles, updatedModificationTimestamps, updatedSymbols, null);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), updatedFiles, updatedModificationTimestamps, updatedSymbols, null, CachedSymbol.class);
|
||||
|
||||
// double check whether all changes got stored and retrieved correctly
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files);
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(cachedSymbols);
|
||||
assertEquals(4, cachedSymbols.length);
|
||||
|
||||
@@ -395,13 +394,13 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols = ImmutableList.of();
|
||||
|
||||
Multimap<String, String> dependencies = ImmutableMultimap.of(file1.toString(), "dep1");
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, dependencies);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, dependencies, CachedSymbol.class);
|
||||
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 2000));
|
||||
Set<String> dependencies2 = ImmutableSet.of("dep1", "dep2");
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols, dependencies2);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols, dependencies2, CachedSymbol.class);
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(result);
|
||||
assertEquals(ImmutableSet.of("dep1", "dep2"), result.getRight().get(file1.toString()));
|
||||
}
|
||||
@@ -420,16 +419,16 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols1 = new ArrayList<>();
|
||||
WorkspaceSymbol symbol1 = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location("docURI", new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol1 = new EnhancedSymbolInformation(symbol1, null);
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1, null));
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null, CachedSymbol.class);
|
||||
|
||||
List<CachedSymbol> generatedSymbols2 = new ArrayList<>();
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 2000));
|
||||
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, null);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, null, CachedSymbol.class);
|
||||
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files);
|
||||
AbstractIndexCacheable[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(cachedSymbols);
|
||||
assertEquals(0, cachedSymbols.length);
|
||||
}
|
||||
@@ -450,15 +449,15 @@ public class IndexCacheOnDiscTest {
|
||||
file1.toString(), "dep2"
|
||||
);
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, dependencies1);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, dependencies1, CachedSymbol.class);
|
||||
|
||||
List<CachedSymbol> generatedSymbols2 = new ArrayList<>();
|
||||
assertTrue(file1.toFile().setLastModified(timeFile1.toMillis() + 2000));
|
||||
|
||||
Set<String> dependencies2 = ImmutableSet.of("dep2");
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, dependencies2);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), timeFile1.toMillis() + 2000, generatedSymbols2, dependencies2, CachedSymbol.class);
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
assertNotNull(result);
|
||||
assertEquals(ImmutableSet.of("dep2"), result.getRight().get(file1.toString()));
|
||||
}
|
||||
@@ -481,19 +480,19 @@ public class IndexCacheOnDiscTest {
|
||||
List<CachedSymbol> generatedSymbols1 = new ArrayList<>();
|
||||
WorkspaceSymbol symbol1 = new WorkspaceSymbol("symbol1", SymbolKind.Field, Either.forLeft(new Location(doc1URI, new Range(new Position(3, 10), new Position(3, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol1 = new EnhancedSymbolInformation(symbol1, null);
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1, null));
|
||||
generatedSymbols1.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1));
|
||||
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, null, CachedSymbol.class);
|
||||
|
||||
List<CachedSymbol> generatedSymbols2 = new ArrayList<>();
|
||||
WorkspaceSymbol symbol2 = new WorkspaceSymbol("symbol2", SymbolKind.Interface, Either.forLeft(new Location(doc2URI, new Range(new Position(5, 5), new Position(5, 10)))));
|
||||
EnhancedSymbolInformation enhancedSymbol2 = new EnhancedSymbolInformation(symbol2, null);
|
||||
|
||||
generatedSymbols2.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2, null));
|
||||
generatedSymbols2.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2));
|
||||
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file2.toString(), timeFile2.toMillis(), generatedSymbols2, null);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file2.toString(), timeFile2.toMillis(), generatedSymbols2, null, CachedSymbol.class);
|
||||
|
||||
CachedSymbol[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), new String[]{file1.toString(), file2.toString()});
|
||||
AbstractIndexCacheable[] cachedSymbols = cache.retrieveSymbols(new IndexCacheKey("somekey", "1"), new String[]{file1.toString(), file2.toString()}, CachedSymbol.class);
|
||||
assertNotNull(cachedSymbols);
|
||||
assertEquals(2, cachedSymbols.length);
|
||||
}
|
||||
@@ -513,12 +512,12 @@ public class IndexCacheOnDiscTest {
|
||||
Multimap<String, String> dependencies1 = ImmutableMultimap.of(
|
||||
file1.toString(), "dep1"
|
||||
);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, dependencies1);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols1, dependencies1, CachedSymbol.class);
|
||||
|
||||
Set<String> dependencies2 = ImmutableSet.of("dep2");
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file2.toString(), timeFile2.toMillis(), generatedSymbols1, dependencies2);
|
||||
cache.update(new IndexCacheKey("somekey", "1"), file2.toString(), timeFile2.toMillis(), generatedSymbols1, dependencies2, CachedSymbol.class);
|
||||
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), new String[]{file1.toString(), file2.toString()});
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), new String[]{file1.toString(), file2.toString()}, CachedSymbol.class);
|
||||
assertNotNull(result);
|
||||
assertEquals(ImmutableSet.of("dep2"), result.getRight().get(file2.toString()));
|
||||
assertEquals(ImmutableSet.of("dep1"), result.getRight().get(file1.toString()));
|
||||
@@ -527,7 +526,7 @@ public class IndexCacheOnDiscTest {
|
||||
@Test
|
||||
void testProjectDeleted() throws Exception {
|
||||
IndexCacheKey key1 = new IndexCacheKey("somekey", "1");
|
||||
cache.store(key1, new String[0], new ArrayList<>(), null);
|
||||
cache.store(key1, new String[0], new ArrayList<>(), null, CachedSymbol.class);
|
||||
assertTrue(Files.exists(tempDir.resolve(Paths.get(key1.toString() + ".json"))));
|
||||
|
||||
cache.remove(key1);
|
||||
@@ -557,18 +556,18 @@ public class IndexCacheOnDiscTest {
|
||||
WorkspaceSymbol symbol2 = new WorkspaceSymbol("symbol2", SymbolKind.Field, Either.forLeft(new Location(doc2URI, new Range(new Position(5, 10), new Position(5, 20)))));
|
||||
EnhancedSymbolInformation enhancedSymbol2 = new EnhancedSymbolInformation(symbol2, null);
|
||||
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2, null));
|
||||
generatedSymbols.add(new CachedSymbol(doc1URI, timeFile1.toMillis(), enhancedSymbol1));
|
||||
generatedSymbols.add(new CachedSymbol(doc2URI, timeFile2.toMillis(), enhancedSymbol2));
|
||||
|
||||
Multimap<String, String> dependencies = ImmutableMultimap.of(
|
||||
file1.toString(), "dep1",
|
||||
file2.toString(), "dep2"
|
||||
);
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, dependencies);
|
||||
cache.removeFile(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString());
|
||||
cache.store(new IndexCacheKey("somekey", "1"), files, generatedSymbols, dependencies, CachedSymbol.class);
|
||||
cache.removeFile(new IndexCacheKey("somekey", "1"), file1.toAbsolutePath().toString(), CachedSymbol.class);
|
||||
|
||||
files = new String[]{file2.toAbsolutePath().toString()};
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files);
|
||||
Pair<CachedSymbol[], Multimap<String, String>> result = cache.retrieve(new IndexCacheKey("somekey", "1"), files, CachedSymbol.class);
|
||||
CachedSymbol[] cachedSymbols = result.getLeft();
|
||||
assertNotNull(result);
|
||||
assertEquals(1, cachedSymbols.length);
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.springframework.ide.vscode.boot.index.cache.IndexCache;
|
||||
import org.springframework.ide.vscode.boot.index.cache.IndexCacheKey;
|
||||
import org.springframework.ide.vscode.boot.java.utils.CachedSymbol;
|
||||
import org.springframework.ide.vscode.boot.index.cache.IndexCacheable;
|
||||
|
||||
import com.google.common.collect.Multimap;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class IndexCacheTimestampsOnly implements IndexCache {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(IndexCacheKey cacheKey, String[] files, List<CachedSymbol> generatedSymbols, Multimap<String,String> dependencies) {
|
||||
public <T extends IndexCacheable> void store(IndexCacheKey cacheKey, String[] files, List<T> generatedSymbols, Multimap<String, String> dependencies, Class<T> type) {
|
||||
SortedMap<String, Long> timestampedFiles = new TreeMap<>();
|
||||
|
||||
timestampedFiles = Arrays.stream(files)
|
||||
@@ -58,18 +58,18 @@ public class IndexCacheTimestampsOnly implements IndexCache {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<CachedSymbol[], Multimap<String, String>> retrieve(IndexCacheKey cacheKey, String[] files) {
|
||||
public <T extends IndexCacheable> Pair<T[], Multimap<String, String>> retrieve(IndexCacheKey cacheKey, String[] files, Class<T> type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(IndexCacheKey cacheKey, String file, long lastModified, List<CachedSymbol> generatedSymbols, Set<String> dependencies) {
|
||||
public <T extends IndexCacheable> void update(IndexCacheKey cacheKey, String file, long lastModified, List<T> generatedSymbols, Set<String> dependencies, Class<T> type) {
|
||||
Map<String, Long> timestampMap = timestampCache.get(cacheKey);
|
||||
timestampMap.put(file, lastModified);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(IndexCacheKey cacheKey, String[] files, long[] lastModified, List<CachedSymbol> generatedSymbols, Multimap<String, String> dependencies) {
|
||||
public <T extends IndexCacheable> void update(IndexCacheKey cacheKey, String[] files, long[] lastModified, List<T> generatedSymbols, Multimap<String, String> dependencies, Class<T> type) {
|
||||
Map<String, Long> timestampMap = timestampCache.get(cacheKey);
|
||||
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
@@ -82,7 +82,7 @@ public class IndexCacheTimestampsOnly implements IndexCache {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFile(IndexCacheKey symbolCacheKey, String file) {
|
||||
public <T extends IndexCacheable> void removeFile(IndexCacheKey symbolCacheKey, String file, Class<T> type) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user