package strucType; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.strucTypes.Construct; import de.dhbwstuttgart.strucTypes.Solve; import de.dhbwstuttgart.strucTypes.StrucTYPE; import de.dhbwstuttgart.strucTypes.constraint.ConstraintsSet; import de.dhbwstuttgart.strucTypes.constraint.SubTypeConstraint; import de.dhbwstuttgart.strucTypes.exception.ImpossibleSubTypeException; import de.dhbwstuttgart.strucTypes.exception.InconsistentConstraintsException; import de.dhbwstuttgart.strucTypes.model.InferredTypes; import de.dhbwstuttgart.strucTypes.model.SolvedClass; import de.dhbwstuttgart.strucTypes.printutils.PrintConstraints; import de.dhbwstuttgart.strucTypes.printutils.PrintInferredTypes; import de.dhbwstuttgart.strucTypes.printutils.SyntaxTreePrinter; import de.dhbwstuttgart.syntaxtree.ClassOrInterface; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory; import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure; public class TestSolve { public static final String rootDirectory = System.getProperty("user.dir") + "/test/strucType/javFiles/"; public final PrintConstraints printConstraints = new PrintConstraints(); @org.junit.Test public void test() throws ClassNotFoundException, IOException, ImpossibleSubTypeException, InconsistentConstraintsException { ArrayList files = new ArrayList<>(); files.add(new File(rootDirectory + "testLocalVar.jav")); files.add(new File(rootDirectory + "testCast.jav")); files.add(new File(rootDirectory + "testNew.jav")); files.add(new File(rootDirectory + "testFieldVar.jav")); files.add(new File(rootDirectory + "testFieldMethod.jav")); files.add(new File(rootDirectory + "testMethod.jav")); files.add(new File(rootDirectory + "testPaperExample.jav")); JavaTXCompiler compiler = new JavaTXCompiler(files); for (File f : compiler.sourceFiles.keySet()) { String name = f.getName(); System.out.println("Filename: " + name); SourceFile sourceFile = compiler.sourceFiles.get(f); // Print SourceFile Infos SyntaxTreePrinter syntaxtreeprinter = new SyntaxTreePrinter(); sourceFile.accept(syntaxtreeprinter); System.out.println("\n--StrucTYPE--"); ClassOrInterface clsA = sourceFile.getClasses().get(0); StrucTYPE strucTYPE = new StrucTYPE(clsA); final ConstraintsSet constraints = strucTYPE.getConstraints(); final InferredTypes inferredTypesType = strucTYPE.getInferredTypes(); printConstraints.print(constraints); PrintInferredTypes.print(inferredTypesType); System.out.println("\n--Construct--"); Construct construct = new Construct(constraints, inferredTypesType); final List constructedInterfaces = construct.getConstructedInterfaces(); final Set subTypeConstraints = construct.getSubTypeConstraints(); // Set subTypeConstraints = construct.getSubTypeConstraintsAsUnifyPairs(); final InferredTypes inferredTypesConstruct = construct.getInferredTypes(); System.out.println("\nConstructed Interfaces:"); constructedInterfaces.forEach(i -> i.accept(syntaxtreeprinter)); printConstraints.printSubTypeConstraints(subTypeConstraints); PrintInferredTypes.print(inferredTypesConstruct); System.out.println("\n--Solve--"); // Alle Klassen aus allen SourceFiles List availableClasses = compiler.getAvailableClasses(sourceFile); FiniteClosure finiteClosure = UnifyTypeFactory.generateFC(availableClasses); // System.out.println("\nFinite Closure:"); // System.out.println(finiteClosure); Solve solve = new Solve(subTypeConstraints, clsA, finiteClosure, inferredTypesConstruct, constructedInterfaces); SolvedClass solvedClass = solve.getSolvedClass(); System.out.println("\nSolved Class:"); solvedClass.accept(syntaxtreeprinter); System.out.println("\nRemaining Constraints:"); printConstraints.printSubTypeConstraints(solvedClass.getConstraints()); System.out.println("____________________________________________________________________________"); } } }