Kleine Anpassungen

This commit is contained in:
JanUlrich 2015-01-04 19:30:37 +01:00
parent 66da1d2638
commit f20b978b14
6 changed files with 41 additions and 40 deletions

3
bin/.gitignore vendored
View File

@ -1,5 +1,2 @@
/de/
/plugindevelopment/
=======
/syntaxTree/
/bytecode/

View File

@ -698,7 +698,7 @@ public class SourceFile
retValue = Unify.unify(pairs, finiteClosure);
return retValue;};
oderConstraints.filterWrongConstraints(unifier);
//oderConstraints.unifyUndConstraints(unifier);
oderConstraints.unifyUndConstraints(unifier);
typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE);
//Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden):
Vector<Vector<Pair>> xConstraints = new Vector<Vector<Pair>>();// = oderConstraints.getConstraints();

View File

@ -18,6 +18,7 @@ import de.dhbwstuttgart.syntaxtree.type.DoubleType;
import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
@ -150,9 +151,15 @@ public class LambdaExpression extends Expr{
//ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys:
ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression
//Die Typen innerhalb von FunN anpassen:
Vector<Type> superParamTypes = new Vector<>();
for(Type pT : paramTypes){
superParamTypes.add(new SuperWildcardType(pT.getOffset(), pT));
}
Type retType = method_body.getType();
ExtendsWildcardType extRetType = new ExtendsWildcardType(retType.getOffset(), retType);
ret.add(new SingleConstraint(new FunN(extRetType, paramTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this)));
ret.add(new SingleConstraint(new FunN(extRetType, superParamTypes).TYPE(assumptions, this),this.getType().TYPE(assumptions, this)));
return ret;
}

View File

@ -69,7 +69,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
{
if(obj instanceof ExtendsWildcardType)
{
return this.extendsType.equals(((ExtendsWildcardType)obj).get_ExtendsType());
return super.equals(obj);
}
else
{

View File

@ -56,22 +56,6 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
return new SuperWildcardType(getOffset(), superType.clone());
}
/**
* Author: Arne Lüdtke<br/>
* Vergleicht mit einem anderen Objekt.
* @param obj - Object to compare.
*/
public boolean equals(Object obj)
{
if(obj instanceof SuperWildcardType)
{
return this.superType.equals(((SuperWildcardType)obj).get_SuperType());
}
else
{
return false;
}
}
/**
* Author: Arne Lüdtke<br/>
@ -129,4 +113,21 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
return new JavaCodeResult("? super " + this.superType.printJavaCode(result));
}
/**
* Author: Arne Lüdtke<br/>
* Vergleicht mit einem anderen Objekt.
* @param obj - Object to compare.
*/
public boolean equals(Object obj)
{
if(obj instanceof SuperWildcardType)
{
return super.equals(obj);
}
else
{
return false;
}
}
}

View File

@ -42,24 +42,6 @@ public class WildcardType extends Type{
return new WildcardType(this.getParent(), getOffset());
}
/**
* Author: Arne Lüdtke<br/>
* Vergleicht mit einem anderen Objekt.
* @param obj - Object to compare.
*/
public boolean equals(Object obj)
{
//Luar 06-11-29 If Block erstellt, falls weitere Einschränkungen notwendig werden.
if(obj instanceof WildcardType && !(obj instanceof SuperWildcardType || obj instanceof ExtendsWildcardType))
{
return true;
}
else
{
return false;
}
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
@ -93,4 +75,18 @@ public class WildcardType extends Type{
public JavaCodeResult printJavaCode(ResultSet resultSet) {
throw new NotImplementedException();
}
public boolean equals(Object obj)
{
if(obj instanceof WildcardType)
{
return ((WildcardType)obj).GetWildcardType().equals(this.GetWildcardType());
}
else
{
return false;
}
}
}