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
|
|
|
|
2015-05-27 13:57:15 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.Menge;
|
2015-09-02 15:11:32 +00:00
|
|
|
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;
|
2016-03-30 08:09:17 +00:00
|
|
|
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
|
|
|
|
2015-02-24 16:06:14 +00:00
|
|
|
public abstract class Field extends GTVDeclarationContext implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{
|
2014-02-12 01:12:12 +00:00
|
|
|
|
2016-09-09 22:40:17 +00:00
|
|
|
private String name;
|
|
|
|
protected Type typ;
|
2014-02-12 01:12:12 +00:00
|
|
|
|
2014-06-25 15:30:31 +00:00
|
|
|
|
|
|
|
private GenericDeclarationList genericParameters;
|
2014-02-11 01:47:39 +00:00
|
|
|
|
2014-03-09 11:10:03 +00:00
|
|
|
public Field(int offset){
|
2016-09-16 11:25:20 +00:00
|
|
|
super(offset);
|
2014-03-09 11:10:03 +00:00
|
|
|
}
|
|
|
|
|
2014-02-12 21:10:33 +00:00
|
|
|
@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
|
2014-02-11 15:30:38 +00:00
|
|
|
public Type getType() {
|
2014-02-11 01:47:39 +00:00
|
|
|
return typ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-07-16 08:33:34 +00:00
|
|
|
@Override
|
2015-04-22 19:40:22 +00:00
|
|
|
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
|
|
|
|
2015-02-25 15:34:29 +00:00
|
|
|
GenericDeclarationList getGenericDeclarationList(){
|
|
|
|
return this.genericParameters;
|
|
|
|
}
|
2014-02-11 01:47:39 +00:00
|
|
|
|
|
|
|
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
|
|
|
|
|
|
|
|
/**
|
2015-05-12 17:49:27 +00:00
|
|
|
* Diese Methode generiert die Assumptions fü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
|
|
|
|
2014-02-12 21:10:33 +00:00
|
|
|
public abstract ConstraintsSet TYPE(TypeAssumptions publicAssumptions);
|
2014-02-19 04:20:54 +00:00
|
|
|
|
|
|
|
public String getIdentifier() {
|
2016-09-09 22:40:17 +00:00
|
|
|
return name;
|
2014-02-19 04:20:54 +00:00
|
|
|
}
|
2014-03-12 14:27:26 +00:00
|
|
|
|
|
|
|
@Override
|
2016-04-07 12:53:29 +00:00
|
|
|
public String getDescription(){
|
2014-03-12 14:27:26 +00:00
|
|
|
return this.getIdentifier();
|
|
|
|
}
|
2014-03-25 03:41:07 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph,
|
|
|
|
ResultSet resultSet) {
|
2014-07-23 15:24:08 +00:00
|
|
|
return new TypeInsertPoint(this, this, resultSet.getTypeEqualTo(tph), resultSet);
|
2014-03-25 03:41:07 +00:00
|
|
|
}
|
|
|
|
|
2014-04-14 16:05:24 +00:00
|
|
|
public boolean isPublic() {
|
|
|
|
//TODO: momentan ist jedes Feld public!
|
|
|
|
return true;
|
|
|
|
}
|
2014-05-07 06:10:55 +00:00
|
|
|
|
2014-07-16 12:35:12 +00:00
|
|
|
@Override
|
|
|
|
public String getGenericVarDeclarationString(String genericVarDeclaration) {
|
|
|
|
if(this.genericParameters != null){
|
|
|
|
return ", "+genericVarDeclaration;
|
|
|
|
}else{
|
|
|
|
return "<"+genericVarDeclaration+">";
|
|
|
|
}
|
|
|
|
}
|
2014-05-07 06:10:55 +00:00
|
|
|
|
2014-06-25 15:30:31 +00:00
|
|
|
@Override
|
2014-07-16 12:35:12 +00:00
|
|
|
public int getGenericVarDeclarationOffset(){
|
2015-05-12 17:49:27 +00:00
|
|
|
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
|
2014-07-16 12:35:12 +00:00
|
|
|
if(this.genericParameters != null){
|
2014-07-31 13:15:33 +00:00
|
|
|
return this.genericParameters.getEndOffset();
|
2014-07-16 12:35:12 +00:00
|
|
|
}else{
|
|
|
|
return this.offset;
|
|
|
|
}
|
2014-06-25 15:30:31 +00:00
|
|
|
}
|
2014-09-09 09:15:10 +00:00
|
|
|
|
|
|
|
@Override
|
2015-04-22 19:40:22 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2014-06-25 15:30:31 +00:00
|
|
|
@Override
|
|
|
|
public void setGenericParameter(GenericDeclarationList params) {
|
|
|
|
this.genericParameters = params;
|
|
|
|
}
|
2015-02-24 16:06:14 +00:00
|
|
|
@Override
|
|
|
|
public boolean isClass() {
|
|
|
|
return false;
|
|
|
|
}
|
2015-05-27 13:57:15 +00:00
|
|
|
|
2014-02-11 01:47:39 +00:00
|
|
|
}
|
2015-06-16 09:55:15 +00:00
|
|
|
|