Compare commits
2 Commits
28684dcaba
...
d5d562cee1
Author | SHA1 | Date | |
---|---|---|---|
|
d5d562cee1 | ||
|
a236add9f6 |
@@ -18,7 +18,7 @@ public class LanguageServerInterface {
|
||||
* */
|
||||
public LanguageServerTransferObject getResultSetAndAbstractSyntax(String input) throws IOException, ClassNotFoundException {
|
||||
|
||||
System.setOut(new PrintStream(OutputStream.nullOutputStream()));
|
||||
//System.setOut(new PrintStream(OutputStream.nullOutputStream()));
|
||||
File tempSourcefile = File.createTempFile("temp", ".java");
|
||||
tempSourcefile.deleteOnExit();
|
||||
|
||||
@@ -28,7 +28,7 @@ public class LanguageServerInterface {
|
||||
|
||||
JavaTXCompiler tx = new JavaTXCompiler(tempSourcefile);
|
||||
var test = tx.getResultSetAndAbstractSyntax(tempSourcefile);
|
||||
System.setOut(System.out);
|
||||
//System.setOut(System.out);
|
||||
return test;
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@ package de.dhbw.helper;
|
||||
import de.dhbw.compiler.languageServerInterface.LanguageServerInterface;
|
||||
import de.dhbw.compiler.languageServerInterface.LanguageServerTransferObject;
|
||||
import de.dhbw.model.MethodNameWithType;
|
||||
import de.dhbw.model.ParameterNameWithType;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
@@ -52,9 +54,11 @@ public class TypeFinder {
|
||||
if (el2.getRight().toString().toLowerCase().contains("TPH")) {
|
||||
queue.add(el2.getRight().toString());
|
||||
} else {
|
||||
if (!finalTypes.contains(el2.getRight().toString())) {
|
||||
finalTypes.add(el2.getRight().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
}
|
||||
@@ -77,13 +81,13 @@ public class TypeFinder {
|
||||
if (method.getReturnType().toString().contains("TPH ")) {
|
||||
StringBuilder possibleTypes = new StringBuilder();
|
||||
|
||||
for(var type : typeHashMap.get(method.getReturnType().toString())){
|
||||
for (var type : typeHashMap.get(method.getReturnType().toString())) {
|
||||
possibleTypes.append(" | ").append(type);
|
||||
}
|
||||
|
||||
|
||||
return possibleTypes.toString().substring(3);
|
||||
}else{
|
||||
} else {
|
||||
return method.getReturnType().toString();
|
||||
}
|
||||
|
||||
@@ -93,6 +97,34 @@ public class TypeFinder {
|
||||
return "java.lang.Object";
|
||||
}
|
||||
|
||||
public ArrayList<String> findTypeOfParameter(LanguageServerTransferObject transferObj, String methodName) throws IOException, ClassNotFoundException {
|
||||
|
||||
var typeHashMap = findAvailableTypes(transferObj);
|
||||
ArrayList<String> paramTypes = new ArrayList<>();
|
||||
|
||||
for (var method : transferObj.getAst().getAllMethods()) {
|
||||
if (method.name.equals(methodName)) {
|
||||
for (var param : method.getParameterList()) {
|
||||
|
||||
if (param.getType().toString().contains("TPH ")) {
|
||||
StringBuilder possibleTypes = new StringBuilder();
|
||||
try {
|
||||
for (var type : typeHashMap.get(param.getType().toString())) {
|
||||
possibleTypes.append(" | ").append(type);
|
||||
}
|
||||
|
||||
paramTypes.add(possibleTypes.toString().substring(3));
|
||||
}catch (Exception e) {
|
||||
paramTypes.add("java.lang.Object");
|
||||
}
|
||||
} else {
|
||||
paramTypes.add(method.getReturnType().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return paramTypes;
|
||||
}
|
||||
|
||||
|
||||
public ArrayList<MethodNameWithType> infereMethodType(String input) throws IOException, ClassNotFoundException {
|
||||
@@ -101,6 +133,7 @@ public class TypeFinder {
|
||||
ArrayList<MethodNameWithType> methodNameWithTypeList = new ArrayList<>();
|
||||
|
||||
for (var method : transferObj.getAst().getAllMethods()) {
|
||||
|
||||
var type = findTypeOfMethod(transferObj, method.name);
|
||||
methodNameWithTypeList.add(new MethodNameWithType(method.name, type, method.getOffset().getLine(), method.getOffset().getStartIndex()));
|
||||
}
|
||||
@@ -108,4 +141,27 @@ public class TypeFinder {
|
||||
return methodNameWithTypeList;
|
||||
}
|
||||
|
||||
public ArrayList<ParameterNameWithType> infereParameterType(String input) throws IOException, ClassNotFoundException {
|
||||
var transferObj = languageServer.getResultSetAndAbstractSyntax(input);
|
||||
System.out.println(transferObj.getResultSets().toString());
|
||||
System.out.println(transferObj.getPrintedAst());
|
||||
//Für RefTypes und so dann entsprechend InstanceOf durch den Syntaxbaum denke ich
|
||||
ArrayList<ParameterNameWithType> ParameterNameWithType = new ArrayList<>();
|
||||
|
||||
for (var method : transferObj.getAst().getAllMethods()) {
|
||||
int index = 0;
|
||||
for (var param : method.getParameterList()) {
|
||||
|
||||
var type = findTypeOfParameter(transferObj, method.name);
|
||||
|
||||
ParameterNameWithType.add(new ParameterNameWithType(method.name, type.get(index), param.getOffset().getLine(), param.getOffset().getStartIndex()));
|
||||
index++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return ParameterNameWithType;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package de.dhbw.model;
|
||||
|
||||
public class ParameterNameWithType {
|
||||
String name;
|
||||
String type;
|
||||
int line;
|
||||
int charPosition;
|
||||
|
||||
public ParameterNameWithType(String name, String type, int line, int charPosition) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.line = line;
|
||||
this.charPosition = charPosition;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
public int getLine() {
|
||||
return line;
|
||||
}
|
||||
public void setLine(int line) {
|
||||
this.line = line;
|
||||
}
|
||||
public int getCharPosition() {
|
||||
return charPosition;
|
||||
}
|
||||
public void setCharPosition(int charPosition) {
|
||||
this.charPosition = charPosition;
|
||||
}
|
||||
}
|
@@ -29,16 +29,36 @@ public class CompilerInterfaceTest {
|
||||
public void testTypeFinder() throws IOException, ClassNotFoundException {
|
||||
TypeFinder typeFinder = new TypeFinder();
|
||||
var inferedMethods = typeFinder.infereMethodType("import java.lang.Integer; import java.lang.String;" +
|
||||
"public class test{"+
|
||||
"public class test{" +
|
||||
"public main(test){" +
|
||||
"if(0>1){" +
|
||||
"return \"w\";" +
|
||||
"}"+
|
||||
"Integer i = 0;"+
|
||||
"return i;"+
|
||||
"}"+
|
||||
"}" +
|
||||
"Integer i = 0;" +
|
||||
"return i;" +
|
||||
"}" +
|
||||
"}"
|
||||
);
|
||||
);
|
||||
|
||||
inferedMethods.forEach(el -> System.out.println(el.getName() + ": " + el.getType()));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTypeFinderParameter() throws IOException, ClassNotFoundException {
|
||||
TypeFinder typeFinder = new TypeFinder();
|
||||
var inferedMethods = typeFinder.infereParameterType("import java.lang.Integer; import java.lang.String;" +
|
||||
"public class test{" +
|
||||
"public main(test, test2){" +
|
||||
"if(0>1){" +
|
||||
"return \"w\";" +
|
||||
"}" +
|
||||
"Integer t = test;" +
|
||||
"String i = \"test\";" +
|
||||
"return i;" +
|
||||
"}" +
|
||||
"}"
|
||||
);
|
||||
|
||||
inferedMethods.forEach(el -> System.out.println(el.getName() + ": " + el.getType()));
|
||||
|
||||
|
Reference in New Issue
Block a user