From 103c7e4b148692f31dfe1a3013789b40bc261a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sat, 17 Mar 2018 15:01:03 +0100 Subject: [PATCH] modified: src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java modified: src/de/dhbwstuttgart/typeinference/unify/model/ExtendsType.java modified: src/de/dhbwstuttgart/typeinference/unify/model/FunNType.java modified: src/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java modified: src/de/dhbwstuttgart/typeinference/unify/model/ReferenceType.java modified: src/de/dhbwstuttgart/typeinference/unify/model/SuperType.java modified: src/de/dhbwstuttgart/typeinference/unify/model/TypeParams.java modified: src/de/dhbwstuttgart/typeinference/unify/model/UnifyType.java visitor freshPlaceholder implements UnifyTypeVisitor --- .../dhbwstuttgart/typeinference/unify/TypeUnifyTask.java | 5 +++-- .../typeinference/unify/model/ExtendsType.java | 6 ++++++ .../dhbwstuttgart/typeinference/unify/model/FunNType.java | 6 ++++++ .../typeinference/unify/model/PlaceholderType.java | 6 ++++++ .../typeinference/unify/model/ReferenceType.java | 7 +++++++ .../typeinference/unify/model/SuperType.java | 6 ++++++ .../typeinference/unify/model/TypeParams.java | 8 ++++++++ .../typeinference/unify/model/UnifyType.java | 6 ++++++ 8 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index 554c46a2c..cae65fae6 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -750,9 +750,10 @@ public class TypeUnifyTask extends RecursiveTask>> { //if (i == 62) // System.out.println(tqp.toString()); Optional opt = stdUnify.unify(tqp.setTypeParams(newTp), thetaPrime); - if (!opt.isPresent()) tpq muesse freshtv gesetzt werden PL 2018-03-16 + if (!opt.isPresent()) { //tpq muesse freshtv gesetzt werden PL 2018-03-16 continue; - + } + Unifier unifier = opt.get(); unifier.swapPlaceholderSubstitutions(thetaPrime.getTypeParams()); Set substitutionSet = new HashSet<>(); diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/ExtendsType.java b/src/de/dhbwstuttgart/typeinference/unify/model/ExtendsType.java index 33f32e07b..510e41629 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/ExtendsType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/ExtendsType.java @@ -2,15 +2,21 @@ package de.dhbwstuttgart.typeinference.unify.model; import java.util.ArrayList; import java.util.Collection; +import java.util.Hashtable; import java.util.Set; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * An extends wildcard type "? extends T". */ public final class ExtendsType extends WildcardType { + public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht) { + return visitor.visit(this, ht); + } + /** * Creates a new extends wildcard type. * @param extendedType The extended type e.g. Integer in "? extends Integer" diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/FunNType.java b/src/de/dhbwstuttgart/typeinference/unify/model/FunNType.java index cf2c86ae5..44a4fa715 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/FunNType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/FunNType.java @@ -1,8 +1,10 @@ package de.dhbwstuttgart.typeinference.unify.model; +import java.util.Hashtable; import java.util.Set; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * A real function type in java. @@ -10,6 +12,10 @@ import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; */ public class FunNType extends UnifyType { + public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht) { + return visitor.visit(this, ht); + } + /** * Creates a FunN-Type with the specified TypeParameters. */ diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java b/src/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java index e9268d0d5..a85f356fc 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java @@ -3,10 +3,12 @@ package de.dhbwstuttgart.typeinference.unify.model; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.Hashtable; import java.util.Random; import java.util.Set; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * An unbounded placeholder type. @@ -54,6 +56,10 @@ public final class PlaceholderType extends UnifyType{ IsGenerated = isGenerated; } + public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht) { + return visitor.visit(this, ht); + } + /** * Creates a fresh placeholder type with a name that does so far not exist. * A user could later instantiate a type using the same name that is equivalent to this type. diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/ReferenceType.java b/src/de/dhbwstuttgart/typeinference/unify/model/ReferenceType.java index 02ab38a02..f10238626 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/ReferenceType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/ReferenceType.java @@ -1,8 +1,10 @@ package de.dhbwstuttgart.typeinference.unify.model; +import java.util.Hashtable; import java.util.Set; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * A reference type e.q. Integer or List. @@ -16,6 +18,11 @@ public final class ReferenceType extends UnifyType { */ private final int hashCode; + + public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht) { + return visitor.visit(this, ht); + } + public ReferenceType(String name, UnifyType... params) { super(name, new TypeParams(params)); hashCode = 31 + 17 * typeName.hashCode() + 17 * typeParams.hashCode(); diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/SuperType.java b/src/de/dhbwstuttgart/typeinference/unify/model/SuperType.java index 4f78602f5..c746bd47b 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/SuperType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/SuperType.java @@ -1,8 +1,10 @@ package de.dhbwstuttgart.typeinference.unify.model; +import java.util.Hashtable; import java.util.Set; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * A super wildcard type e.g. ? super Integer. @@ -10,6 +12,10 @@ import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; */ public final class SuperType extends WildcardType { + public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht) { + return visitor.visit(this, ht); + } + /** * Creates a new instance "? extends superedType" * @param superedType The type that is supered e.g. Integer in "? super Integer" diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/TypeParams.java b/src/de/dhbwstuttgart/typeinference/unify/model/TypeParams.java index 3d5fc278e..973a2785c 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/TypeParams.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/TypeParams.java @@ -115,6 +115,14 @@ public final class TypeParams implements Iterable{ return typeParams[i]; } + /** + * Returns the parameters of this object. + * PL 2018-03-17 + */ + public UnifyType[] get() { + return typeParams; + } + /** * Sets the the type t as the i-th parameter and returns a new object * that equals this object, except for the i-th type. diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/UnifyType.java b/src/de/dhbwstuttgart/typeinference/unify/model/UnifyType.java index 1080f03b6..66bd80a85 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/UnifyType.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/UnifyType.java @@ -2,10 +2,13 @@ package de.dhbwstuttgart.typeinference.unify.model; import java.util.ArrayList; import java.util.Collection; +import java.util.Hashtable; import java.util.List; import java.util.Set; +import de.dhbwstuttgart.syntaxtree.StatementVisitor; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; +import de.dhbwstuttgart.typeinference.unify.interfaces.UnifyTypeVisitor; /** * Represents a java type. @@ -33,6 +36,9 @@ public abstract class UnifyType { typeParams = p; } + + abstract public UnifyType accept(UnifyTypeVisitor visitor, Hashtable ht); + /** * Returns the name of the type. * @return The name e.q. List for List, Integer or ? extends Integer