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

99 lines
3.2 KiB
Java
Raw Normal View History

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;
import de.dhbwstuttgart.exceptions.DebugException;
import de.dhbwstuttgart.parser.scope.JavaClassName;
2017-03-15 15:17:07 +00:00
import de.dhbwstuttgart.syntaxtree.type.RefType;
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;
import de.dhbwstuttgart.typeinference.constraints.Constraint;
2017-03-16 19:02:53 +00:00
import de.dhbwstuttgart.typeinference.constraints.ConstraintSet;
import de.dhbwstuttgart.typeinference.assumptions.TypeInferenceInformation;
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;
/**
* Stellt jede Art von Klasse dar. Auch abstrakte Klassen und Interfaces
*/
public class ClassOrInterface extends SyntaxTreeNode implements TypeScope{
protected int modifiers;
protected JavaClassName name;
2017-03-06 16:59:01 +00:00
private List<Field> fields = new ArrayList<>();
private List<Method> methods = new ArrayList<>();
private GenericDeclarationList genericClassParameters;
2017-10-10 12:47:05 +00:00
private RefType superClass;
protected boolean isInterface;
2017-03-16 19:02:53 +00:00
private List<? extends RefTypeOrTPHOrWildcardOrGeneric> implementedInterfaces;
private List<Constructor> constructors;
public ClassOrInterface(int modifiers, JavaClassName name, List<Field> fielddecl, List<Method> methods, List<Constructor> constructors, GenericDeclarationList genericClassParameters,
2017-10-10 12:47:05 +00:00
RefType superClass, Boolean isInterface, List<? extends RefTypeOrTPHOrWildcardOrGeneric> implementedInterfaces, Token offset){
2017-06-28 19:10:28 +00:00
super(offset);
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;
this.superClass = superClass;
this.isInterface = isInterface;
this.implementedInterfaces = implementedInterfaces;
2017-03-06 16:59:01 +00:00
this.methods = methods;
this.constructors = constructors;
}
// Gets class name
public JavaClassName getClassName(){
return this.name;
}
// Get modifiers
public int getModifiers(){
return this.modifiers;
}
2017-03-06 16:59:01 +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-01-11 15:42:02 +00:00
2017-03-15 15:17:07 +00:00
public RefType getType() {
return generateTypeOfClass(this.getClassName(), this.getGenerics(), this.getOffset());
}
public static RefType generateTypeOfClass(JavaClassName name, GenericDeclarationList genericsOfClass ,Token offset){
//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
2017-10-10 12:47:05 +00:00
public RefType getSuperClass() {
2017-03-16 19:02:53 +00:00
return superClass;
}
2017-03-29 15:28:29 +00:00
public GenericDeclarationList getGenerics() {
2017-03-29 15:28:29 +00:00
return this.genericClassParameters;
}
@Override
public RefTypeOrTPHOrWildcardOrGeneric getReturnType() {
return null;
}
public List<Constructor> getConstructors() {
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
}