2014-09-02 08:33:54 +00:00
|
|
|
package de.dhbwstuttgart.syntaxtree;
|
2015-10-23 14:22:44 +00:00
|
|
|
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.core.IItemWithOffset;
|
2017-09-20 15:26:09 +00:00
|
|
|
import de.dhbwstuttgart.parser.scope.JavaClassName;
|
2017-03-15 15:17:07 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
2017-09-22 16:31:47 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
2017-06-28 19:10:28 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter;
|
2017-03-16 19:02:53 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
|
2017-04-18 19:06:04 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.constraints.Constraint;
|
2017-03-16 19:02:53 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
|
2017-03-08 02:43:47 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation;
|
2017-02-03 14:20:26 +00:00
|
|
|
import org.antlr.v4.runtime.Token;
|
2013-10-18 11:33:46 +00:00
|
|
|
|
2016-12-07 13:32:48 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2015-05-22 11:50:43 +00:00
|
|
|
|
2016-09-09 22:40:17 +00:00
|
|
|
/**
|
|
|
|
* Stellt jede Art von Klasse dar. Auch abstrakte Klassen und Interfaces
|
|
|
|
*/
|
2017-06-28 19:10:28 +00:00
|
|
|
public class ClassOrInterface extends SyntaxTreeNode {
|
2017-03-08 02:43:47 +00:00
|
|
|
protected int modifiers;
|
2017-01-10 22:44:19 +00:00
|
|
|
protected JavaClassName name;
|
2017-03-06 16:59:01 +00:00
|
|
|
private List<Field> fields = new ArrayList<>();
|
|
|
|
private List<Method> methods = new ArrayList<>();
|
2017-01-10 22:44:19 +00:00
|
|
|
private GenericDeclarationList genericClassParameters;
|
2017-03-16 19:02:53 +00:00
|
|
|
private RefTypeOrTPHOrWildcardOrGeneric superClass;
|
2017-01-10 22:44:19 +00:00
|
|
|
protected boolean isInterface;
|
2017-03-16 19:02:53 +00:00
|
|
|
private List<? extends RefTypeOrTPHOrWildcardOrGeneric> implementedInterfaces;
|
2017-04-18 19:06:04 +00:00
|
|
|
private List<Constructor> constructors;
|
|
|
|
|
|
|
|
public ClassOrInterface(int modifiers, JavaClassName name, List<Field> fielddecl, List<Method> methods, List<Constructor> constructors, GenericDeclarationList genericClassParameters,
|
2017-03-16 19:02:53 +00:00
|
|
|
RefTypeOrTPHOrWildcardOrGeneric superClass, Boolean isInterface, List<? extends RefTypeOrTPHOrWildcardOrGeneric> implementedInterfaces, Token offset){
|
2017-06-28 19:10:28 +00:00
|
|
|
super(offset);
|
2017-01-16 13:28:22 +00:00
|
|
|
this.modifiers = modifiers;
|
|
|
|
this.name = name;
|
2017-03-06 16:59:01 +00:00
|
|
|
this.fields = fielddecl;
|
2017-06-15 00:17:46 +00:00
|
|
|
this.genericClassParameters = genericClassParameters;
|
2017-01-16 13:28:22 +00:00
|
|
|
this.superClass = superClass;
|
|
|
|
this.isInterface = isInterface;
|
|
|
|
this.implementedInterfaces = implementedInterfaces;
|
2017-03-06 16:59:01 +00:00
|
|
|
this.methods = methods;
|
2017-04-18 19:06:04 +00:00
|
|
|
this.constructors = constructors;
|
2017-01-16 13:28:22 +00:00
|
|
|
}
|
|
|
|
|
2017-01-10 22:44:19 +00:00
|
|
|
// Gets class name
|
|
|
|
public JavaClassName getClassName(){
|
|
|
|
return this.name;
|
|
|
|
}
|
|
|
|
|
2017-01-17 23:45:46 +00:00
|
|
|
// Get modifiers
|
2017-03-08 02:43:47 +00:00
|
|
|
public int getModifiers(){
|
2017-01-17 23:45:46 +00:00
|
|
|
return this.modifiers;
|
|
|
|
}
|
2017-03-06 16:59:01 +00:00
|
|
|
|
2017-02-15 11:22:06 +00:00
|
|
|
public List<Field> getFieldDecl(){
|
2017-03-06 16:59:01 +00:00
|
|
|
return this.fields;
|
|
|
|
}
|
|
|
|
public List<Method> getMethods(){
|
|
|
|
return this.methods;
|
2017-02-15 11:22:06 +00:00
|
|
|
}
|
2017-01-11 15:42:02 +00:00
|
|
|
|
2017-03-15 15:17:07 +00:00
|
|
|
public RefType getType() {
|
2017-04-18 19:06:04 +00:00
|
|
|
return generateTypeOfClass(this.getClassName(), this.getGenerics(), this.getOffset());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static RefType generateTypeOfClass(JavaClassName name, GenericDeclarationList genericsOfClass ,Token offset){
|
2017-09-22 16:31:47 +00:00
|
|
|
//Hier wird immer ein generischer Typ generiert, also mit Type placeholdern
|
|
|
|
List<RefTypeOrTPHOrWildcardOrGeneric> params = new ArrayList<>();
|
|
|
|
for(GenericTypeVar genericTypeVar : genericsOfClass){
|
|
|
|
//params.add(genericTypeVar.getTypePlaceholder());
|
|
|
|
params.add(TypePlaceholder.fresh(offset));
|
|
|
|
}
|
|
|
|
return new RefType(name, params, offset);
|
2017-03-15 15:17:07 +00:00
|
|
|
}
|
2017-03-16 19:02:53 +00:00
|
|
|
|
|
|
|
public RefTypeOrTPHOrWildcardOrGeneric getSuperClass() {
|
|
|
|
return superClass;
|
|
|
|
}
|
2017-03-29 15:28:29 +00:00
|
|
|
|
2017-04-18 19:06:04 +00:00
|
|
|
public GenericDeclarationList getGenerics() {
|
2017-03-29 15:28:29 +00:00
|
|
|
return this.genericClassParameters;
|
|
|
|
}
|
2017-04-18 19:06:04 +00:00
|
|
|
|
2017-08-23 14:24:25 +00:00
|
|
|
public List<Constructor> getConstructors() {
|
2017-04-18 19:06:04 +00:00
|
|
|
return constructors;
|
|
|
|
}
|
2017-06-15 00:17:46 +00:00
|
|
|
|
|
|
|
@Override
|
2017-06-28 19:10:28 +00:00
|
|
|
public void accept(ASTVisitor visitor) {
|
|
|
|
visitor.visit(this);
|
2017-06-15 00:17:46 +00:00
|
|
|
}
|
2013-10-18 11:33:46 +00:00
|
|
|
}
|