diff --git a/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java b/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java index efa7f55e..d14a26f5 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java @@ -287,7 +287,7 @@ public class RuleSet implements IRuleSet{ if(lhsSType.getTypeParams().empty()) return Optional.empty(); - UnifyType rhsType = pair.getLhsType(); + UnifyType rhsType = pair.getRhsType(); ReferenceType rhsSType; if(rhsType instanceof ReferenceType) diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index 178f7bc1..9cb2df6e 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -425,9 +425,9 @@ public class TypeUnifyTask extends RecursiveTask>> { protected Set> unifyCase1(PlaceholderType a, UnifyType thetaPrime, IFiniteClosure fc) { Set> result = new HashSet<>(); - boolean allGen = true; + boolean allGen = thetaPrime.getTypeParams().size() > 0; for(UnifyType t : thetaPrime.getTypeParams()) - if(t instanceof PlaceholderType && !((PlaceholderType) t).isGenerated()) { + if(!(t instanceof PlaceholderType) || !((PlaceholderType) t).isGenerated()) { allGen = false; break; } @@ -437,7 +437,7 @@ public class TypeUnifyTask extends RecursiveTask>> { for(UnifyType c : cs) { Set thetaQs = fc.getChildren(c).stream().collect(Collectors.toCollection(HashSet::new)); - thetaQs.add(thetaPrime); + //thetaQs.add(thetaPrime); Set thetaQPrimes = new HashSet<>(); TypeParams cParams = c.getTypeParams(); if(cParams.size() == 0) @@ -549,9 +549,9 @@ public class TypeUnifyTask extends RecursiveTask>> { protected Set> unifyCase5(UnifyType theta, PlaceholderType a, IFiniteClosure fc) { Set> result = new HashSet<>(); - boolean allGen = true; + boolean allGen = theta.getTypeParams().size() > 0; for(UnifyType t : theta.getTypeParams()) - if(t instanceof PlaceholderType && !((PlaceholderType) t).isGenerated()) { + if(!(t instanceof PlaceholderType) || !((PlaceholderType) t).isGenerated()) { allGen = false; break; } diff --git a/test/unify/UnifyTest.java b/test/unify/UnifyTest.java index f246bef8..2ee542f0 100644 --- a/test/unify/UnifyTest.java +++ b/test/unify/UnifyTest.java @@ -861,14 +861,15 @@ public class UnifyTest { UnifyType tphT1 = tf.getPlaceholderType("T1"); UnifyType tphT2 = tf.getPlaceholderType("T2"); - + UnifyType gtv = tf.getSimpleType("gtv"); UnifyType vector = tf.getSimpleType("Vector", gtv); UnifyType vectorT2 = tf.getSimpleType("Vector", tphT2); + UnifyType string = tf.getSimpleType("String"); UnifyType vectorString = tf.getSimpleType("Vector", string); - fcb.add(vector, vector); + fcb.add(vector, tf.getSimpleType("java.lang.Object")); IFiniteClosure fc = fcb.getFiniteClosure(); @@ -879,7 +880,7 @@ public class UnifyTest { Set> actual = new TypeUnify().unifySequential(eq, fc); System.out.println("Test OverloadingVector:"); - System.out.println(actual); + System.out.println(actual + "\n"); } @Test