Aufräumen

This commit is contained in:
JanUlrich 2016-03-22 13:17:56 +01:00
parent 1f825360df
commit 47c9be5488
6 changed files with 32 additions and 13 deletions

View File

@ -214,7 +214,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
private Menge<Field> fielddecl = new Menge<Field>(); private Menge<Field> fielddecl = new Menge<Field>();
private GenericDeclarationList genericClassParameters; private GenericDeclarationList genericClassParameters;
private int offset; private int offset;
private Type superClass; private RefType superClass;
// ino.method.Class.23041.definition // ino.method.Class.23041.definition
@ -240,7 +240,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
* @param modifiers * @param modifiers
* @param supertypeGenPara - Eine Liste von Namen, welche die Generischen Parameter der Klasse darstellen. * @param supertypeGenPara - Eine Liste von Namen, welche die Generischen Parameter der Klasse darstellen.
*/ */
public Class(String name, Type superClass, Modifiers modifiers, Menge<String> supertypeGenPara) { public Class(String name, RefType superClass, Modifiers modifiers, Menge<String> supertypeGenPara) {
this(name,superClass,modifiers,0); this(name,superClass,modifiers,0);
if(supertypeGenPara == null)return; if(supertypeGenPara == null)return;
Menge<GenericTypeVar> gtvs = new Menge<>(); Menge<GenericTypeVar> gtvs = new Menge<>();
@ -261,7 +261,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
this.setGenericParameter(new GenericDeclarationList(gtvs,0)); this.setGenericParameter(new GenericDeclarationList(gtvs,0));
} }
public Class(String name, Type superClass, Modifiers mod, int offset){ public Class(String name, RefType superClass, Modifiers mod, int offset){
this(name,mod,offset); this(name,mod,offset);
if(superClass == null)this.superClass = new Class("java.lang.Object",-1).getType(); if(superClass == null)this.superClass = new Class("java.lang.Object",-1).getType();
else this.superClass = superClass; else this.superClass = superClass;
@ -293,14 +293,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
public Class(String name2, Modifiers object, ClassBody classBody, public Class(String name2, Modifiers object, ClassBody classBody,
Menge<Type> containedTypes2, Menge<Type> typeMenge, Menge<Type> containedTypes2, Menge<Type> typeMenge,
Menge<Type> paraMenge, int offset2) { Menge<Type> paraMenge, int offset2) {
this(name2, object, classBody, containedTypes2,(Type)null, typeMenge, paraMenge, offset2); this(name2, object, classBody, containedTypes2,(RefType)null, typeMenge, paraMenge, offset2);
} }
private static Menge<Type> usedIdToRefType(Menge<UsedId> superif2) { private static Menge<Type> usedIdToRefType(Menge<UsedId> superif2) {
Menge<Type> ret = new Menge<>(); Menge<Type> ret = new Menge<>();
for(UsedId id : superif2)ret.add(usedIdToRefType(id)); for(UsedId id : superif2)ret.add(usedIdToRefType(id));
return ret; return ret;
} }
private static Type usedIdToRefType(UsedId superclass2) { private static RefType usedIdToRefType(UsedId superclass2) {
RefType ret = new RefType(superclass2.getSimpleName(), null, superclass2.getOffset()); RefType ret = new RefType(superclass2.getSimpleName(), null, superclass2.getOffset());
ret.set_ParaList(superclass2.get_ParaList()); ret.set_ParaList(superclass2.get_ParaList());
return ret; return ret;
@ -314,7 +314,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.end // ino.end
// ino.method.Class.23047.definition // ino.method.Class.23047.definition
public Class(String name, Modifiers mod, ClassBody cb, Menge<Type> ct, public Class(String name, Modifiers mod, ClassBody cb, Menge<Type> ct,
Type superclass, Menge<Type> Menge, Menge<? extends Type> paralist, int offset) RefType superclass, Menge<Type> Menge, Menge<? extends Type> paralist, int offset)
// ino.end // ino.end
// ino.method.Class.23047.body // ino.method.Class.23047.body
{ {
@ -671,7 +671,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
//ConstraintsSet oderConstraints = this.TYPE(this.getMethodList(), fieldInitializers, assumptions); //ConstraintsSet oderConstraints = this.TYPE(this.getMethodList(), fieldInitializers, assumptions);
this.superClass = this.superClass.TYPE(assumptions, this); //Gibt es hier eine ClassCastException stimmt etwas grundsätzlich nicht!
this.superClass = (RefType)this.superClass.TYPE(assumptions, this);
for(Field f:this.getFields()){ for(Field f:this.getFields()){
oderConstraints.add(f.TYPE(assumptions)); oderConstraints.add(f.TYPE(assumptions));
@ -1028,7 +1029,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
* Die Super Klasse dieser Klasse. * Die Super Klasse dieser Klasse.
* @return null ¼r Klasse Object * @return null ¼r Klasse Object
*/ */
public Type getSuperClass(){ public RefType getSuperClass(){
return this.superClass; return this.superClass;
} }
@Override @Override

View File

@ -20,6 +20,7 @@ import de.dhbwstuttgart.typeinference.unify.model.MPair;
import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType; import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType;
import de.dhbwstuttgart.typeinference.unify.model.SimpleType; import de.dhbwstuttgart.typeinference.unify.model.SimpleType;
import de.dhbwstuttgart.typeinference.unify.model.SuperType; import de.dhbwstuttgart.typeinference.unify.model.SuperType;
import de.dhbwstuttgart.typeinference.unify.model.TypeParams;
import de.dhbwstuttgart.typeinference.unify.model.UnifyType; import de.dhbwstuttgart.typeinference.unify.model.UnifyType;
public class UnifyTypeFactory { public class UnifyTypeFactory {
@ -28,7 +29,7 @@ public class UnifyTypeFactory {
HashSet<MPair> pairs = new HashSet<>(); HashSet<MPair> pairs = new HashSet<>();
for(ClassAssumption cAss : fromAss.getClassAssumptions()){ for(ClassAssumption cAss : fromAss.getClassAssumptions()){
UnifyType tl = UnifyTypeFactory.convert(cAss.getAssumedClass().getType()); UnifyType tl = UnifyTypeFactory.convert(cAss.getAssumedClass().getType());
Type superClass = cAss.getAssumedClass().getSuperClass(); RefType superClass = cAss.getAssumedClass().getSuperClass();
if(superClass != null){ if(superClass != null){
UnifyType tr = UnifyTypeFactory.convert(superClass); UnifyType tr = UnifyTypeFactory.convert(superClass);
pairs.add(smaller(tl, tr)); pairs.add(smaller(tl, tr));
@ -57,7 +58,7 @@ public class UnifyTypeFactory {
for(Type pT : t.getParaList()){ for(Type pT : t.getParaList()){
params.add(UnifyTypeFactory.convert(pT)); params.add(UnifyTypeFactory.convert(pT));
} }
ret = new SimpleType(t.get_Name(),params.toArray()); ret = new SimpleType(t.get_Name(),new TypeParams(params));
}else{ }else{
ret = new SimpleType(t.get_Name()); ret = new SimpleType(t.get_Name());
} }

View File

@ -17,7 +17,11 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.DebugException; import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
class Test {
void methode(ArrayList<? super Integer> t){
}
}
//TODO: Die Klasse Type muss abstract werden! //TODO: Die Klasse Type muss abstract werden!
// ino.class.Type.26716.declaration // ino.class.Type.26716.declaration

View File

@ -9,7 +9,7 @@ public final class SimpleType extends UnifyType {
super(name, new TypeParams(typeParams)); super(name, new TypeParams(typeParams));
} }
private SimpleType(String name, TypeParams params) { public SimpleType(String name, TypeParams params) {
super(name, params); super(name, params);
} }

View File

@ -3,9 +3,18 @@ package de.dhbwstuttgart.typeinference.unify.model;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import de.dhbwstuttgart.typeinference.Menge;
public final class TypeParams implements Iterable<UnifyType>{ public final class TypeParams implements Iterable<UnifyType>{
private final UnifyType[] typeParams; private final UnifyType[] typeParams;
public TypeParams(Menge<UnifyType> types){
typeParams = new UnifyType[types.size()];
for(int i=0;i<types.size();i++){
typeParams[i] = types.get(i);
}
}
public TypeParams(UnifyType... types) { public TypeParams(UnifyType... types) {
typeParams = types; typeParams = types;
} }

View File

@ -2,6 +2,8 @@ package unify;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import java.util.Set;
import org.junit.Test; import org.junit.Test;
import de.dhbwstuttgart.syntaxtree.ImportDeclarations; import de.dhbwstuttgart.syntaxtree.ImportDeclarations;
@ -12,6 +14,7 @@ import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure;
import de.dhbwstuttgart.typeinference.unify.model.UnifyType;
public class GenerateFiniteClosure { public class GenerateFiniteClosure {
@ -41,7 +44,8 @@ public class GenerateFiniteClosure {
String importClass = "java.util.Vector"; String importClass = "java.util.Vector";
TypeAssumptions ass = generateAssumptionsFromImport(importClass); TypeAssumptions ass = generateAssumptionsFromImport(importClass);
FiniteClosure fc = UnifyTypeFactory.generateFC(ass); FiniteClosure fc = UnifyTypeFactory.generateFC(ass);
System.out.println(fc); Set<UnifyType> test = fc.getAllTypes(importClass);
assertTrue(test.size()>0);
} }
} }