JavaPatternMatching/src/de/dhbwstuttgart/syntaxtree/Field.java

129 lines
3.3 KiB
Java
Raw Normal View History

2014-09-02 08:33:54 +00:00
package de.dhbwstuttgart.syntaxtree;
2014-02-11 01:47:39 +00:00
2016-07-21 14:36:33 +00:00
import org.apache.bcel.generic.ClassGen;
2014-02-11 01:47:39 +00:00
import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.bytecode.ClassGenerator;
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
import de.dhbwstuttgart.typeinference.GenericTypeInsertable;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeInsertable;
import de.dhbwstuttgart.typeinference.Typeable;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
2014-02-11 01:47:39 +00:00
public abstract class Field extends GTVDeclarationContext implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{
2014-02-12 01:12:12 +00:00
private String name;
protected Type typ;
2014-02-12 01:12:12 +00:00
private GenericDeclarationList genericParameters;
2014-02-11 01:47:39 +00:00
public Field(int offset){
2016-09-16 11:25:20 +00:00
super(offset);
}
@Override
public void setOffset(int offset){
this.offset = offset;
}
@Override
public int getOffset(){
return this.offset;
}
2014-02-11 01:47:39 +00:00
@Override
public Type getType() {
2014-02-11 01:47:39 +00:00
return typ;
}
2014-07-16 08:33:34 +00:00
@Override
public Menge<GenericTypeVar> getGenericParameter() {
Menge<GenericTypeVar> ret = new Menge<>();
2014-07-16 16:38:55 +00:00
if(this.genericParameters == null)return ret;
2016-09-16 11:25:20 +00:00
ret.addAll(this.genericParameters.getGTVList());
2014-07-16 16:38:55 +00:00
return ret;
2014-07-16 08:33:34 +00:00
}
2014-02-11 01:47:39 +00:00
GenericDeclarationList getGenericDeclarationList(){
return this.genericParameters;
}
2014-02-11 01:47:39 +00:00
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
/**
* Diese Methode generiert die Assumptions ¼r dieses Feld der Klasse classmember
2014-02-11 01:47:39 +00:00
* @param classmember
* @return
*/
public abstract TypeAssumptions createTypeAssumptions(Class classmember);
2014-02-12 01:12:12 +00:00
public abstract ConstraintsSet TYPE(TypeAssumptions publicAssumptions);
2014-02-19 04:20:54 +00:00
public String getIdentifier() {
return name;
2014-02-19 04:20:54 +00:00
}
@Override
public String getDescription(){
return this.getIdentifier();
}
@Override
public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph,
ResultSet resultSet) {
return new TypeInsertPoint(this, this, resultSet.getTypeEqualTo(tph), resultSet);
}
public boolean isPublic() {
//TODO: momentan ist jedes Feld public!
return true;
}
@Override
public String getGenericVarDeclarationString(String genericVarDeclaration) {
if(this.genericParameters != null){
return ", "+genericVarDeclaration;
}else{
return "<"+genericVarDeclaration+">";
}
}
@Override
public int getGenericVarDeclarationOffset(){
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
if(this.genericParameters != null){
return this.genericParameters.getEndOffset();
}else{
return this.offset;
}
}
2014-09-09 09:15:10 +00:00
@Override
public Menge<SyntaxTreeNode> getChildren() {
Menge<SyntaxTreeNode> ret = new Menge<>();
2014-09-09 09:15:10 +00:00
if(this.getType()!=null)ret.add(this.getType());
2014-09-10 21:32:36 +00:00
ret.addAll(this.getGenericParameter());
2014-09-09 09:15:10 +00:00
return ret;
}
@Override
public void setGenericParameter(GenericDeclarationList params) {
this.genericParameters = params;
}
@Override
public boolean isClass() {
return false;
}
2014-02-11 01:47:39 +00:00
}
2015-06-16 09:55:15 +00:00