/*******************************************************************************
* Copyright (c) 2009-2015 CWI
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI
* * Tijs van der Storm - Tijs.van.der.Storm@cwi.nl
* * Paul Klint - Paul.Klint@cwi.nl - CWI
* * Mark Hills - Mark.Hills@cwi.nl (CWI)
* * Arnold Lankamp - Arnold.Lankamp@cwi.nl
* * Michael Steindorfer - Michael.Steindorfer@cwi.nl - CWI
*******************************************************************************/
package org.rascalmpl.ast;
import org.rascalmpl.value.IConstructor;
import org.rascalmpl.value.ISourceLocation;
public abstract class Type extends AbstractAST {
public Type(ISourceLocation src, IConstructor node) {
super(src /* we forget node on purpose */);
}
public boolean hasBasic() {
return false;
}
public org.rascalmpl.ast.BasicType getBasic() {
throw new UnsupportedOperationException();
}
public boolean hasSelector() {
return false;
}
public org.rascalmpl.ast.DataTypeSelector getSelector() {
throw new UnsupportedOperationException();
}
public boolean hasFunction() {
return false;
}
public org.rascalmpl.ast.FunctionType getFunction() {
throw new UnsupportedOperationException();
}
public boolean hasStructured() {
return false;
}
public org.rascalmpl.ast.StructuredType getStructured() {
throw new UnsupportedOperationException();
}
public boolean hasSymbol() {
return false;
}
public org.rascalmpl.ast.Sym getSymbol() {
throw new UnsupportedOperationException();
}
public boolean hasType() {
return false;
}
public org.rascalmpl.ast.Type getType() {
throw new UnsupportedOperationException();
}
public boolean hasTypeVar() {
return false;
}
public org.rascalmpl.ast.TypeVar getTypeVar() {
throw new UnsupportedOperationException();
}
public boolean hasUser() {
return false;
}
public org.rascalmpl.ast.UserType getUser() {
throw new UnsupportedOperationException();
}
public boolean isBasic() {
return false;
}
static public class Basic extends Type {
// Production: sig("Basic",[arg("org.rascalmpl.ast.BasicType","basic")],breakable=false)
private final org.rascalmpl.ast.BasicType basic;
public Basic(ISourceLocation src, IConstructor node , org.rascalmpl.ast.BasicType basic) {
super(src, node);
this.basic = basic;
}
@Override
public boolean isBasic() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeBasic(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = basic.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
basic.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Basic)) {
return false;
}
Basic tmp = (Basic) o;
return true && tmp.basic.equals(this.basic) ;
}
@Override
public int hashCode() {
return 163 + 641 * basic.hashCode() ;
}
@Override
public org.rascalmpl.ast.BasicType getBasic() {
return this.basic;
}
@Override
public boolean hasBasic() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(basic));
}
}
public boolean isBracket() {
return false;
}
static public class Bracket extends Type {
// Production: sig("Bracket",[arg("org.rascalmpl.ast.Type","type")],breakable=false)
private final org.rascalmpl.ast.Type type;
public Bracket(ISourceLocation src, IConstructor node , org.rascalmpl.ast.Type type) {
super(src, node);
this.type = type;
}
@Override
public boolean isBracket() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeBracket(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = type.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
type.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Bracket)) {
return false;
}
Bracket tmp = (Bracket) o;
return true && tmp.type.equals(this.type) ;
}
@Override
public int hashCode() {
return 313 + 509 * type.hashCode() ;
}
@Override
public org.rascalmpl.ast.Type getType() {
return this.type;
}
@Override
public boolean hasType() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(type));
}
}
public boolean isFunction() {
return false;
}
static public class Function extends Type {
// Production: sig("Function",[arg("org.rascalmpl.ast.FunctionType","function")],breakable=false)
private final org.rascalmpl.ast.FunctionType function;
public Function(ISourceLocation src, IConstructor node , org.rascalmpl.ast.FunctionType function) {
super(src, node);
this.function = function;
}
@Override
public boolean isFunction() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeFunction(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = function.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
function.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Function)) {
return false;
}
Function tmp = (Function) o;
return true && tmp.function.equals(this.function) ;
}
@Override
public int hashCode() {
return 563 + 149 * function.hashCode() ;
}
@Override
public org.rascalmpl.ast.FunctionType getFunction() {
return this.function;
}
@Override
public boolean hasFunction() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(function));
}
}
public boolean isSelector() {
return false;
}
static public class Selector extends Type {
// Production: sig("Selector",[arg("org.rascalmpl.ast.DataTypeSelector","selector")],breakable=false)
private final org.rascalmpl.ast.DataTypeSelector selector;
public Selector(ISourceLocation src, IConstructor node , org.rascalmpl.ast.DataTypeSelector selector) {
super(src, node);
this.selector = selector;
}
@Override
public boolean isSelector() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeSelector(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = selector.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
selector.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Selector)) {
return false;
}
Selector tmp = (Selector) o;
return true && tmp.selector.equals(this.selector) ;
}
@Override
public int hashCode() {
return 431 + 67 * selector.hashCode() ;
}
@Override
public org.rascalmpl.ast.DataTypeSelector getSelector() {
return this.selector;
}
@Override
public boolean hasSelector() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(selector));
}
}
public boolean isStructured() {
return false;
}
static public class Structured extends Type {
// Production: sig("Structured",[arg("org.rascalmpl.ast.StructuredType","structured")],breakable=false)
private final org.rascalmpl.ast.StructuredType structured;
public Structured(ISourceLocation src, IConstructor node , org.rascalmpl.ast.StructuredType structured) {
super(src, node);
this.structured = structured;
}
@Override
public boolean isStructured() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeStructured(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = structured.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
structured.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Structured)) {
return false;
}
Structured tmp = (Structured) o;
return true && tmp.structured.equals(this.structured) ;
}
@Override
public int hashCode() {
return 19 + 181 * structured.hashCode() ;
}
@Override
public org.rascalmpl.ast.StructuredType getStructured() {
return this.structured;
}
@Override
public boolean hasStructured() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(structured));
}
}
public boolean isSymbol() {
return false;
}
static public class Symbol extends Type {
// Production: sig("Symbol",[arg("org.rascalmpl.ast.Sym","symbol")],breakable=false)
private final org.rascalmpl.ast.Sym symbol;
public Symbol(ISourceLocation src, IConstructor node , org.rascalmpl.ast.Sym symbol) {
super(src, node);
this.symbol = symbol;
}
@Override
public boolean isSymbol() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeSymbol(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = symbol.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
symbol.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Symbol)) {
return false;
}
Symbol tmp = (Symbol) o;
return true && tmp.symbol.equals(this.symbol) ;
}
@Override
public int hashCode() {
return 599 + 101 * symbol.hashCode() ;
}
@Override
public org.rascalmpl.ast.Sym getSymbol() {
return this.symbol;
}
@Override
public boolean hasSymbol() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(symbol));
}
}
public boolean isUser() {
return false;
}
static public class User extends Type {
// Production: sig("User",[arg("org.rascalmpl.ast.UserType","user")],breakable=false)
private final org.rascalmpl.ast.UserType user;
public User(ISourceLocation src, IConstructor node , org.rascalmpl.ast.UserType user) {
super(src, node);
this.user = user;
}
@Override
public boolean isUser() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeUser(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = user.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
user.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof User)) {
return false;
}
User tmp = (User) o;
return true && tmp.user.equals(this.user) ;
}
@Override
public int hashCode() {
return 421 + 277 * user.hashCode() ;
}
@Override
public org.rascalmpl.ast.UserType getUser() {
return this.user;
}
@Override
public boolean hasUser() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(user));
}
}
public boolean isVariable() {
return false;
}
static public class Variable extends Type {
// Production: sig("Variable",[arg("org.rascalmpl.ast.TypeVar","typeVar")],breakable=false)
private final org.rascalmpl.ast.TypeVar typeVar;
public Variable(ISourceLocation src, IConstructor node , org.rascalmpl.ast.TypeVar typeVar) {
super(src, node);
this.typeVar = typeVar;
}
@Override
public boolean isVariable() {
return true;
}
@Override
public <T> T accept(IASTVisitor<T> visitor) {
return visitor.visitTypeVariable(this);
}
@Override
protected void addForLineNumber(int $line, java.util.List<AbstractAST> $result) {
if (getLocation().getBeginLine() == $line) {
$result.add(this);
}
ISourceLocation $l;
$l = typeVar.getLocation();
if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) {
typeVar.addForLineNumber($line, $result);
}
if ($l.getBeginLine() > $line) {
return;
}
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Variable)) {
return false;
}
Variable tmp = (Variable) o;
return true && tmp.typeVar.equals(this.typeVar) ;
}
@Override
public int hashCode() {
return 487 + 797 * typeVar.hashCode() ;
}
@Override
public org.rascalmpl.ast.TypeVar getTypeVar() {
return this.typeVar;
}
@Override
public boolean hasTypeVar() {
return true;
}
@Override
public Object clone() {
return newInstance(getClass(), src, (IConstructor) null , clone(typeVar));
}
}
}