modified: ../../src/de/dhbwstuttgart/typeinference/unify/RuleSet.java
modified: ../../src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java modified: ../../src/de/dhbwstuttgart/typeinference/unify/interfaces/IRuleSet.java modified: ../../src/de/dhbwstuttgart/typeinference/unify/model/FiniteClosure.java modified: ../../src/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java 1. Version mit compare von UnifyPairs
This commit is contained in:
parent
bb016e6417
commit
ccc16fd22b
@ -699,6 +699,8 @@ public class RuleSet implements IRuleSet{
|
|||||||
return Optional.of(new UnifyPair(((SuperType) rhsType).getSuperedType(), lhsType, PairOperator.SMALLERDOTWC));
|
return Optional.of(new UnifyPair(((SuperType) rhsType).getSuperedType(), lhsType, PairOperator.SMALLERDOTWC));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* PL 2018-03-06 auskommentiert sind mutmaßlich falsch
|
||||||
|
* vgl. JAVA_BSP/Wildcard6.java
|
||||||
@Override
|
@Override
|
||||||
public Optional<UnifyPair> reduceWildcardLowUp(UnifyPair pair) {
|
public Optional<UnifyPair> reduceWildcardLowUp(UnifyPair pair) {
|
||||||
if(pair.getPairOp() != PairOperator.SMALLERDOTWC)
|
if(pair.getPairOp() != PairOperator.SMALLERDOTWC)
|
||||||
@ -725,6 +727,7 @@ public class RuleSet implements IRuleSet{
|
|||||||
return Optional.of(new UnifyPair(((SuperType) lhsType).getSuperedType(), ((ExtendsType) rhsType).getExtendedType(), PairOperator.EQUALSDOT));
|
return Optional.of(new UnifyPair(((SuperType) lhsType).getSuperedType(), ((ExtendsType) rhsType).getExtendedType(), PairOperator.EQUALSDOT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<UnifyPair> reduceWildcardLeft(UnifyPair pair) {
|
public Optional<UnifyPair> reduceWildcardLeft(UnifyPair pair) {
|
||||||
if(pair.getPairOp() != PairOperator.SMALLERDOTWC)
|
if(pair.getPairOp() != PairOperator.SMALLERDOTWC)
|
||||||
@ -741,7 +744,7 @@ public class RuleSet implements IRuleSet{
|
|||||||
|
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Optional<Set<UnifyPair>> reduceFunN(UnifyPair pair) {
|
public Optional<Set<UnifyPair>> reduceFunN(UnifyPair pair) {
|
||||||
if((pair.getPairOp() != PairOperator.SMALLERDOT)
|
if((pair.getPairOp() != PairOperator.SMALLERDOT)
|
||||||
|
@ -403,9 +403,10 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardLowRight(pair);
|
opt = opt.isPresent() ? opt : rules.reduceWildcardLowRight(pair);
|
||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardUp(pair);
|
opt = opt.isPresent() ? opt : rules.reduceWildcardUp(pair);
|
||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardUpRight(pair);
|
opt = opt.isPresent() ? opt : rules.reduceWildcardUpRight(pair);
|
||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardLowUp(pair);
|
//PL 2018-03-06 auskommentiert muesste falsch sein vgl. JAVA_BSP/Wildcard6.java
|
||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardUpLow(pair);
|
//opt = opt.isPresent() ? opt : rules.reduceWildcardLowUp(pair);
|
||||||
opt = opt.isPresent() ? opt : rules.reduceWildcardLeft(pair);
|
//opt = opt.isPresent() ? opt : rules.reduceWildcardUpLow(pair);
|
||||||
|
//opt = opt.isPresent() ? opt : rules.reduceWildcardLeft(pair);
|
||||||
|
|
||||||
// Reduce TPH
|
// Reduce TPH
|
||||||
opt = opt.isPresent() ? opt : rules.reduceTph(pair);
|
opt = opt.isPresent() ? opt : rules.reduceTph(pair);
|
||||||
|
@ -27,9 +27,13 @@ public interface IRuleSet {
|
|||||||
public Optional<UnifyPair> reduceWildcardLowRight(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardLowRight(UnifyPair pair);
|
||||||
public Optional<UnifyPair> reduceWildcardUp(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardUp(UnifyPair pair);
|
||||||
public Optional<UnifyPair> reduceWildcardUpRight(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardUpRight(UnifyPair pair);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vgl. JAVA_BSP/Wildcard6.java
|
||||||
public Optional<UnifyPair> reduceWildcardLowUp(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardLowUp(UnifyPair pair);
|
||||||
public Optional<UnifyPair> reduceWildcardUpLow(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardUpLow(UnifyPair pair);
|
||||||
public Optional<UnifyPair> reduceWildcardLeft(UnifyPair pair);
|
public Optional<UnifyPair> reduceWildcardLeft(UnifyPair pair);
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Additional Rules which replace cases of the cartesian product
|
* Additional Rules which replace cases of the cartesian product
|
||||||
|
@ -439,6 +439,9 @@ public class FiniteClosure extends Ordering<UnifyType> implements IFiniteClosure
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int compare (UnifyType left, UnifyType right, PairOperator pairop) {
|
public int compare (UnifyType left, UnifyType right, PairOperator pairop) {
|
||||||
|
if ((left instanceof ExtendsType && right instanceof ReferenceType)
|
||||||
|
|| (right instanceof ExtendsType && left instanceof ReferenceType))
|
||||||
|
System.out.println("");
|
||||||
UnifyPair up = new UnifyPair(left, right, pairop);
|
UnifyPair up = new UnifyPair(left, right, pairop);
|
||||||
TypeUnifyTask unifyTask = new TypeUnifyTask();
|
TypeUnifyTask unifyTask = new TypeUnifyTask();
|
||||||
HashSet<UnifyPair> hs = new HashSet<>();
|
HashSet<UnifyPair> hs = new HashSet<>();
|
||||||
|
@ -114,20 +114,13 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
}
|
}
|
||||||
//Fall 1 und 4
|
//Fall 1 und 4
|
||||||
if (lefteq.size() == 1 && righteq.size() == 1 && (leftlewc.size() > 0 || rightlewc.size() > 0)) {
|
if (lefteq.size() == 1 && righteq.size() == 1 && (leftlewc.size() > 0 || rightlewc.size() > 0)) {
|
||||||
//TODO 2018-03-02: hier muessen mehree =. eingefuegt werden und alle weiteren Faelle pruefen
|
|
||||||
UnifyPair lseq = lefteq.iterator().next();
|
UnifyPair lseq = lefteq.iterator().next();
|
||||||
UnifyPair rseq = righteq.iterator().next();
|
UnifyPair rseq = righteq.iterator().next();
|
||||||
/*Set<UnifyPair> lsle = left.stream()
|
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
|
||||||
.collect(Collectors.toCollection(HashSet::new));
|
|
||||||
Set<UnifyPair> rsle = right.stream()
|
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
|
||||||
.collect(Collectors.toCollection(HashSet::new));
|
|
||||||
*/
|
|
||||||
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.getRhsType(), rseq.getRhsType());
|
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.getRhsType(), rseq.getRhsType());
|
||||||
Unifier uni = new Unifier();
|
Unifier uni = new Unifier();
|
||||||
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
||||||
if (lseq.equals(rseq) || leftlewc.size() == 0 || rightlewc.size() == 0) return int_Unifier.getKey();
|
if (!lseq.getRhsType().getName().equals(rseq.getRhsType().getName())
|
||||||
|
|| leftlewc.size() == 0 || rightlewc.size() == 0) return int_Unifier.getKey();
|
||||||
else {
|
else {
|
||||||
Set <UnifyPair> lsleuni = leftlewc.stream().map(uni::apply).collect(Collectors.toCollection(HashSet::new));
|
Set <UnifyPair> lsleuni = leftlewc.stream().map(uni::apply).collect(Collectors.toCollection(HashSet::new));
|
||||||
Set <UnifyPair> rsleuni = rightlewc.stream().map(uni::apply).collect(Collectors.toCollection(HashSet::new));
|
Set <UnifyPair> rsleuni = rightlewc.stream().map(uni::apply).collect(Collectors.toCollection(HashSet::new));
|
||||||
@ -148,7 +141,7 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
si = lslewcstr.map(x -> compare(x, hm.get(x.getRhsType()))).reduce((x,y)-> { if (x == y) return x; else return 0; } );
|
si = lslewcstr.map(x -> compare(x, hm.get(x.getRhsType()))).reduce((x,y)-> { if (x == y) return x; else return 0; } );
|
||||||
}
|
}
|
||||||
if (!si.isPresent()) return 0;
|
if (!si.isPresent()) return 0;
|
||||||
else if (si.get() == int_Unifier.getKey()) return int_Unifier.getKey(); else return 0;
|
else return si.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user