package com.semmle.js.ast; import com.semmle.ts.ast.ITypeExpression; import com.semmle.ts.ast.TypeParameter; import java.util.Collections; import java.util.List; /** * A class declaration such as * *
 * class ColouredPoint extends Point {
 *   constructor(x, y, colour) {
 *     super(x, y);
 *     this.colour = colour;
 *   }
 * }
 * 
*/ public class ClassDeclaration extends Statement { private final AClass klass; private final boolean hasDeclareKeyword; private final boolean hasAbstractKeyword; public ClassDeclaration( SourceLocation loc, Identifier id, Expression superClass, ClassBody body) { this(loc, id, Collections.emptyList(), superClass, Collections.emptyList(), body, false, false); } public ClassDeclaration( SourceLocation loc, Identifier id, List typeParameters, Expression superClass, List superInterfaces, ClassBody body, boolean hasDeclareKeyword, boolean hasAbstractKeyword) { this( loc, new AClass(id, typeParameters, superClass, superInterfaces, body), hasDeclareKeyword, hasAbstractKeyword); } public ClassDeclaration( SourceLocation loc, AClass klass, boolean hasDeclareKeyword, boolean hasAbstractKeyword) { super("ClassDeclaration", loc); this.klass = klass; this.hasDeclareKeyword = hasDeclareKeyword; this.hasAbstractKeyword = hasAbstractKeyword; } public AClass getClassDef() { return klass; } @Override public R accept(Visitor v, C c) { return v.visit(this, c); } public void addDecorators(List decorators) { klass.addDecorators(decorators); } public List getDecorators() { return klass.getDecorators(); } public boolean hasDeclareKeyword() { return hasDeclareKeyword; } public boolean hasAbstractKeyword() { return hasAbstractKeyword; } }