2 Commits

Author SHA1 Message Date
Ruben
bc09039e73 feat #3: implement Cache one Layer Deeper 2025-01-28 19:15:54 +01:00
Ruben
6d6786d3b7 feat #3: implement Cache one Layer Deeper 2025-01-28 19:15:46 +01:00
3 changed files with 17 additions and 14 deletions

View File

@@ -33,7 +33,6 @@ public class JavaTXTextDocumentService implements org.eclipse.lsp4j.services.Tex
private static final Logger logger = LogManager.getLogger(JavaTXTextDocumentService.class); private static final Logger logger = LogManager.getLogger(JavaTXTextDocumentService.class);
LanguageClient client; LanguageClient client;
HashMap<String, ArrayList<LSPVariable>> dataCache = new HashMap<>();
HashMap<String, String> textDocuments = new HashMap<>(); HashMap<String, String> textDocuments = new HashMap<>();
CodeSnippetOptions codeSnippetOptions = new CodeSnippetOptions(); CodeSnippetOptions codeSnippetOptions = new CodeSnippetOptions();
TextHelper textHelper = new TextHelper(); TextHelper textHelper = new TextHelper();
@@ -159,15 +158,7 @@ public class JavaTXTextDocumentService implements org.eclipse.lsp4j.services.Tex
ArrayList<Diagnostic> diagnostics = new ArrayList<>(); ArrayList<Diagnostic> diagnostics = new ArrayList<>();
try { try {
ArrayList<LSPVariable> typesOfMethodAndParameters; ArrayList<LSPVariable> typesOfMethodAndParameters = typeResolver.infereMethodsWithParameters(textDocuments.get(params.getTextDocument().getUri()));
if(dataCache.containsKey(textDocuments.get(params.getTextDocument().getUri()))){
logger.debug("Returning Cache instead of calculating types");
typesOfMethodAndParameters = dataCache.get(textDocuments.get(params.getTextDocument().getUri()));
}else{
typesOfMethodAndParameters = typeResolver.infereMethodsWithParameters(textDocuments.get(params.getTextDocument().getUri()));
dataCache.put(textDocuments.get(params.getTextDocument().getUri()), typesOfMethodAndParameters);
}
List<InlayHint> typeHint = new ArrayList<>(); List<InlayHint> typeHint = new ArrayList<>();
for (var variable : typesOfMethodAndParameters) { for (var variable : typesOfMethodAndParameters) {

View File

@@ -19,6 +19,7 @@ import java.util.*;
*/ */
public class TypeResolver { public class TypeResolver {
HashMap<String, LanguageServerTransferObject> dataCache = new HashMap<>();
LanguageServerInterface languageServer; LanguageServerInterface languageServer;
private static final Logger logger = LogManager.getLogger(TypeResolver.class); private static final Logger logger = LogManager.getLogger(TypeResolver.class);
public TypeResolver() { public TypeResolver() {
@@ -78,9 +79,20 @@ public class TypeResolver {
return new ArrayList<>(); return new ArrayList<>();
} }
private LanguageServerTransferObject getCacheOrCalculate(String input) throws IOException, ClassNotFoundException {
if(dataCache.containsKey(input)){
logger.debug("Returning Cache instead of calculating Types.");
return dataCache.get(input);
}else{
var transferObject = languageServer.getResultSetAndAbstractSyntax(input);
dataCache.put(input, transferObject);
return transferObject;
}
}
public boolean isTypeImported(String input, String type){ public boolean isTypeImported(String input, String type){
try { try {
var transferObject = languageServer.getResultSetAndAbstractSyntax(input); var transferObject = getCacheOrCalculate(input);
var abstractSyntax = transferObject.getAst(); var abstractSyntax = transferObject.getAst();
var isAlreadyImported = false; var isAlreadyImported = false;
@@ -125,7 +137,7 @@ public class TypeResolver {
* Zum Erhalt für sowohl Parameter als auch Methoden. * Zum Erhalt für sowohl Parameter als auch Methoden.
*/ */
public ArrayList<LSPVariable> infereMethodsWithParameters(String input) throws IOException, ClassNotFoundException { public ArrayList<LSPVariable> infereMethodsWithParameters(String input) throws IOException, ClassNotFoundException {
var transferObj = languageServer.getResultSetAndAbstractSyntax(input); var transferObj = getCacheOrCalculate(input);
ArrayList<LSPVariable> methodLSPVariableList = new ArrayList<>(); ArrayList<LSPVariable> methodLSPVariableList = new ArrayList<>();
@@ -153,7 +165,7 @@ public class TypeResolver {
@Deprecated @Deprecated
public ArrayList<LSPMethod> infereMethodType(String input) throws IOException, ClassNotFoundException { public ArrayList<LSPMethod> infereMethodType(String input) throws IOException, ClassNotFoundException {
var transferObj = languageServer.getResultSetAndAbstractSyntax(input); var transferObj = getCacheOrCalculate(input);
//Für RefTypes und so dann entsprechend InstanceOf durch den Syntaxbaum denke ich //Für RefTypes und so dann entsprechend InstanceOf durch den Syntaxbaum denke ich
ArrayList<LSPMethod> methodNameWithTypeList = new ArrayList<>(); ArrayList<LSPMethod> methodNameWithTypeList = new ArrayList<>();
@@ -169,7 +181,7 @@ public class TypeResolver {
@Deprecated @Deprecated
public ArrayList<LSPParameter> infereParameterType(String input, String methodName) throws IOException, ClassNotFoundException { public ArrayList<LSPParameter> infereParameterType(String input, String methodName) throws IOException, ClassNotFoundException {
var transferObj = languageServer.getResultSetAndAbstractSyntax(input); var transferObj = getCacheOrCalculate(input);
System.out.println(transferObj.getResultSets().toString()); System.out.println(transferObj.getResultSets().toString());
System.out.println(transferObj.getPrintedAst()); System.out.println(transferObj.getPrintedAst());
ArrayList<LSPParameter> LSPParameter = new ArrayList<>(); ArrayList<LSPParameter> LSPParameter = new ArrayList<>();