3 Commits

Author SHA1 Message Date
Ruben
fbf8704af6 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	Clients/VisualStudioCode/JavaTXLanguageServer-1.0-SNAPSHOT-jar-with-dependencies.jar
2025-02-12 17:03:05 +01:00
Ruben
dc896a453d feat: add Generic ResultSet in DTO 2025-02-12 17:02:52 +01:00
Ruben
5d41a19705 feat: add Generic ResultSet in DTO 2025-02-12 17:00:52 +01:00
4 changed files with 47 additions and 6 deletions

View File

@@ -406,7 +406,8 @@ public class JavaTXCompiler {
unify.unifyParallel(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, urm, usedTasks); unify.unifyParallel(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, urm, usedTasks);
logFile.write("RES_FINAL: " + li.getResults().toString() + "\n"); logFile.write("RES_FINAL: " + li.getResults().toString() + "\n");
logFile.flush(); logFile.flush();
return new LanguageServerTransferObject(li.getResults(), sf, ASTTypePrinter.print(sf)); generateBytecode(sf, li.getResults());
return new LanguageServerTransferObject(li.getResults(), sf, ASTTypePrinter.print(sf), generatedGenerics);
} }
/* UnifyResultModel End */ /* UnifyResultModel End */
else { else {
@@ -433,7 +434,8 @@ public class JavaTXCompiler {
} }
} catch (IOException | ClassNotFoundException e) { } catch (IOException | ClassNotFoundException e) {
} }
return new LanguageServerTransferObject(results.stream().map((unifyPairs -> new ResultSet(UnifyTypeFactory.convert(unifyPairs, Pair.generateTPHMap(cons))))).collect(Collectors.toList()), sf, ASTTypePrinter.print(sf)); generateBytecode(sf, results.stream().map((unifyPairs -> new ResultSet(UnifyTypeFactory.convert(unifyPairs, Pair.generateTPHMap(cons))))).collect(Collectors.toList()));
return new LanguageServerTransferObject(results.stream().map((unifyPairs -> new ResultSet(UnifyTypeFactory.convert(unifyPairs, Pair.generateTPHMap(cons))))).collect(Collectors.toList()), sf, ASTTypePrinter.print(sf), generatedGenerics);
} }
public List<ResultSet> typeInference(File file) throws ClassNotFoundException, IOException { public List<ResultSet> typeInference(File file) throws ClassNotFoundException, IOException {

View File

@@ -1,21 +1,29 @@
package de.dhbw.compiler.languageServerInterface; package de.dhbw.compiler.languageServerInterface;
import de.dhbw.compiler.syntaxtree.SourceFile; import de.dhbw.compiler.syntaxtree.SourceFile;
import de.dhbw.compiler.target.generate.GenericsResult;
import de.dhbw.compiler.typeinference.result.ResultSet; import de.dhbw.compiler.typeinference.result.ResultSet;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class LanguageServerTransferObject { public class LanguageServerTransferObject {
List<ResultSet> resultSets; List<ResultSet> resultSets;
SourceFile Ast; SourceFile Ast;
String printedAst; String printedAst;
public LanguageServerTransferObject(List<ResultSet> resultSets, SourceFile Ast, String printedAst) { Map<SourceFile, List<GenericsResult>> generatedGenerics = new HashMap<>();
public LanguageServerTransferObject(List<ResultSet> resultSets, SourceFile Ast, String printedAst, Map<SourceFile, List<GenericsResult>> generatedGenerics) {
this.resultSets = resultSets; this.resultSets = resultSets;
this.Ast = Ast; this.Ast = Ast;
this.printedAst = printedAst; this.printedAst = printedAst;
this.generatedGenerics = generatedGenerics;
} }
public List<ResultSet> getResultSets() {return resultSets;} public List<ResultSet> getResultSets() {return resultSets;}
public SourceFile getAst() {return Ast;} public SourceFile getAst() {return Ast;}
public String getPrintedAst() {return printedAst;} public String getPrintedAst() {return printedAst;}
public Map<SourceFile, List<GenericsResult>> getGeneratedGenerics() {return generatedGenerics;}
} }

View File

@@ -13,9 +13,8 @@ public class CompilerInterfaceTest {
LanguageServerInterface languageServer = new LanguageServerInterface(); LanguageServerInterface languageServer = new LanguageServerInterface();
var res = languageServer.getResultSetAndAbstractSyntax("import java.lang.Integer; public class test{\n" + var res = languageServer.getResultSetAndAbstractSyntax("import java.lang.Integer; public class test{\n" +
" \n" + " \n" +
" public main( test){\n" + " public main(testa){\n" +
" Integer i = test; " + " return testa;\n" +
" return i;\n" +
" }\n" + " }\n" +
"}"); "}");
@@ -27,6 +26,23 @@ public class CompilerInterfaceTest {
System.out.println(res.getPrintedAst()); System.out.println(res.getPrintedAst());
} }
@Test
public void testConstraintTypes() throws IOException, ClassNotFoundException {
LanguageServerInterface languageServer = new LanguageServerInterface();
TypeResolver typeResolver = new TypeResolver();
var res = typeResolver.infereMethodsWithParameters("import java.lang.Boolean; import java.lang.Integer; public class test{\n" +
" \n" +
" public main(testa, testa2, testa3){\n" +
" if(testa3){\n" +
"return testa2;}" +
" return testa;\n" +
" }\n" +
"}");
res.forEach(el -> System.out.println(el.getName() + ": " + el.getPossibleTypes() + " | " + el.getLine() + " " + el.getCharPosition()));
}
@Test @Test
public void testTypeFinder() throws IOException, ClassNotFoundException { public void testTypeFinder() throws IOException, ClassNotFoundException {
TypeResolver typeResolver = new TypeResolver(); TypeResolver typeResolver = new TypeResolver();
@@ -46,6 +62,21 @@ public class CompilerInterfaceTest {
} }
@Test
public void testGenericTypes() throws IOException, ClassNotFoundException {
TypeResolver typeResolver = new TypeResolver();
var inferedMethods = typeResolver.infereMethodsWithParameters("import java.lang.Integer; public class test{\n" +
" \n" +
" public main(testa){\n" +
" return testa;\n" +
" }\n" +
"}"
);
inferedMethods.forEach(el -> System.out.println(el.getName() + ": " + el.getPossibleTypes() + " | " + el.getLine() + " " + el.getCharPosition()));
}
@Test @Test
public void testTypeFinderParameter() throws IOException, ClassNotFoundException { public void testTypeFinderParameter() throws IOException, ClassNotFoundException {
TypeResolver typeResolver = new TypeResolver(); TypeResolver typeResolver = new TypeResolver();