update solve (not fixed).

This commit is contained in:
Aldaron7 2018-05-30 15:36:28 +02:00
parent 7e1d6fad01
commit 25a5e79509
9 changed files with 50 additions and 28 deletions

View File

@ -56,6 +56,7 @@ public class Construct extends DefaultASTVisitor {
}
public Set<SubTypeConstraint> getSubTypeConstraints() {
this.subTypeConstraints.forEach(sc -> sc.inferTypes(this.inferredTypes));
return subTypeConstraints;
}
@ -130,7 +131,6 @@ public class Construct extends DefaultASTVisitor {
TypePlaceholder x = TypePlaceholder.fresh(offset);
this.subTypeConstraints.add(new SubTypeConstraint(x, inh_tyterm));
this.inferredTypes.put(i, x);
this.subTypeConstraints.forEach(sc -> sc.inferTypes(this.inferredTypes));
final int modifiers = Modifier.PUBLIC;
final RefType superClass = this.createSuperClass();

View File

@ -19,6 +19,7 @@ import de.dhbwstuttgart.syntaxtree.statement.CastExpr;
import de.dhbwstuttgart.syntaxtree.statement.Expression;
import de.dhbwstuttgart.syntaxtree.statement.ExpressionReceiver;
import de.dhbwstuttgart.syntaxtree.statement.FieldVar;
import de.dhbwstuttgart.syntaxtree.statement.Literal;
import de.dhbwstuttgart.syntaxtree.statement.LocalVar;
import de.dhbwstuttgart.syntaxtree.statement.MethodCall;
import de.dhbwstuttgart.syntaxtree.statement.NewClass;
@ -226,4 +227,8 @@ public class TYPEExpr extends DefaultASTVisitor {
}
@Override
public void visit(Literal literal) {
}
}

View File

@ -1,6 +1,7 @@
package de.dhbwstuttgart.strucTypes.constraint;
import de.dhbwstuttgart.strucTypes.InferredTypes;
import de.dhbwstuttgart.strucTypes.visitor.InferTypes;
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
/**
@ -35,12 +36,15 @@ public class FieldConstraint {
}
public void inferTypes(InferredTypes inferredTypes) {
if (inferredTypes.containsKey(classType)) {
this.classType = inferredTypes.get(classType);
}
if (inferredTypes.containsKey(fieldType)) {
this.fieldType = inferredTypes.get(fieldType);
}
// if (inferredTypes.containsKey(classType)) {
// this.classType = inferredTypes.get(classType);
// }
// if (inferredTypes.containsKey(fieldType)) {
// this.fieldType = inferredTypes.get(fieldType);
// }
InferTypes inferTypes = new InferTypes(inferredTypes);
classType = classType.accept(inferTypes);
fieldType = fieldType.accept(inferTypes);
}
@Override

View File

@ -6,6 +6,7 @@ import java.util.List;
import org.antlr.v4.runtime.Token;
import de.dhbwstuttgart.strucTypes.InferredTypes;
import de.dhbwstuttgart.strucTypes.visitor.InferTypes;
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
@ -63,12 +64,15 @@ public class MethodConstraint {
}
public void inferTypes(InferredTypes inferredTypes) {
if (inferredTypes.containsKey(classType)) {
this.classType = inferredTypes.get(classType);
}
if (inferredTypes.containsKey(returnType)) {
this.returnType = inferredTypes.get(returnType);
}
// if (inferredTypes.containsKey(classType)) {
// this.classType = inferredTypes.get(classType);
// }
// if (inferredTypes.containsKey(returnType)) {
// this.returnType = inferredTypes.get(returnType);
// }
InferTypes inferTypes = new InferTypes(inferredTypes);
classType = classType.accept(inferTypes);
returnType = returnType.accept(inferTypes);
arguments.forEach(c -> c.inferTypes(inferredTypes));
}

View File

@ -2,6 +2,7 @@ package de.dhbwstuttgart.strucTypes.constraint;
import de.dhbwstuttgart.strucTypes.InferredTypes;
import de.dhbwstuttgart.strucTypes.exception.ImpossibleSubTypeException;
import de.dhbwstuttgart.strucTypes.visitor.InferTypes;
import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
@ -33,14 +34,18 @@ public class SubTypeConstraint {
}
public void inferTypes(InferredTypes inferredTypes) {
if (inferredTypes.containsKey(subtype)) {
this.subtype = inferredTypes.get(subtype);
}
if (inferredTypes.containsKey(supertype)) {
this.supertype = inferredTypes.get(supertype);
}
// if (inferredTypes.containsKey(subtype)) {
// this.subtype = inferredTypes.get(subtype);
// }
// if (inferredTypes.containsKey(supertype)) {
// this.supertype = inferredTypes.get(supertype);
// }
InferTypes inferTypes = new InferTypes(inferredTypes);
subtype = subtype.accept(inferTypes);
supertype = supertype.accept(inferTypes);
}
public boolean checkConstraintPossible() throws ImpossibleSubTypeException {
if (this.subtype instanceof RefType && this.supertype instanceof RefType) {
Class<?> subClass = this.createClass(((RefType) this.subtype).getName().toString());

View File

@ -1,17 +1,18 @@
package de.dhbwstuttgart.syntaxtree.type;
import de.dhbwstuttgart.parser.scope.JavaClassName;
import de.dhbwstuttgart.strucTypes.visitor.ASTReturnVisitor;
import de.dhbwstuttgart.syntaxtree.ASTVisitor;
import de.dhbwstuttgart.typeinference.result.ResultSetVisitor;
import org.antlr.v4.runtime.Token;
public class GenericRefType extends RefTypeOrTPHOrWildcardOrGeneric
public class GenericRefType extends RefType
{
private String name;
public GenericRefType(String name, Token offset)
{
super(offset);
super(new JavaClassName(name),offset);
this.name = name;
}

View File

@ -25,16 +25,17 @@ import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory;
import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure;
public class TestPaperExample {
public static final String rootDirectory = System.getProperty("user.dir") + "/test/strucType/javFiles/";
public static final String rootDirectory = System.getProperty("user.dir") + "/test/strucType/";
public final PrintConstraints printConstraints = new PrintConstraints();
@org.junit.Test
public void test() throws ClassNotFoundException, IOException, ImpossibleSubTypeException, InconsistentConstraintsException {
ArrayList<File> files = new ArrayList<>();
files.add(new File(rootDirectory + "testPaperExample.jav"));
trans(files);
files.clear();
files.add(new File(rootDirectory + "testMain.jav"));
// files.add(new File(rootDirectory + "testPaperExample.jav"));
// trans(files);
// files.clear();
// files.add(new File(rootDirectory + "constructed/A.java"));
files.add(new File(rootDirectory + "javFiles/testMain.jav"));
trans(files);
}
@ -82,6 +83,7 @@ public class TestPaperExample {
solvedClass.accept(syntaxtreeprinter);
System.out.println("\nRemaining Constraints:");
printConstraints.printSubTypeConstraints(solvedClass.getConstraints());
PrintInferredTypes.print(inferredTypesConstruct);
System.out.println("____________________________________________________________________________");
}

View File

@ -1,6 +1,6 @@
package strucType.constructed;
public class A<Z extends L<O<P, V>, U>, M extends U, P, N extends V, V, AD extends O<P, V>, U> {
public class A<Z extends L<AD, U>, M extends U, P, N extends V, V, AD extends O<P, V>, U> {
public A() {
}

View File

@ -5,11 +5,12 @@ import strucType.constructed.O;
public class MyInteger implements L<MyInteger, MyInteger>, O<MyInteger, MyInteger> {
public Integer i;
public MyInteger(Integer i){
this.i = i;
}
Integer i;
@Override
public MyInteger sub(MyInteger x) {