forked from JavaTX/JavaCompilerCore
Merge branch 'bigRefactoringUnifyComment' into bytecodeGenericsSecond
This commit is contained in:
commit
4b99b38b47
@ -587,9 +587,13 @@ public class TYPEStmt implements StatementVisitor{
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
RefTypeOrTPHOrWildcardOrGeneric retType = assumption.getReceiverType(resolver);
|
RefTypeOrTPHOrWildcardOrGeneric retType = assumption.getReceiverType(resolver);
|
||||||
methodConstraint.add(forMethod.name.equals("apply") ? //PL 2019-11-29: Tenaerer Operator eingefügt, weil bei Lambda-Ausdrücken keine Suntype FunN$$ existiert
|
methodConstraint.add(new Pair(forMethod.receiver.getType(), retType,
|
||||||
new Pair(forMethod.receiver.getType(), retType, PairOperator.EQUALSDOT)
|
PairOperator.EQUALSDOT));//PL 2020-03-17 SMALLERDOT in EQUALSDOT umgewandelt, weil alle geerbten Methoden in den jeweilen Klassen enthalten sind.
|
||||||
: new Pair(forMethod.receiver.getType(), retType, PairOperator.SMALLERDOT));
|
|
||||||
|
//Fuer Bytecodegenerierung PL 2020-03-09 wird derzeit nicht benutzt ANFANG
|
||||||
|
//methodConstraint.add(new Pair(forMethod.receiverType, retType,
|
||||||
|
// PairOperator.EQUALSDOT));
|
||||||
|
//Fuer Bytecodegenerierung PL 2020-03-09 wird derzeit nicht benutzt ENDE
|
||||||
|
|
||||||
methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(),
|
methodConstraint.add(new Pair(assumption.getReturnType(resolver), forMethod.getType(),
|
||||||
PairOperator.EQUALSDOT));
|
PairOperator.EQUALSDOT));
|
||||||
|
@ -655,7 +655,6 @@ public class RuleSet implements IRuleSet{
|
|||||||
else
|
else
|
||||||
t1.getTypeParams().forEach(x -> occuringTypes.push(x));
|
t1.getTypeParams().forEach(x -> occuringTypes.push(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
Queue<UnifyPair> result1 = new LinkedList<UnifyPair>(pairs);
|
Queue<UnifyPair> result1 = new LinkedList<UnifyPair>(pairs);
|
||||||
ArrayList<UnifyPair> result = new ArrayList<UnifyPair>();
|
ArrayList<UnifyPair> result = new ArrayList<UnifyPair>();
|
||||||
boolean applied = false;
|
boolean applied = false;
|
||||||
@ -669,6 +668,7 @@ public class RuleSet implements IRuleSet{
|
|||||||
&& pair.getLhsType() instanceof PlaceholderType)
|
&& pair.getLhsType() instanceof PlaceholderType)
|
||||||
lhsType = (PlaceholderType) pair.getLhsType();
|
lhsType = (PlaceholderType) pair.getLhsType();
|
||||||
rhsType = pair.getRhsType(); //PL eingefuegt 2017-09-29 statt !((rhsType = pair.getRhsType()) instanceof PlaceholderType)
|
rhsType = pair.getRhsType(); //PL eingefuegt 2017-09-29 statt !((rhsType = pair.getRhsType()) instanceof PlaceholderType)
|
||||||
|
|
||||||
if(lhsType != null
|
if(lhsType != null
|
||||||
//&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType) //PL geloescht am 2017-09-29 Begründung: auch Typvariablen muessen ersetzt werden.
|
//&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType) //PL geloescht am 2017-09-29 Begründung: auch Typvariablen muessen ersetzt werden.
|
||||||
&& typeMap.get(lhsType) > 1 // The type occurs in more pairs in the set than just the recent pair.
|
&& typeMap.get(lhsType) > 1 // The type occurs in more pairs in the set than just the recent pair.
|
||||||
|
@ -34,7 +34,7 @@ public class TypeUnify2Task extends TypeUnifyTask {
|
|||||||
System.out.println("two");
|
System.out.println("two");
|
||||||
}
|
}
|
||||||
one = true;
|
one = true;
|
||||||
Set<Set<UnifyPair>> res = unify2(setToFlatten, eq, oderConstraintsField, fc, parallel, rekTiefeField, true);
|
Set<Set<UnifyPair>> res = unify2(setToFlatten, eq, oderConstraintsField, fc, parallel, rekTiefeField);
|
||||||
/*if (isUndefinedPairSetSet(res)) {
|
/*if (isUndefinedPairSetSet(res)) {
|
||||||
return new HashSet<>(); }
|
return new HashSet<>(); }
|
||||||
else
|
else
|
||||||
|
@ -110,6 +110,9 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
|
|
||||||
protected boolean parallel;
|
protected boolean parallel;
|
||||||
|
|
||||||
|
//Gives if unify is not called from checkA
|
||||||
|
private boolean finalresult = true;
|
||||||
|
|
||||||
int rekTiefeField;
|
int rekTiefeField;
|
||||||
|
|
||||||
Integer nOfUnify = 0;
|
Integer nOfUnify = 0;
|
||||||
@ -257,7 +260,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
ArrayList<Set<Constraint<UnifyPair>>> remainingOderconstraints = oderConstraintsField.stream()
|
ArrayList<Set<Constraint<UnifyPair>>> remainingOderconstraints = oderConstraintsField.stream()
|
||||||
.filter(x -> x.size()>1)
|
.filter(x -> x.size()>1)
|
||||||
.collect(Collectors.toCollection(ArrayList::new));
|
.collect(Collectors.toCollection(ArrayList::new));
|
||||||
Set<Set<UnifyPair>> res = unify(neweq, remainingOderconstraints, fc, parallel, rekTiefeField, true);
|
Set<Set<UnifyPair>> res = unify(neweq, remainingOderconstraints, fc, parallel, rekTiefeField);
|
||||||
noOfThread--;
|
noOfThread--;
|
||||||
try {
|
try {
|
||||||
logFile.close();
|
logFile.close();
|
||||||
@ -299,7 +302,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
* @param fc The finite closure
|
* @param fc The finite closure
|
||||||
* @return The set of all principal type unifiers
|
* @return The set of all principal type unifiers
|
||||||
*/
|
*/
|
||||||
protected Set<Set<UnifyPair>> unify(final Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe, Boolean finalresult) {
|
protected Set<Set<UnifyPair>> unify(final Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe) {
|
||||||
//Set<UnifyPair> aas = eq.stream().filter(x -> x.getLhsType().getName().equals("AA") //&& x.getPairOp().equals(PairOperator.SMALLERDOT)
|
//Set<UnifyPair> aas = eq.stream().filter(x -> x.getLhsType().getName().equals("AA") //&& x.getPairOp().equals(PairOperator.SMALLERDOT)
|
||||||
// ).collect(Collectors.toCollection(HashSet::new));
|
// ).collect(Collectors.toCollection(HashSet::new));
|
||||||
//writeLog(nOfUnify.toString() + " AA: " + aas.toString());
|
//writeLog(nOfUnify.toString() + " AA: " + aas.toString());
|
||||||
@ -308,9 +311,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
//.collect(Collectors.toCollection(HashSet::new)));
|
//.collect(Collectors.toCollection(HashSet::new)));
|
||||||
/*
|
|
||||||
* Step 1: Repeated application of reduce, adapt, erase, swap
|
|
||||||
*/
|
|
||||||
synchronized (usedTasks) {
|
synchronized (usedTasks) {
|
||||||
if (this.myIsCancelled()) {
|
if (this.myIsCancelled()) {
|
||||||
return new HashSet<>();
|
return new HashSet<>();
|
||||||
@ -339,6 +340,29 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Occurs-Check durchfuehren
|
||||||
|
*/
|
||||||
|
|
||||||
|
Set<UnifyPair> ocurrPairs = eq.stream().filter(x -> {
|
||||||
|
UnifyType lhs, rhs;
|
||||||
|
return (lhs = x.getLhsType()) instanceof PlaceholderType
|
||||||
|
&& !((rhs = x.getRhsType()) instanceof PlaceholderType)
|
||||||
|
&& rhs.getTypeParams().occurs((PlaceholderType)lhs);})
|
||||||
|
.map(x -> { x.setUndefinedPair(); return x;})
|
||||||
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
|
writeLog("ocurrPairs: " + ocurrPairs);
|
||||||
|
if (ocurrPairs.size() > 0) {
|
||||||
|
Set<Set<UnifyPair>> ret = new HashSet<>();
|
||||||
|
ret.add(ocurrPairs);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 1: Repeated application of reduce, adapt, erase, swap
|
||||||
|
*/
|
||||||
Set<UnifyPair> eq0;
|
Set<UnifyPair> eq0;
|
||||||
Set<UnifyPair> eq0Prime;
|
Set<UnifyPair> eq0Prime;
|
||||||
Optional<Set<UnifyPair>> eqSubst = Optional.of(eq);
|
Optional<Set<UnifyPair>> eqSubst = Optional.of(eq);
|
||||||
@ -457,12 +481,12 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
|
|
||||||
//Aufruf von computeCartesianRecursive ANFANG
|
//Aufruf von computeCartesianRecursive ANFANG
|
||||||
//writeLog("topLevelSets: " + topLevelSets.toString());
|
//writeLog("topLevelSets: " + topLevelSets.toString());
|
||||||
return computeCartesianRecursive(new HashSet<>(), new ArrayList<>(topLevelSets), eq, oderConstraintsOutput, fc, parallel, rekTiefe, finalresult);
|
return computeCartesianRecursive(new ArrayList<>(topLevelSets), eq, oderConstraintsOutput, fc, parallel, rekTiefe);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Set<Set<UnifyPair>> unify2(Set<Set<UnifyPair>> setToFlatten, Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe, Boolean finalresult) {
|
Set<Set<UnifyPair>> unify2(Set<Set<UnifyPair>> setToFlatten, Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe) {
|
||||||
//Aufruf von computeCartesianRecursive ENDE
|
//Aufruf von computeCartesianRecursive ENDE
|
||||||
|
|
||||||
//keine Ahnung woher das kommt
|
//keine Ahnung woher das kommt
|
||||||
@ -551,12 +575,12 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(eqPrimePrime.isPresent()) {
|
else if(eqPrimePrime.isPresent()) {
|
||||||
Set<Set<UnifyPair>> unifyres = unifyres1 = unify(eqPrimePrime.get(), newOderConstraints, fc, parallel, rekTiefe, finalresult);
|
Set<Set<UnifyPair>> unifyres = unifyres1 = unify(eqPrimePrime.get(), newOderConstraints, fc, parallel, rekTiefe);
|
||||||
|
|
||||||
eqPrimePrimeSet.addAll(unifyres);
|
eqPrimePrimeSet.addAll(unifyres);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Set<Set<UnifyPair>> unifyres = unifyres2 = unify(eqPrime, newOderConstraints, fc, parallel, rekTiefe, finalresult);
|
Set<Set<UnifyPair>> unifyres = unifyres2 = unify(eqPrime, newOderConstraints, fc, parallel, rekTiefe);
|
||||||
|
|
||||||
|
|
||||||
eqPrimePrimeSet.addAll(unifyres);
|
eqPrimePrimeSet.addAll(unifyres);
|
||||||
@ -587,22 +611,36 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
Set<Set<UnifyPair>> computeCartesianRecursive(Set<Set<UnifyPair>> fstElems, ArrayList<Set<? extends Set<UnifyPair>>> topLevelSets, Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe, Boolean finalresult) {
|
* Computes the cartesian product of topLevelSets step by step.
|
||||||
//ArrayList<Set<Set<UnifyPair>>> remainingSets = new ArrayList<>(topLevelSets);
|
* @param topLevelSets List of Sets of Sets, where a cartesian product have to be built
|
||||||
|
* Ex.: [{{a =. Integer}, {a = Object}}, {{a = Vector<b>, b =. Integer}, {a = Vector<b>, b =. Object}}]
|
||||||
|
* @param eq Original set of equations which should be unified
|
||||||
|
* @param oderConstraints Remaining or-constraints
|
||||||
|
* @param fc The finite closure
|
||||||
|
* @param parallel If the algorithm should be parallelized run
|
||||||
|
* @param rekTiefe Deep of recursive calls
|
||||||
|
* @return The set of all principal type unifiers
|
||||||
|
*/
|
||||||
|
Set<Set<UnifyPair>> computeCartesianRecursive(ArrayList<Set<? extends Set<UnifyPair>>> topLevelSets, Set<UnifyPair> eq, List<Set<Constraint<UnifyPair>>> oderConstraints, IFiniteClosure fc, boolean parallel, int rekTiefe) {
|
||||||
|
|
||||||
fstElems.addAll(topLevelSets.stream()
|
//oneElems: Alle 1-elementigen Mengen, die nur ein Paar
|
||||||
|
//a <. theta, theta <. a oder a =. theta enthalten
|
||||||
|
Set<Set<UnifyPair>> oneElems = new HashSet<>();
|
||||||
|
oneElems.addAll(topLevelSets.stream()
|
||||||
.filter(x -> x.size()==1)
|
.filter(x -> x.size()==1)
|
||||||
.map(y -> y.stream().findFirst().get())
|
.map(y -> y.stream().findFirst().get())
|
||||||
.collect(Collectors.toCollection(HashSet::new)));
|
.collect(Collectors.toCollection(HashSet::new)));
|
||||||
ArrayList<Set<? extends Set<UnifyPair>>> remainingSets = topLevelSets.stream()
|
|
||||||
.filter(x -> x.size()>1)
|
//optNextSet: Eine mehrelementige Menge, wenn vorhanden
|
||||||
.collect(Collectors.toCollection(ArrayList::new));
|
Optional<Set<? extends Set<UnifyPair>>> optNextSet = topLevelSets.stream().filter(x -> x.size()>1).findAny();
|
||||||
if (remainingSets.isEmpty()) {//Alle Elemente sind 1-elementig
|
|
||||||
Set<Set<UnifyPair>> result = unify2(fstElems, eq, oderConstraints, fc, parallel, rekTiefe, finalresult);
|
if (!optNextSet.isPresent()) {//Alle Elemente sind 1-elementig
|
||||||
|
Set<Set<UnifyPair>> result = unify2(oneElems, eq, oderConstraints, fc, parallel, rekTiefe);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
Set<? extends Set<UnifyPair>> nextSet = remainingSets.remove(0);
|
|
||||||
|
Set<? extends Set<UnifyPair>> nextSet = optNextSet.get();
|
||||||
//writeLog("nextSet: " + nextSet.toString());
|
//writeLog("nextSet: " + nextSet.toString());
|
||||||
List<Set<UnifyPair>> nextSetasList =new ArrayList<>(nextSet);
|
List<Set<UnifyPair>> nextSetasList =new ArrayList<>(nextSet);
|
||||||
/*
|
/*
|
||||||
@ -617,6 +655,12 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
Set<Set<UnifyPair>> result = new HashSet<>();
|
Set<Set<UnifyPair>> result = new HashSet<>();
|
||||||
int variance = 0;
|
int variance = 0;
|
||||||
|
|
||||||
|
/* Varianzbestimmung Anfang
|
||||||
|
* Oderconstraint, wenn entweder kein Basepair oder unterschiedliche Basepairs => oderConstraint = true;
|
||||||
|
* Varianz = 1 => Argumentvariable
|
||||||
|
* Varianz = -1 => Rückgabevariable
|
||||||
|
* Varianz = 0 => unklar
|
||||||
|
* Varianz = 2 => Operatoren oderConstraints */
|
||||||
ArrayList<UnifyPair> zeroNextElem = new ArrayList<>(nextSetasList.get(0));
|
ArrayList<UnifyPair> zeroNextElem = new ArrayList<>(nextSetasList.get(0));
|
||||||
UnifyPair fstBasePair = zeroNextElem.remove(0).getBasePair();
|
UnifyPair fstBasePair = zeroNextElem.remove(0).getBasePair();
|
||||||
Boolean oderConstraint = false;
|
Boolean oderConstraint = false;
|
||||||
@ -639,16 +683,15 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//variance = 2;
|
|
||||||
oderConstraint = true;
|
oderConstraint = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//variance = 2;
|
|
||||||
oderConstraint = true;
|
oderConstraint = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oderConstraint) {//Varianz-Bestimmung Oder-Constraints
|
//Varianz-Bestimmung Oder-Constraints
|
||||||
|
if (oderConstraint) {
|
||||||
if (printtag) System.out.println("nextSetasList " + nextSetasList);
|
if (printtag) System.out.println("nextSetasList " + nextSetasList);
|
||||||
Optional<Integer> optVariance =
|
Optional<Integer> optVariance =
|
||||||
nextSetasList.iterator()
|
nextSetasList.iterator()
|
||||||
@ -661,23 +704,22 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
((PlaceholderType)x.getGroundBasePair().getLhsType()).getVariance())
|
((PlaceholderType)x.getGroundBasePair().getLhsType()).getVariance())
|
||||||
.findAny();
|
.findAny();
|
||||||
//Fuer Operatorenaufrufe wird variance auf 2 gesetzt.
|
//Fuer Operatorenaufrufe wird variance auf 2 gesetzt.
|
||||||
//da kein Receiver existiert also keon x.getGroundBasePair().getLhsType() instanceof PlaceholderType
|
//da kein Receiver existiert also kein x.getGroundBasePair().getLhsType() instanceof PlaceholderType
|
||||||
//Es werden alle Elemente des Kartesischen Produkts abgearbeitet
|
//Bei Varianz = 2 werden alle Elemente des Kartesischen Produkts abgearbeitet
|
||||||
variance = optVariance.isPresent() ? optVariance.get() : 2;
|
variance = optVariance.isPresent() ? optVariance.get() : 2;
|
||||||
}
|
}
|
||||||
|
/* Varianzbestimmung Ende */
|
||||||
|
|
||||||
if (!nextSetasList.iterator().hasNext())
|
|
||||||
System.out.print("");
|
|
||||||
if (nextSetasList.iterator().next().stream().filter(x -> x.getLhsType().getName().equals("D")).findFirst().isPresent() && nextSetasList.size()>1)
|
|
||||||
System.out.print("");
|
|
||||||
//writeLog("nextSetasList: " + nextSetasList.toString());
|
//writeLog("nextSetasList: " + nextSetasList.toString());
|
||||||
Set<UnifyPair> nextSetElem = nextSetasList.get(0);
|
Set<UnifyPair> nextSetElem = nextSetasList.get(0);
|
||||||
//writeLog("BasePair1: " + nextSetElem + " " + nextSetElem.iterator().next().getBasePair());
|
//writeLog("BasePair1: " + nextSetElem + " " + nextSetElem.iterator().next().getBasePair());
|
||||||
|
|
||||||
/* sameEqSet-Bestimmung: Wenn a = ty \in nextSet dann enthaelt sameEqSet alle Paare a < ty1 oder ty2 < a aus fstElems */
|
/* sameEqSet-Bestimmung: Wenn a = ty \in nextSet dann enthaelt sameEqSet
|
||||||
|
* alle Paare a < ty1 oder ty2 < a aus oneElems */
|
||||||
Set<UnifyPair> sameEqSet = new HashSet<>();
|
Set<UnifyPair> sameEqSet = new HashSet<>();
|
||||||
|
|
||||||
|
//optOrigPair enthaelt ggf. das Paar a = ty \in nextSet
|
||||||
Optional<UnifyPair> optOrigPair = null;
|
Optional<UnifyPair> optOrigPair = null;
|
||||||
//if (variance != 2) {
|
|
||||||
if (!oderConstraint) {
|
if (!oderConstraint) {
|
||||||
optOrigPair = nextSetElem.stream().filter(x -> (
|
optOrigPair = nextSetElem.stream().filter(x -> (
|
||||||
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
||||||
@ -701,7 +743,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
tyVar = origPair.getRhsType();
|
tyVar = origPair.getRhsType();
|
||||||
}
|
}
|
||||||
UnifyType tyVarEF = tyVar;
|
UnifyType tyVarEF = tyVar;
|
||||||
sameEqSet = fstElems.stream().map(xx -> xx.iterator().next())
|
sameEqSet = oneElems.stream().map(xx -> xx.iterator().next())
|
||||||
.filter(x -> (((x.getLhsType().equals(tyVarEF) && !(x.getRhsType() instanceof PlaceholderType))
|
.filter(x -> (((x.getLhsType().equals(tyVarEF) && !(x.getRhsType() instanceof PlaceholderType))
|
||||||
|| (x.getRhsType().equals(tyVarEF) && !(x.getLhsType() instanceof PlaceholderType)))))
|
|| (x.getRhsType().equals(tyVarEF) && !(x.getLhsType() instanceof PlaceholderType)))))
|
||||||
.collect(Collectors.toCollection(HashSet::new));
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
@ -710,14 +752,21 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
/* sameEqSet-Bestimmung Ende */
|
/* sameEqSet-Bestimmung Ende */
|
||||||
|
|
||||||
Set<UnifyPair> a = null;
|
Set<UnifyPair> a = null;
|
||||||
while (nextSetasList.size() > 0) { //(nextSetasList.size() != 0) {
|
while (nextSetasList.size() > 0) {
|
||||||
Set<UnifyPair> a_last = a;
|
Set<UnifyPair> a_last = a;
|
||||||
|
|
||||||
//Liste der Faelle für die parallele Verarbeitung
|
/* Liste der Faelle für die parallele Verarbeitung
|
||||||
|
* Enthaelt Elemente, die nicht in Relation zu aktuellem Fall in der
|
||||||
|
* Variablen a stehen. Diese muesse auf alle Faelle bearbeitet werden,
|
||||||
|
* Deshalb wird ihre Berechnung parallel angestossen.
|
||||||
|
*/
|
||||||
List<Set<UnifyPair>> nextSetasListRest = new ArrayList<>();
|
List<Set<UnifyPair>> nextSetasListRest = new ArrayList<>();
|
||||||
|
|
||||||
//Liste der Faelle, bei dem Receiver jeweils "? extends" enthaelt bzw. nicht enthaelt
|
/* Liste der Faelle, bei dem Receiver jeweils "? extends" enthaelt bzw. nicht enthaelt
|
||||||
//In der Regel ein Element
|
* In der Regel ist dies genau ein Element
|
||||||
|
* Dieses Element wird später aus nextSetasList geloescht, wenn das jeweils andere Element zum Erfolg
|
||||||
|
* gefuehrt hat.
|
||||||
|
*/
|
||||||
List<Set<UnifyPair>> nextSetasListOderConstraints = new ArrayList<>();
|
List<Set<UnifyPair>> nextSetasListOderConstraints = new ArrayList<>();
|
||||||
|
|
||||||
writeLog("nextSet: " + nextSet.toString());
|
writeLog("nextSet: " + nextSet.toString());
|
||||||
@ -740,6 +789,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Alle maximale Elemente in nextSetasListRest bestimmen
|
//Alle maximale Elemente in nextSetasListRest bestimmen
|
||||||
|
//nur für diese wird parallele Berechnung angestossen.
|
||||||
nextSetasListRest = oup.maxElements(nextSetasListRest);
|
nextSetasListRest = oup.maxElements(nextSetasListRest);
|
||||||
}
|
}
|
||||||
else if (variance == -1) {
|
else if (variance == -1) {
|
||||||
@ -760,10 +810,13 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Alle minimalen Elemente in nextSetasListRest bestimmen
|
//Alle minimalen Elemente in nextSetasListRest bestimmen
|
||||||
|
//nur für diese wird parallele Berechnung angestossen.
|
||||||
nextSetasListRest = oup.minElements(nextSetasListRest);
|
nextSetasListRest = oup.minElements(nextSetasListRest);
|
||||||
}
|
}
|
||||||
else if (variance == 2) {
|
else if (variance == 2) {
|
||||||
a = nextSetasList.remove(0);
|
a = nextSetasList.remove(0);
|
||||||
|
|
||||||
|
//Fuer alle Elemente wird parallele Berechnung angestossen.
|
||||||
nextSetasListRest = new ArrayList<>(nextSetasList);
|
nextSetasListRest = new ArrayList<>(nextSetasList);
|
||||||
}
|
}
|
||||||
else if (variance == 0) {
|
else if (variance == 0) {
|
||||||
@ -789,54 +842,32 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//writeLog("nextSet: " + nextSetasList.toString()+ "\n");
|
|
||||||
//nextSetasList.remove(a);
|
|
||||||
|
|
||||||
//PL 2018-03-01
|
|
||||||
//TODO: 1. Maximum und Minimum unterscheiden
|
|
||||||
//TODO: 2. compare noch für alle Elmemente die nicht X =. ty sind erweitern
|
|
||||||
//for(Set<UnifyPair> a : newSet) {
|
|
||||||
i++;
|
i++;
|
||||||
Set<Set<UnifyPair>> elems = new HashSet<Set<UnifyPair>>(fstElems);
|
Set<Set<UnifyPair>> elems = new HashSet<Set<UnifyPair>>(oneElems);
|
||||||
writeLog("a1: " + rekTiefe + " "+ "variance: "+ variance + " " + a.toString()+ "\n");
|
writeLog("a1: " + rekTiefe + " "+ "variance: "+ variance + " " + a.toString()+ "\n");
|
||||||
//elems.add(a); PL 2019-01-20 Muss weg, weil das in jeweiligen Thread erfolgen muss. Fuer den sequentiellen Fall
|
|
||||||
//im else-Zweig
|
//Ergebnisvariable für den aktuelle Thread
|
||||||
//if (remainingSets.isEmpty()) {//muss immer gegeben sein, weil nur 1 Element der topLevelSets mehr als ein Elemet enthaelt
|
|
||||||
//writeLog("Vor unify2 Aufruf: " + elems.toString());
|
|
||||||
Set<Set<UnifyPair>> res = new HashSet<>();
|
Set<Set<UnifyPair>> res = new HashSet<>();
|
||||||
|
|
||||||
|
//Menge der Ergebnisse der geforkten Threads
|
||||||
Set<Set<Set<UnifyPair>>> add_res = new HashSet<>();
|
Set<Set<Set<UnifyPair>>> add_res = new HashSet<>();
|
||||||
|
|
||||||
|
|
||||||
Set<Set<UnifyPair>> aParDef = new HashSet<>();
|
Set<Set<UnifyPair>> aParDef = new HashSet<>();
|
||||||
|
|
||||||
/* PL 2019-03-11 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
/* Wenn bei (a \in theta) \in a zu Widerspruch in oneElems wird
|
||||||
if (!oderConstraint && !sameEqSet.isEmpty()) {
|
* a verworfen und zu nächstem Element von nextSetasList gegangen
|
||||||
Optional<UnifyPair> optAPair = a.stream().filter(x -> (
|
*/
|
||||||
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
if (!oderConstraint && !sameEqSet.isEmpty() && !checkNoContradiction(a, sameEqSet, result)) {
|
||||||
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
a = null;
|
||||||
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
noShortendElements++;
|
||||||
/*
|
continue;
|
||||||
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
*/
|
|
||||||
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
|
||||||
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
|
||||||
x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
).findFirst();
|
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
|
||||||
UnifyPair aPair = optAPair.get();
|
|
||||||
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
|
||||||
writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet);
|
|
||||||
if (!checkA(aPair, sameEqSet, elems, result)) {
|
|
||||||
a = null;
|
|
||||||
noShortendElements++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* PL 2019-03-11 Ende eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
|
||||||
|
|
||||||
|
/* Wenn parallel gearbeitet wird, wird je nach Varianz ein neuer Thread
|
||||||
|
* gestartet, der parallel weiterarbeitet.
|
||||||
|
*/
|
||||||
if(parallel && (variance == 1) && noOfThread <= MaxNoOfThreads) {
|
if(parallel && (variance == 1) && noOfThread <= MaxNoOfThreads) {
|
||||||
Set<TypeUnify2Task> forks = new HashSet<>();
|
Set<TypeUnify2Task> forks = new HashSet<>();
|
||||||
Set<UnifyPair> newEqOrig = new HashSet<>(eq);
|
Set<UnifyPair> newEqOrig = new HashSet<>(eq);
|
||||||
@ -865,35 +896,14 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
writeLog("1 RM" + nSaL.toString());
|
writeLog("1 RM" + nSaL.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
if (!oderConstraint) {
|
||||||
if (!oderConstraint) {//weiss nicht ob das wirklich stimmt
|
//ueberpruefung ob zu a =. ty \in nSaL in sameEqSet ein Widerspruch besteht
|
||||||
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (
|
if (!sameEqSet.isEmpty() && !checkNoContradiction(nSaL, sameEqSet, result)) {
|
||||||
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
nSaL = null;
|
||||||
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
noShortendElements++;
|
||||||
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
continue;
|
||||||
/*
|
|
||||||
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
*/
|
|
||||||
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
|
||||||
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
|
||||||
x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
).findFirst();
|
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
|
||||||
UnifyPair aPair = optAPair.get();
|
|
||||||
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
|
||||||
writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet);
|
|
||||||
if (!sameEqSet.isEmpty() && !checkA(aPair, sameEqSet, elems, result)) {
|
|
||||||
nSaL = null;
|
|
||||||
noShortendElements++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* PL 2019-03-13 Ende eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
|
||||||
else {
|
else {
|
||||||
nextSetasListOderConstraints.add(((Constraint<UnifyPair>)nSaL).getExtendConstraint());
|
nextSetasListOderConstraints.add(((Constraint<UnifyPair>)nSaL).getExtendConstraint());
|
||||||
}
|
}
|
||||||
@ -985,35 +995,14 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
writeLog("-1 RM" + nSaL.toString());
|
writeLog("-1 RM" + nSaL.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!oderConstraint) {//weiss nicht ob das wirklich stimmt
|
if (!oderConstraint) {
|
||||||
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
//ueberpruefung ob zu a =. ty \in nSaL in sameEqSet ein Widerspruch besteht
|
||||||
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (
|
if (!sameEqSet.isEmpty() && !checkNoContradiction(nSaL, sameEqSet, result)) {
|
||||||
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
nSaL = null;
|
||||||
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
noShortendElements++;
|
||||||
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
continue;
|
||||||
/*
|
|
||||||
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
*/
|
|
||||||
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
|
||||||
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
|
||||||
x.getLhsType().equals(x.getBasePair().getRhsType())
|
|
||||||
).findFirst();
|
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
|
||||||
UnifyPair aPair = optAPair.get();
|
|
||||||
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
|
||||||
writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet);
|
|
||||||
if (!sameEqSet.isEmpty() && !checkA(aPair, sameEqSet, elems, result)) {
|
|
||||||
nSaL = null;
|
|
||||||
noShortendElements++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* PL 2019-03-13 Ende eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
|
||||||
else {
|
else {
|
||||||
nextSetasListOderConstraints.add(((Constraint<UnifyPair>)nSaL).getExtendConstraint());
|
nextSetasListOderConstraints.add(((Constraint<UnifyPair>)nSaL).getExtendConstraint());
|
||||||
}
|
}
|
||||||
@ -1156,11 +1145,12 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
//noOfThread++;
|
//noOfThread++;
|
||||||
} else {
|
} else {//parallel = false oder MaxNoOfThreads ist erreicht, sequentiell weiterarbeiten
|
||||||
//parallel = false; //Wenn MaxNoOfThreads erreicht ist, sequentiell weiterarbeiten
|
|
||||||
elems.add(a); //PL 2019-01-16 muss das wirklich hin steht schon in Zeile 859 ja braucht man siehe Zeile 859
|
elems.add(a); //PL 2019-01-16 muss das wirklich hin steht schon in Zeile 859 ja braucht man siehe Zeile 859
|
||||||
res = unify2(elems, eq, oderConstraints, fc, parallel, rekTiefe, finalresult);
|
res = unify2(elems, eq, oderConstraints, fc, parallel, rekTiefe);
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
|
//Ab hier alle parallele Berechnungen wieder zusammengeführt.
|
||||||
if (!isUndefinedPairSetSet(res) && isUndefinedPairSetSet(result)) {
|
if (!isUndefinedPairSetSet(res) && isUndefinedPairSetSet(result)) {
|
||||||
//wenn korrektes Ergebnis gefunden alle Fehlerfaelle loeschen
|
//wenn korrektes Ergebnis gefunden alle Fehlerfaelle loeschen
|
||||||
result = res;
|
result = res;
|
||||||
@ -1247,7 +1237,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//alle Fehlerfaelle und alle korrekten Ergebnis jeweils adden
|
//alle Fehlerfaelle und alle korrekten Ergebnis jeweils adden
|
||||||
writeLog("RES Fst: reuslt: " + result.toString() + " res: " + res.toString());
|
writeLog("RES Fst: result: " + result.toString() + " res: " + res.toString());
|
||||||
result.addAll(res);
|
result.addAll(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1259,10 +1249,6 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
//}
|
|
||||||
//else {//duerfte gar nicht mehr vorkommen PL 2018-04-03
|
|
||||||
//result.addAll(computeCartesianRecursive(elems, remainingSets, eq, fc, parallel));
|
|
||||||
//}
|
|
||||||
if (parallel) {
|
if (parallel) {
|
||||||
for (Set<Set<UnifyPair>> par_res : add_res) {
|
for (Set<Set<UnifyPair>> par_res : add_res) {
|
||||||
if (!isUndefinedPairSetSet(par_res) && isUndefinedPairSetSet(result)) {
|
if (!isUndefinedPairSetSet(par_res) && isUndefinedPairSetSet(result)) {
|
||||||
@ -1499,7 +1485,29 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Boolean checkA (UnifyPair aPair, Set<UnifyPair> sameEqSet, Set<Set<UnifyPair>> elems, Set<Set<UnifyPair>> result) {
|
/**
|
||||||
|
* checks if there is for (a = ty) \in a in sameEqSet a constradiction
|
||||||
|
* @param a Set of actual element of constraints with a =. ty \in a
|
||||||
|
* @param sameEqSet Set of constraints where a <. ty' and ty' <. a
|
||||||
|
* @param result set of results which contains correct solution s and the
|
||||||
|
* the error constraints. Error constraints are added
|
||||||
|
* @result contradiction of (a = ty) in sameEqSet
|
||||||
|
*/
|
||||||
|
protected Boolean checkNoContradiction(Set<UnifyPair> a, Set<UnifyPair> sameEqSet, Set<Set<UnifyPair>> result) {
|
||||||
|
|
||||||
|
//optAPair enthaelt ggf. das Paar a = ty' \in a
|
||||||
|
//unterscheidet sich von optOrigPair, da dort a = ty
|
||||||
|
Optional<UnifyPair> optAPair =
|
||||||
|
a.stream().filter(x -> (x.getPairOp().equals(PairOperator.EQUALSDOT)))
|
||||||
|
.filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
||||||
|
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
||||||
|
x.getLhsType().equals(x.getBasePair().getRhsType()))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
||||||
|
UnifyPair aPair = optAPair.get();
|
||||||
|
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
||||||
|
|
||||||
writeLog("checkA: " + aPair + "sameEqSet: " + sameEqSet);
|
writeLog("checkA: " + aPair + "sameEqSet: " + sameEqSet);
|
||||||
for (UnifyPair sameEq : sameEqSet) {
|
for (UnifyPair sameEq : sameEqSet) {
|
||||||
if (sameEq.getLhsType() instanceof PlaceholderType) {
|
if (sameEq.getLhsType() instanceof PlaceholderType) {
|
||||||
@ -1509,12 +1517,14 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
unitedSubst.addAll(sameEq.getAllSubstitutions());
|
unitedSubst.addAll(sameEq.getAllSubstitutions());
|
||||||
unitedSubst.addAll(sameEq.getAllBases());
|
unitedSubst.addAll(sameEq.getAllBases());
|
||||||
localEq.add(new UnifyPair(aPair.getRhsType(), sameEq.getRhsType(), sameEq.getPairOp(), unitedSubst, null));
|
localEq.add(new UnifyPair(aPair.getRhsType(), sameEq.getRhsType(), sameEq.getPairOp(), unitedSubst, null));
|
||||||
Set<Set<UnifyPair>> localRes = unify(localEq, new ArrayList<>(), fc, false, 0, false);
|
finalresult = false;
|
||||||
|
Set<Set<UnifyPair>> localRes = unify(localEq, new ArrayList<>(), fc, false, 0);
|
||||||
|
finalresult = true;
|
||||||
if (isUndefinedPairSetSet(localRes)) {
|
if (isUndefinedPairSetSet(localRes)) {
|
||||||
if (result.isEmpty() || isUndefinedPairSetSet(result)) {
|
if (result.isEmpty() || isUndefinedPairSetSet(result)) {
|
||||||
result.addAll(localRes);
|
result.addAll(localRes);
|
||||||
}
|
}
|
||||||
//writeLog("FALSE: " + aPair + "sameEqSet: " + sameEqSet);
|
writeLog("FALSE: " + aPair + "sameEqSet: " + sameEqSet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1525,20 +1535,25 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
unitedSubst.addAll(sameEq.getAllSubstitutions());
|
unitedSubst.addAll(sameEq.getAllSubstitutions());
|
||||||
unitedSubst.addAll(sameEq.getAllBases());
|
unitedSubst.addAll(sameEq.getAllBases());
|
||||||
localEq.add(new UnifyPair(sameEq.getLhsType(), aPair.getRhsType(), sameEq.getPairOp(), unitedSubst, null));
|
localEq.add(new UnifyPair(sameEq.getLhsType(), aPair.getRhsType(), sameEq.getPairOp(), unitedSubst, null));
|
||||||
Set<Set<UnifyPair>> localRes = unify(localEq, new ArrayList<>(), fc, false, 0, false);
|
finalresult = false;
|
||||||
|
Set<Set<UnifyPair>> localRes = unify(localEq, new ArrayList<>(), fc, false, 0);
|
||||||
|
finalresult = true;
|
||||||
if (isUndefinedPairSetSet(localRes)) {
|
if (isUndefinedPairSetSet(localRes)) {
|
||||||
if (result.isEmpty() || isUndefinedPairSetSet(result)) {
|
if (result.isEmpty() || isUndefinedPairSetSet(result)) {
|
||||||
result.addAll(localRes);
|
result.addAll(localRes);
|
||||||
}
|
}
|
||||||
//writeLog("FALSE: " + aPair + "sameEqSet: " + sameEqSet);
|
writeLog("FALSE: " + aPair + "sameEqSet: " + sameEqSet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//writeLog("TRUE: " + aPair + "sameEqSet: " + sameEqSet);
|
writeLog("TRUE: " + aPair + "sameEqSet: " + sameEqSet);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected boolean couldBecorrect(Set<Pair<Set<UnifyPair>, UnifyPair>> reducedUndefResSubstGroundedBasePair, Set<UnifyPair> nextElem) {
|
protected boolean couldBecorrect(Set<Pair<Set<UnifyPair>, UnifyPair>> reducedUndefResSubstGroundedBasePair, Set<UnifyPair> nextElem) {
|
||||||
return reducedUndefResSubstGroundedBasePair.stream()
|
return reducedUndefResSubstGroundedBasePair.stream()
|
||||||
.map(pair -> {
|
.map(pair -> {
|
||||||
@ -2505,7 +2520,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
|
|
||||||
void writeLog(String str) {
|
void writeLog(String str) {
|
||||||
synchronized ( this ) {
|
synchronized ( this ) {
|
||||||
if (log) {
|
if (log && finalresult) {
|
||||||
try {
|
try {
|
||||||
logFile.write("Thread no.:" + thNo + "\n");
|
logFile.write("Thread no.:" + thNo + "\n");
|
||||||
logFile.write("noOfThread:" + noOfThread + "\n");
|
logFile.write("noOfThread:" + noOfThread + "\n");
|
||||||
|
@ -40,7 +40,8 @@ public class AllgemeinTest {
|
|||||||
//String className = "FCTest3";
|
//String className = "FCTest3";
|
||||||
//String className = "Var";
|
//String className = "Var";
|
||||||
//String className = "Put";
|
//String className = "Put";
|
||||||
String className = "Twice";
|
//String className = "Twice";
|
||||||
|
String className = "TestSubTypless";
|
||||||
//PL 2019-10-24: genutzt fuer unterschiedliche Tests
|
//PL 2019-10-24: genutzt fuer unterschiedliche Tests
|
||||||
path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/" + className + ".jav";
|
path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/" + className + ".jav";
|
||||||
//path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav";
|
//path = System.getProperty("user.dir")+"/src/test/resources/AllgemeinTest/Overloading_Generics.jav";
|
||||||
|
Loading…
Reference in New Issue
Block a user