generate the constraints for all tph

This commit is contained in:
Till Schnell 2021-04-06 18:38:01 +02:00
parent 26953665c9
commit b59aabeea5
3 changed files with 28 additions and 4 deletions

View File

@ -1,6 +1,7 @@
package de.dhbwstuttgart.inferWildcards;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import de.dhbwstuttgart.parser.NullToken;
@ -21,6 +22,16 @@ public final class ConstraintsGenerationUtils
throw new AssertionError("No ConstraintsGenerationUtils instance for you");
}
@SuppressWarnings("rawtypes")
public static ConstraintSet generateConstraints (Map<TypePlaceholder, RefType> tphMap) {
ConstraintSet constraintSet = new ConstraintSet<>();
tphMap.forEach( (tph, refType) -> {
ConstraintSet constraintSet2 = generateConstraints(refType, tph);
constraintSet.addAll(constraintSet2);
});
return constraintSet;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static ConstraintSet generateConstraints (RefType refType, TypePlaceholder tph) {
ConstraintSet constraintSet = new ConstraintSet<>();

View File

@ -1,6 +1,7 @@
package de.dhbwstuttgart.inferWildcards;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.dhbwstuttgart.parser.NullToken;
@ -13,7 +14,7 @@ public class ReplaceTypeparamVisitor
extends AbstractASTWalker
{
private final Map<TypePlaceholder, RefTypeOrTPHOrWildcardOrGeneric> tphMap;
private final Map<TypePlaceholder, RefType> tphMap;
public ReplaceTypeparamVisitor () {
this.tphMap = new HashMap<>();
@ -23,7 +24,10 @@ public class ReplaceTypeparamVisitor
public void visit (RefType refType) {
if (!refType.getParaList().isEmpty()) {
System.out.println("Type: " + refType);
generateTypePlaceholder(refType);
List<RefTypeOrTPHOrWildcardOrGeneric> paraList = refType.getParaList();
paraList.stream().filter(e -> e instanceof RefType).map(RefType.class::cast)
.forEach(this::generateTypePlaceholder);
}
super.visit(refType);
}
@ -34,7 +38,7 @@ public class ReplaceTypeparamVisitor
return tph;
}
public Map<TypePlaceholder, RefTypeOrTPHOrWildcardOrGeneric> getTphMap () {
public Map<TypePlaceholder, RefType> getTphMap () {
return tphMap;
}
}

View File

@ -11,8 +11,11 @@ import org.junit.Before;
import org.junit.Test;
import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.inferWildcards.ConstraintsGenerationUtils;
import de.dhbwstuttgart.inferWildcards.ReplaceTypeparamVisitor;
import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
import de.dhbwstuttgart.typeinference.constraints.Pair;
@ -39,7 +42,13 @@ public class TestInferWildcardsJavaTx
Map<File, SourceFile> sourceFiles = javaTXCompiler.getSourceFiles();
ReplaceTypeparamVisitor visitor = new ReplaceTypeparamVisitor();
sourceFiles.entrySet().forEach(e -> e.getValue().accept(visitor));
System.out.println(visitor.getTphMap());
// Generate Constraints
Map<TypePlaceholder, RefType> tphMap = visitor.getTphMap();
System.out.println(tphMap);
ConstraintSet generatedConstraints = ConstraintsGenerationUtils.generateConstraints(tphMap);
System.out.println(generatedConstraints);
// Constraints
ConstraintSet<Pair> constraints = javaTXCompiler.getConstraints();