From 4b44fba421f32bee5616a9fb139a7132656234c6 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Mon, 25 Sep 2017 16:49:27 +0200 Subject: [PATCH] Bugfix --- .../TypeInferenceBlockInformation.java | 2 +- .../typeinference/result/ResultSet.java | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.java index 36d7a303..68a53674 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.java @@ -24,7 +24,7 @@ public class TypeInferenceBlockInformation extends TypeInferenceInformation { this.currentClass = currentClass; } public TypeInferenceBlockInformation(TypeInferenceBlockInformation oldScope, TypeScope newScope) { - this(oldScope.getAvailableClasses(), oldScope.currentClass, oldScope.methodContext); + this(oldScope.getAvailableClasses(), oldScope.currentClass, new TypeScopeContainer(oldScope.methodContext, newScope)); } public ClassOrInterface getCurrentClass() { return currentClass; diff --git a/src/de/dhbwstuttgart/typeinference/result/ResultSet.java b/src/de/dhbwstuttgart/typeinference/result/ResultSet.java index 2199622b..c28570ae 100644 --- a/src/de/dhbwstuttgart/typeinference/result/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/result/ResultSet.java @@ -1,11 +1,13 @@ package de.dhbwstuttgart.typeinference.result; import de.dhbwstuttgart.exceptions.NotImplementedException; +import de.dhbwstuttgart.syntaxtree.ASTVisitor; import de.dhbwstuttgart.syntaxtree.AbstractASTWalker; import de.dhbwstuttgart.syntaxtree.type.*; import de.dhbwstuttgart.typeinference.constraints.Pair; import javax.xml.transform.Result; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -85,11 +87,16 @@ class Resolver implements ResultSetVisitor { otherSide.accept(related); additionalTPHs.addAll(related.relatedTPHs); }else if(resolved instanceof TypePlaceholder){ + RelatedTypeWalker related = new RelatedTypeWalker(null, result); + resolved.accept(related); Set newResultSet = new HashSet<>(result.results); newResultSet.remove(p); + additionalTPHs.add(new GenericInsertPair((TypePlaceholder)resolved, null)); ResolvedType resolvedType = new Resolver(new ResultSet(newResultSet)).resolve((TypePlaceholder) resolved); this.resolved = resolvedType.resolvedType; this.additionalTPHs.addAll(resolvedType.additionalGenerics); + resolved.accept(related); + this.additionalTPHs.addAll(related.relatedTPHs); }else { throw new NotImplementedException(); } @@ -130,8 +137,10 @@ class TPHResolver implements ResultSetVisitor { private final TypePlaceholder tph; Set resolved = new HashSet<>(); + private final ResultSet resultSet; TPHResolver(TypePlaceholder tph, ResultSet resultSet){ + this.resultSet = resultSet; this.tph = tph; for(ResultPair p : resultSet.results){ p.accept(this); @@ -150,7 +159,19 @@ class TPHResolver implements ResultSetVisitor { @Override public void visit(PairTPHequalRefType p) { - + TypePlaceholder otherSide = null; + if(p.left.equals(tph) && p.right instanceof TypePlaceholder){ + otherSide = (TypePlaceholder) p.right; + } + if(p.right.equals(tph)){ + otherSide = p.left; + } + if(otherSide != null){ + resolved.add(new GenericInsertPair(p.left, (TypePlaceholder) p.right)); + Set newResultSet = new HashSet<>(this.resultSet.results); + newResultSet.remove(p); + resolved.addAll(new TPHResolver(otherSide, new ResultSet(newResultSet)).resolved); + } } @Override