package de.peeeq.wurstscript.ast


abstract syntax:

Identifier(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String name)

WurstModel * CompilationUnit

CompilationUnit(de.peeeq.wurstscript.attributes.CompilationUnitInfo cuInfo,
	JassToplevelDeclarations jassDecls, WPackages packages)


JassToplevelDeclarations * JassToplevelDeclaration

WPackages * WPackage 


TopLevelDeclaration = JassToplevelDeclaration | WPackage
TopLevelDeclarations * TopLevelDeclaration

WPackage(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, WImports imports, WEntities elements)

WImports * WImport
WEntities * WEntity

WImport(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, boolean isPublic, boolean isInitLater, Identifier packagenameId)

WEntity =
	  TypeDef
	| FuncDef
	| GlobalVarDef
	| ExtensionFuncDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, TypeExpr extendedType, Identifier nameId, TypeParamDefs typeParameters, WParameters parameters, OptTypeExpr returnTyp, WStatements body)
	| InitBlock (@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body)
	| NativeFunc(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, WParameters parameters, OptTypeExpr returnTyp)
	| ModuleDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, TypeParamDefs typeParameters,
			ClassDefs innerClasses, FuncDefs methods, GlobalVarDefs vars, ConstructorDefs constructors,
			ModuleInstanciations p_moduleInstanciations, ModuleUses moduleUses, OnDestroyDef onDestroy)



TypeExpr =
	  TypeExprSimple(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, OptTypeExpr scopeType, String typeName, TypeExprList typeArgs)
	| TypeExprArray(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, TypeExpr base, OptExpr arraySize)
	| TypeExprThis(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, OptTypeExpr scopeType)
	| TypeExprResolved(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, de.peeeq.wurstscript.types.WurstType resolvedType)


OptTypeExpr = NoTypeExpr() | TypeExpr
OptExpr = NoExpr() | Expr

TypeDef =
	  NativeType(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, OptTypeExpr optTyp)
	| ClassDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, TypeParamDefs typeParameters, OptTypeExpr extendedClass, TypeExprList implementsList,
			ClassDefs innerClasses, FuncDefs methods, GlobalVarDefs vars, ConstructorDefs constructors,
			ModuleInstanciations p_moduleInstanciations, ModuleUses moduleUses, OnDestroyDef onDestroy)
	| InterfaceDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, TypeParamDefs typeParameters, TypeExprList extendsList,
			FuncDefs methods, GlobalVarDefs vars, ConstructorDefs constructors,
			ModuleInstanciations moduleInstanciations, ModuleUses moduleUses, OnDestroyDef onDestroy)
	| TupleDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, WParameters parameters, OptTypeExpr returnTyp)
	| TypeParamDef
	| EnumDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, EnumMembers members )
	| StructureDef

ClassDefs * ClassDef
EnumMembers * EnumMember
FuncDefs * FuncDef
GlobalVarDefs * GlobalVarDef
ConstructorDefs * ConstructorDef
ModuleInstanciations * ModuleInstanciation
ModuleUses * ModuleUse
TypeExprList * TypeExpr
SwitchCases * SwitchCase


SwitchCase( @ignoreForEquality de.peeeq.wurstscript.parser.WPos source, ExprList expressions, WStatements stmts )
SwitchDefaultCase = SwitchDefaultCaseStatements(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements stmts) | NoDefaultCase()

ClassSlot =
	  ConstructorDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, WParameters parameters, SuperConstructorCall superConstructorCall, WStatements body)
	| OnDestroyDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body)
	| ModuleUse(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier moduleNameId, TypeExprList typeArgs)
	| ModuleInstanciation(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId,
			ClassDefs innerClasses, FuncDefs methods, GlobalVarDefs vars, ConstructorDefs constructors,
			ModuleInstanciations p_moduleInstanciations, ModuleUses moduleUses, OnDestroyDef onDestroy)
	| ClassMember
	| ClassDef

ClassMember =
	  GlobalVarDef
	| FuncDef

EnumMember(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId)

SuperConstructorCall =
      SomeSuperConstructorCall(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, @ignoreForEquality de.peeeq.wurstscript.parser.WPos keywordSource, Arguments superArgs)
    | NoSuperConstructorCall()


GlobalVarDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, OptTypeExpr optTyp, Identifier nameId, VarInitialization initialExpr)
LocalVarDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, OptTypeExpr optTyp, Identifier nameId, VarInitialization initialExpr)

VarInitialization =
    OptExpr
  | ArrayInitializer(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, ExprList values)


FuncDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, TypeParamDefs typeParameters, WParameters parameters, OptTypeExpr returnTyp, WStatements body)



ArraySizes * Expr

//FuncSignature(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier nameId, TypeParamDefs typeParameters, WParameters parameters, OptTypeExpr returnTyp)

TypeParamDefs * TypeParamDef

TypeParamDef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, Identifier nameId, TypeParamConstraints typeParamConstraints)

TypeParamConstraints = NoTypeParamConstraints() | TypeExprList


WParameters * WParameter
WParameter(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, TypeExpr typ, Identifier nameId)

WShortParameters * WShortParameter
WShortParameter(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Modifiers modifiers, OptTypeExpr typOpt, Identifier nameId)

WStatements * WStatement

ExprOrStatements = WStatements | WStatement | Expr

WStatement = ActionStatement | ControlflowStatement | EndFunctionStatement(de.peeeq.wurstscript.parser.WPos source) | StartFunctionStatement(de.peeeq.wurstscript.parser.WPos source)

ActionStatement =
	  StmtSkip(de.peeeq.wurstscript.parser.WPos source)
	| LocalVarDef
	| StmtSet(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, LExpr updatedExpr, Expr right)
	| StmtCall
	| StmtErr(de.peeeq.wurstscript.parser.WPos source)
	| ExprMemberVar
	| ExprVarAccess
	| ExprDestroy


ControlflowStatement =
	  CompoundStatement
	| StmtReturn(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, OptExpr returnedObj)
	| StmtExitwhen(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond)
	| StmtContinue(de.peeeq.wurstscript.parser.WPos source)

CompoundStatement =
	  StmtIf(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond, WStatements thenBlock, WStatements elseBlock, boolean hasElse)
	| SwitchStmt(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr expr, SwitchCases cases, SwitchDefaultCase switchDefault)
	| WBlock(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body)
	| LoopStatement

LoopStatement =
	  StmtWhile(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond, WStatements body)
	| StmtLoop(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body)
	| LoopStatementWithVarDef

LoopStatementWithVarDef =
	  StmtForRange
    | StmtForEach

StmtForEach =
    StmtForIn(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, LocalVarDef loopVar, Expr in, WStatements body)
    | StmtForFrom(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, LocalVarDef loopVar, Expr in, WStatements body)

StmtForRange =
	  StmtForRangeUp(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, LocalVarDef loopVar, Expr to, Expr step, WStatements body)
	| StmtForRangeDown(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, LocalVarDef loopVar, Expr to, Expr step, WStatements body)

Expr =
	  LExpr
	| FunctionCall
	| ExprBinary(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, de.peeeq.wurstscript.WurstOperator op, Expr right)
	| ExprUnary(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, de.peeeq.wurstscript.WurstOperator opU, Expr right)
	| ExprMember
	| ExprFunctionCall(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier funcNameId, TypeExprList typeArgs, Arguments args)
	| ExprNewObject(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier typeNameId, TypeExprList typeArgs, Arguments args)
	| ExprTypeRef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, TypeExpr typ)
	| ExprCast(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, TypeExpr typ, Expr expr)
	| ExprInstanceOf(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, TypeExpr typ, Expr expr)
	| ExprClosure(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, @ignoreForEquality de.peeeq.wurstscript.parser.WPos arrowSource, WShortParameters shortParameters, Expr implementation)
	| ExprAtomic
	| ExprIncomplete(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String errorMessage)
	| ExprStatementsBlock(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body)
	| ExprDestroy(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr destroyedObj)
	| ExprIfElse(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond, Expr ifTrue, Expr ifFalse)
	| ExprArrayLength(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr array)

ExprMember =
	  ExprMemberVar
	| ExprMemberArrayVar
	| ExprMemberMethod
	| ExprTypeId(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left)


ExprMemberVar =
	  ExprMemberVarDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier varNameId)
	| ExprMemberVarDotDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier varNameId)

ExprMemberArrayVar =
	  ExprMemberArrayVarDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier varNameId, Indexes indexes)
	| ExprMemberArrayVarDotDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier varNameId, Indexes indexes)

ExprMemberMethod =
	  ExprMemberMethodDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier funcNameId, TypeExprList typeArgs, Arguments args)
	| ExprMemberMethodDotDot(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr left, Identifier funcNameId, TypeExprList typeArgs, Arguments args)


ExprAtomic =
	  ExprIntVal(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String valIraw)
	| ExprRealVal(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String valR)
	| ExprStringVal(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String valS)
	| ExprBoolVal(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, boolean valB)
	| ExprFuncRef(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String scopeName, Identifier funcNameId)
	| ExprVarAccess(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier varNameId)
	| ExprVarArrayAccess(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier varNameId, Indexes indexes)
	| ExprThis(de.peeeq.wurstscript.parser.WPos source)
	| ExprNull(de.peeeq.wurstscript.parser.WPos source)
	| ExprSuper(de.peeeq.wurstscript.parser.WPos source)
	| ExprEmpty(de.peeeq.wurstscript.parser.WPos source)


Indexes * Expr
Arguments * Expr
ExprList * Expr



// auxiliary types:

IdentifierWithTypeArgs(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier nameId, ref TypeExprList typeArgs)

IdentifierWithTypeParamDefs(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier nameId, ref TypeParamDefs typeParams)


// a reference to a variable, needs a varName:String attribute
NameRef = ExprVarArrayAccess | ExprVarAccess | ExprMemberVar | ExprMemberArrayVar

// an expression that can be used on the left-hand side of an assignment
LExpr = NameRef

VarDef =
	  GlobalOrLocalVarDef
	| WParameter
	| WShortParameter

GlobalOrLocalVarDef =
	  GlobalVarDef
	| LocalVarDef

// has funcName:String attribute

StmtCall = FunctionCall | ExprNewObject

FunctionCall = ExprMemberMethod | ExprFunctionCall

FuncRef = ExprFuncRef | FunctionCall | Annotation


NotExtensionFunction = NativeFunc | FuncDef | TupleDef

FunctionDefinition = NotExtensionFunction | ExtensionFuncDef | FunctionImplementation

FunctionImplementation = FuncDef | ExtensionFuncDef

FunctionLike = FunctionImplementation | ConstructorDef | InitBlock | OnDestroyDef

Documentable = NameDef | ConstructorDef



WScope =
	  NamedScope
	| PackageOrGlobal
	| FunctionDefinition
	| FunctionLike
	| WurstModel
	| WStatements
	| LoopStatementWithVarDef
	| WBlock
	| WEntities
	| ExprClosure

PackageOrGlobal = WPackage | CompilationUnit

TypeRef = TypeExpr | ExprNewObject

NameDef = NamedScope | VarDef | TypeDef | ModuleDef | ModuleInstanciation | FunctionDefinition | WPackage | EnumDef | EnumMember

VisibilityModifier =
	  VisibilityPublic(de.peeeq.wurstscript.parser.WPos source)
	| VisibilityPrivate(de.peeeq.wurstscript.parser.WPos source)
	| VisibilityPublicread(de.peeeq.wurstscript.parser.WPos source)
	| VisibilityProtected(de.peeeq.wurstscript.parser.WPos source)
	| VisibilityDefault(de.peeeq.wurstscript.parser.WPos source)

Modifiers * Modifier

Modifier =
	  VisibilityModifier
	| Annotation(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Identifier funcNameId, Arguments args)
	| ModStatic(de.peeeq.wurstscript.parser.WPos source)
	| ModOverride(de.peeeq.wurstscript.parser.WPos source)
	| ModAbstract(de.peeeq.wurstscript.parser.WPos source)
	| ModConstant(de.peeeq.wurstscript.parser.WPos source)
	| WurstDoc(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, String rawComment)
	| ModVararg(de.peeeq.wurstscript.parser.WPos source)

// ElementWithBody = FunctionImplementation | InitBlock | ConstructorDef | OnDestroyDef
//ElementWithModifier = NameDef | TypeDef | ModuleDef | ConstructorDef | GlobalVarDef | FunctionDefinition
HasModifier = NameDef | TypeDef | ModuleDef | ConstructorDef | GlobalVarDef | FunctionDefinition
HasTypeArgs =  ExprNewObject | FunctionCall | ModuleUse | StmtCall | TypeExprSimple

AstElementWithFuncName = ExprFunctionCall | ExprMemberMethod | ExprFuncRef

AstElementWithBody = ExtensionFuncDef | InitBlock | ConstructorDef | OnDestroyDef | FuncDef | WBlock 
	| LoopStatement | ExprStatementsBlock | FunctionLike

AstElementWithNameId = WPackage | NativeFunc | ModuleDef | TypeDef | ModuleInstanciation
    | EnumMember | GlobalVarDef | LocalVarDef | FuncDef | TypeParamDef | WParameter | WShortParameter | IdentifierWithTypeArgs | IdentifierWithTypeParamDefs

AstElementWithParameters = FunctionDefinition | ExtensionFuncDef | NativeFunc | TupleDef | ConstructorDef | FuncDef

AstElementWithTypeParameters = ExtensionFuncDef | ModuleDef | ClassDef | InterfaceDef | FuncDef

AstElementWithArgs = StmtCall | ExprFunctionCall | ExprNewObject | ExprMemberMethod

AstElementWithTypeArgs = IdentifierWithTypeArgs | TypeExprSimple | ModuleUse 
	| ExprFunctionCall | ExprNewObject | ExprMemberMethod | FunctionCall



HasReceiver = ExprMemberVar | ExprMemberArrayVar | ExprMemberMethod

AstElementWithSource = Identifier | WPackage | WImport | WEntity | TypeExpr | TypeDef | SwitchCase 
  | ClassSlot | ClassMember | EnumMember | GlobalVarDef | LocalVarDef | FuncDef | TypeParamDef | WParameter | WShortParameter | WStatement | Expr
  | IdentifierWithTypeArgs | IdentifierWithTypeParamDefs | NameRef | VarDef | FunctionDefinition | NameRef | NameDef
  | Modifier
  | SomeSuperConstructorCall

AstElementWithIndexes = ExprMemberArrayVar | ExprVarArrayAccess



ClassOrModule = ClassDef | ModuleDef

StructureDef = ClassOrModuleOrModuleInstanciation | ClassOrInterface

ClassOrInterface = ClassDef | InterfaceDef

ClassOrModuleInstanciation = ClassDef | ModuleInstanciation
ClassOrModuleOrModuleInstanciation = ClassOrModule | ClassOrModuleInstanciation

NamedScope = WPackage | StructureDef | InterfaceDef | EnumDef

HasReadVariables = Expr | WStatement | WScope

HasFunctionSignature = FunctionDefinition | ConstructorDef

// Jass types:


JassToplevelDeclaration = JassGlobalBlock | NotExtensionFunction | NativeType

JassGlobalBlock * GlobalVarDef


// special types for translation
TranslatedToImFunction = ConstructorDef | FunctionDefinition | InitBlock | OnDestroyDef | ExprClosure



attributes:

WStatement.attrNextStatements "returns all statements which can be executed after this statement"
	returns java.util.List<WStatement>
	implemented by de.peeeq.wurstscript.attributes.Flow.getNext

WStatement.attrPreviousStatements "returns all statements which could have been executed before this statement"
	returns java.util.List<WStatement>
	implemented by de.peeeq.wurstscript.attributes.Flow.getPrevious


CompoundStatement.attrAfterBodyStatements "returns all statements which can be executed after the body/thenBlock/elseBlock of this statement is executed"
	returns java.util.List<WStatement>
	implemented by de.peeeq.wurstscript.attributes.Flow.getAfterBody

WStatement.attrListIndex "returns the index this statement has in the underlying list"
	returns int
	implemented by  de.peeeq.wurstscript.attributes.Flow.getListIndex


HasReadVariables.attrReadVariables
	returns de.peeeq.immutablecollections.ImmutableList<NameDef>
	implemented by de.peeeq.wurstscript.attributes.ReadVariables.calculate


FunctionDefinition.attrReturnTyp()
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrReturnTyp.calculate

OptTypeExpr.attrTyp
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrTypeExprType.normalizedType

Expr.attrTyp
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrExprType.normalizedType


Expr.attrConstantValue
	returns de.peeeq.wurstscript.intermediatelang.ILconst
	implemented by de.peeeq.wurstscript.attributes.AttrConstantValue.calculate


OptTypeExpr.attrTypRaw
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrTypeExprType.calculate

Expr.attrTypRaw
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrExprType.calculate

Expr.attrExpectedTypRaw
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrExprExpectedType.calculate

Expr.attrExpectedTyp "try to guess what type is expected here"
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrExprExpectedType.normalizedType

Expr.attrExpectedTypAfterOverloading() "more precise expected type, after overloading"
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrExprExpectedType.afterOverloading

ExprClosure.attrClosureAbstractMethod
	returns de.peeeq.wurstscript.attributes.names.FuncLink
	implemented by de.peeeq.wurstscript.attributes.AttrClosureAbstractMethod.calculate

ExprClosure.attrCapturedVariables
	returns com.google.common.collect.ImmutableMultimap<Element,VarDef>
	implemented by de.peeeq.wurstscript.attributes.AttrClosureCapturedVariables.calculate


FunctionCall.attrImplicitParameter
	returns OptExpr
	implemented by de.peeeq.wurstscript.attributes.AttrImplicitParameter.getImplicitParameter

LExpr.attrImplicitParameter
	returns OptExpr
	implemented by de.peeeq.wurstscript.attributes.AttrImplicitParameter.getImplicitParameter


NameDef.attrTyp
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrVarDefType.calculate

ClassDef.attrTypC
	returns de.peeeq.wurstscript.types.WurstTypeClass
	implemented by de.peeeq.wurstscript.attributes.AttrVarDefType.calculate

InterfaceDef.attrTypI
	returns de.peeeq.wurstscript.types.WurstTypeInterface
	implemented by de.peeeq.wurstscript.attributes.AttrVarDefType.calculate


FunctionLike.attrReturnType
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrVarDefType.calculate

VarDef.attrIsDynamicClassMember()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.AttrIsClassMember.calculate

FunctionDefinition.attrIsDynamicClassMember()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.AttrIsClassMember.calculate

FunctionDefinition.attrParameterTypesIncludingReceiver
	returns com.google.common.collect.ImmutableList<de.peeeq.wurstscript.types.WurstType>
	implemented by de.peeeq.wurstscript.attributes.AttrParameterTypes.parameterTypesIncludingReceiver

FunctionDefinition.attrParameterTypes
	returns com.google.common.collect.ImmutableList<de.peeeq.wurstscript.types.WurstType>
	implemented by de.peeeq.wurstscript.attributes.AttrParameterTypes.parameterTypes

FunctionDefinition.attrReceiverType
	returns de.peeeq.wurstscript.types.WurstType
	implemented by de.peeeq.wurstscript.attributes.AttrParameterTypes.receiverType

Element.attrIsDynamicContext()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.IsDynamicContext.calculate

Element.attrNearestPackage()
	returns @Nullable PackageOrGlobal
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestPackage

Element.attrNearestNamedScope()
	returns @Nullable NamedScope
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestNamedScope

Element.attrNearestScope()
	returns @Nullable WScope
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestScope

WScope.attrNextScope "returns the scope surrounding this scope"
	returns @Nullable WScope
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nextScope


Element.attrPathDescription()
	returns String
	implemented by de.peeeq.wurstscript.attributes.PathDescription.get

Element.attrCompilationUnit()
	returns CompilationUnit
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestCompilationUnit

Element.attrNearestClassDef()
	returns @Nullable ClassDef
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestClassDef

Element.attrNearestClassOrInterface()
	returns @Nullable ClassOrInterface
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestClassOrInterface

Element.attrNearestClassOrModule()
	returns @Nullable ClassOrModule
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestClassOrModule

Element.attrNearestStructureDef()
	returns @Nullable StructureDef
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestStructureDef

Element.attrNearestFuncDef()
	returns @Nullable FunctionImplementation
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestFuncDef


Element.attrNearestExprClosure()
	returns @Nullable ExprClosure
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestExprClosure

Element.attrNearestExprStatementsBlock()
	returns @Nullable ExprStatementsBlock
	implemented by de.peeeq.wurstscript.attributes.AttrNearest.nearestExprStatementsBlock



Element.tryGetNameDef() "returns the element itself if it is a NameDef or returns the referenced NameDef if the elem is a reference or returns null otherwise "
	returns @Nullable NameDef
	implemented by de.peeeq.wurstscript.attributes.AttrNameDef.tryGetNameDef


ExprStatementsBlock.getReturnStmt()
	returns StmtReturn
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getReturnStatement



HasModifier.attrIsCompiletime()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isCompiletime

HasModifier.attrHasAnnotation(String name)
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.hasAnnotation

HasModifier.attrGetAnnotation(String name)
	returns Annotation
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.getAnnotation

HasModifier.attrIsPublic()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isPublic

HasModifier.attrIsPublicRead()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isPublicRead

HasModifier.attrIsPrivate()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isPrivate

HasModifier.attrIsProtected()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isProtected

HasModifier.attrIsStatic()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isStatic

HasModifier.attrIsOverride()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isOverride

HasModifier.attrIsAbstract()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isAbstract

HasModifier.attrIsConstant()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isConstant

HasModifier.attrIsVararg()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isVararg

ClassOrModuleOrModuleInstanciation.getModuleInstanciations()
	returns ModuleInstanciations
	implemented by de.peeeq.wurstscript.ModuleExpander.expandModules

ClassOrModule.attrUsedModules
	returns com.google.common.collect.ImmutableCollection<ModuleDef>
	implemented by de.peeeq.wurstscript.attributes.AttrUsedModules.calculate

WImport.attrImportedPackage
	returns @Nullable WPackage
	implemented by de.peeeq.wurstscript.attributes.AttrImportedPackage.getImportedPackage



ModuleInstanciation.attrModuleOrigin
	returns ModuleDef
	implemented by de.peeeq.wurstscript.attributes.AttrModuleInstanciations.getModuleOrigin

StmtCall.attrPossibleFunctionSignatures
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.types.FunctionSignature>
	implemented by de.peeeq.wurstscript.attributes.AttrPossibleFunctionSignatures.calculate

StmtCall.attrFunctionSignature
	returns de.peeeq.wurstscript.types.FunctionSignature
	implemented by de.peeeq.wurstscript.attributes.AttrFunctionSignature.calculate

StmtCall.attrCallSignature
	returns de.peeeq.wurstscript.types.CallSignature
	implemented by de.peeeq.wurstscript.attributes.AttrCallSignature.calculate

Element.attrSource()
	returns de.peeeq.wurstscript.parser.WPos
	implemented by de.peeeq.wurstscript.attributes.AttrPos.getPos

Element.attrErrorPos() "returns the position where errors are marked"
	returns de.peeeq.wurstscript.parser.WPos
	implemented by de.peeeq.wurstscript.attributes.AttrPos.getErrorPos


ClassDef.isInnerClass()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.InnerClasses.isInnerClass

ConstructorDef.attrSuperConstructor
	returns ConstructorDef
	implemented by de.peeeq.wurstscript.attributes.SubClasses.getSuperConstructor



WurstModel.attrPackages
	returns com.google.common.collect.ImmutableMap<String, WPackage>
	implemented by de.peeeq.wurstscript.attributes.AttrImportedPackage.getPackages


Element.getModel()
	returns WurstModel
	implemented by de.peeeq.wurstscript.attributes.AttrImportedPackage.getModel

CompilationUnit.attrGetByType
	returns de.peeeq.wurstscript.attributes.ByTypes
	implemented by de.peeeq.wurstscript.attributes.GetByType.calculate


WurstModel.attrConfigOverridePackages
	returns com.google.common.collect.ImmutableMap<WPackage, WPackage>
	implemented by de.peeeq.wurstscript.attributes.CofigOverridePackages.calculate

NameDef.attrConfigActualNameDef
	returns NameDef
	implemented by de.peeeq.wurstscript.attributes.CofigActualDef.calculate


NameDef.hasAnnotation(String annotation)
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.HasAnnotation.hasAnnotation

NameDef.getAnnotation(String annotation)
	returns Annotation
	implemented by de.peeeq.wurstscript.attributes.HasAnnotation.getAnnotation

StmtForIn.attrIteratorFunc
    returns java.util.Optional<de.peeeq.wurstscript.attributes.names.FuncLink>
    implemented by de.peeeq.wurstscript.attributes.AttrForEachStatement.calcIterator

StmtForEach.attrItrType
    returns de.peeeq.wurstscript.types.WurstType
    implemented by de.peeeq.wurstscript.attributes.AttrForEachStatement.calcItrType

StmtForEach.attrHasNextFunc
    returns java.util.Optional<de.peeeq.wurstscript.attributes.names.FuncLink>
    implemented by de.peeeq.wurstscript.attributes.AttrForEachStatement.calcHasNext

StmtForEach.attrGetNextFunc
    returns java.util.Optional<de.peeeq.wurstscript.attributes.names.FuncLink>
    implemented by de.peeeq.wurstscript.attributes.AttrForEachStatement.calcGetNext

StmtForEach.attrCloseFunc
   returns java.util.Optional<de.peeeq.wurstscript.attributes.names.FuncLink>
   implemented by de.peeeq.wurstscript.attributes.AttrForEachStatement.calcClose


// Im translation

	WPackage.imTranslateTLD(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator
		)
		returns void
		implemented by de.peeeq.wurstscript.translation.imtranslation.TLDTranslation.translate

	JassToplevelDeclaration.imTranslateTLD(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator
		)
		returns void
		implemented by de.peeeq.wurstscript.translation.imtranslation.TLDTranslation.translate


	WEntity.imTranslateEntity(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator
		)
		returns void
		implemented by de.peeeq.wurstscript.translation.imtranslation.TLDTranslation.translate

    LExpr.imTranslateExprLvalue(
         			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
         			de.peeeq.wurstscript.jassIm.ImFunction f
         		)
         		returns de.peeeq.wurstscript.jassIm.ImLExpr
         		implemented by de.peeeq.wurstscript.translation.imtranslation.ExprTranslation.translateLvalue

	Expr.imTranslateExpr(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
			de.peeeq.wurstscript.jassIm.ImFunction f
		)
		returns de.peeeq.wurstscript.jassIm.ImExpr
		implemented by de.peeeq.wurstscript.translation.imtranslation.ExprTranslation.translate

	OptExpr.imTranslateExprOpt(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
			de.peeeq.wurstscript.jassIm.ImFunction f
		)
		returns de.peeeq.wurstscript.jassIm.ImExprOpt
		implemented by de.peeeq.wurstscript.translation.imtranslation.ExprTranslation.translate


	WStatement.imTranslateStmt(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
			de.peeeq.wurstscript.jassIm.ImFunction f
		)
		returns de.peeeq.wurstscript.jassIm.ImStmt
		implemented by de.peeeq.wurstscript.translation.imtranslation.StmtTranslation.translate


	TranslatedToImFunction.imCreateFuncSkeleton(
			de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
			de.peeeq.wurstscript.jassIm.ImFunction f
		)
		returns void
		implemented by de.peeeq.wurstscript.translation.imtranslation.FuncSkeleton.create


Element.addError(String msg)
	returns void
	implemented by de.peeeq.wurstscript.attributes.ErrorHandling.addError

Element.addWarning(String msg)
	returns void
	implemented by de.peeeq.wurstscript.attributes.ErrorHandling.addWarning


Element.getErrorHandler()
	returns de.peeeq.wurstscript.attributes.ErrorHandler
	implemented by de.peeeq.wurstscript.attributes.ErrorHandling.getErrorHandler


FunctionLike.attrHasEmptyBody()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.hasEmptyBody

// Naming:

LExpr.attrNameLink
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.AttrNameDef.calculate

LExpr.attrNameDef
	returns NameDef
	implemented by de.peeeq.wurstscript.attributes.AttrNameDef.calculateDef

FuncRef.attrPossibleFuncDefs
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.PossibleFuncDefs.calculate


FuncRef.attrFuncLink
	returns de.peeeq.wurstscript.attributes.names.FuncLink
	implemented by de.peeeq.wurstscript.attributes.AttrFuncDef.calculate

FuncRef.attrFuncDef()
	returns FunctionDefinition
	implemented by de.peeeq.wurstscript.attributes.AttrFuncDef.calculateDef

ExprNewObject.attrConstructorDef
	returns @Nullable ConstructorDef
	implemented by de.peeeq.wurstscript.attributes.AttrConstructorDef.calculate

ExprBinary.attrFuncLink
	returns de.peeeq.wurstscript.attributes.names.FuncLink
	implemented by de.peeeq.wurstscript.attributes.AttrFuncDef.calculate

ExprBinary.attrFuncDef()
	returns FunctionDefinition
	implemented by de.peeeq.wurstscript.attributes.AttrFuncDef.calculateDef


FunctionDefinition.attrRealFuncDef "returns the function definition which overrides this definition"
	returns @Nullable FunctionDefinition
	implemented by de.peeeq.wurstscript.attributes.OverriddenFunctions.getRealFuncDef

StructureDef.attrLevel "returns the level in the hierarchy. no supertype -> level 1"
	returns int
	implemented by de.peeeq.wurstscript.attributes.Level.get


TypeDef.createTypeLink(WScope definedIn) "returns a TypeLink pointing to this NameDef"
	returns de.peeeq.wurstscript.attributes.names.TypeLink
	implemented by de.peeeq.wurstscript.attributes.names.TypeLink.create

FunctionDefinition.createFuncLink(WScope definedIn) "returns a FuncLink pointing to this NameDef"
	returns de.peeeq.wurstscript.attributes.names.FuncLink
	implemented by de.peeeq.wurstscript.attributes.names.FuncLink.create

VarDef.createVarLink(WScope definedIn) "returns a VarLink pointing to this NameDef"
	returns de.peeeq.wurstscript.attributes.names.VarLink
	implemented by de.peeeq.wurstscript.attributes.names.VarLink.create

VarDef.attrOptTypeExpr()
    returns OptTypeExpr
    implemented by de.peeeq.wurstscript.attributes.names.VarLink.getTypeExpr

ModuleUse.attrModuleDef
	returns @Nullable ModuleDef
	implemented by de.peeeq.wurstscript.attributes.AttrModuleDef.calculate

TypeRef.attrTypeDef
	returns @Nullable TypeDef
	implemented by de.peeeq.wurstscript.attributes.AttrTypeDef.calculate


//WPackage.attrExportedNames "get the exported names of a package"
//	returns  com.google.common.collect.ImmutableMultimap<String, NameDef>
//	implemented by de.peeeq.wurstscript.attributes.Scopes.getExportedNames

//WScope.attrDefinedNames "get the names defined in this scope"
//	returns com.google.common.collect.ImmutableMultimap<String, NameDef>
//	implemented by de.peeeq.wurstscript.attributes.Scopes.getDefinedNames

//WScope.attrVisibleNamesPrivate ""
//	returns com.google.common.collect.ImmutableMultimap<String, NameDef>
//	implemented by de.peeeq.wurstscript.attributes.Scopes.getVisibleNamesPrivate

//WScope.attrVisibleNamesProtected
//	returns com.google.common.collect.ImmutableMultimap<String, NameDef>
//	implemented by de.peeeq.wurstscript.attributes.Scopes.getVisibleNamesProtected

//WScope.attrVisibleNamesPublic
//	returns com.google.common.collect.ImmutableMultimap<String, NameDef>
//	implemented by de.peeeq.wurstscript.attributes.Scopes.getVisibleNamesPublic

WScope.attrNameLinks "returns a map of all the names visible in this scope."
	returns com.google.common.collect.ImmutableMultimap<String, de.peeeq.wurstscript.attributes.names.DefLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameLinks.calculate

WScope.attrTypeNameLinks "returns a map of all the names visible in this scope."
	returns com.google.common.collect.ImmutableMultimap<String, de.peeeq.wurstscript.attributes.names.TypeLink>
	implemented by de.peeeq.wurstscript.attributes.names.TypeNameLinks.calculate

WPackage.attrExportedNameLinks
	returns com.google.common.collect.ImmutableMultimap<String, de.peeeq.wurstscript.attributes.names.DefLink>
	implemented by de.peeeq.wurstscript.attributes.names.Exports.exportedNameLinks

WPackage.attrExportedTypeNameLinks
	returns com.google.common.collect.ImmutableMultimap<String, de.peeeq.wurstscript.attributes.names.TypeLink>
	implemented by de.peeeq.wurstscript.attributes.names.Exports.exportedTypeNameLinks


Element.lookupType(String name, boolean showErrors)
	returns @Nullable TypeDef
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupType

Element.lookupPackage(String name, boolean showErrors)
	returns de.peeeq.wurstscript.attributes.names.PackageLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupPackage

Element.lookupVar(String name, boolean showErrors)
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupVar

Element.lookupVarNoConfig(String name, boolean showErrors)
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupVarNoConfig

Element.lookupMemberVar(de.peeeq.wurstscript.types.WurstType receiverType, String name, boolean showErrors)
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupMemberVar

Element.lookupFuncs(String name, boolean showErrors)
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupFuncs

Element.lookupFuncsNoConfig(String name, boolean showErrors)
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupFuncsNoConfig

Element.lookupMemberFuncs(de.peeeq.wurstscript.types.WurstType receiverType, String name, boolean showErrors)
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupMemberFuncs


Element.lookupType(String name)
	returns @Nullable TypeDef
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupTypeShort

Element.lookupPackage(String name)
	returns de.peeeq.wurstscript.attributes.names.PackageLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupPackageShort

Element.lookupVar(String name)
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupVarShort

Element.lookupMemberVar(de.peeeq.wurstscript.types.WurstType receiverType, String name)
	returns de.peeeq.wurstscript.attributes.names.NameLink
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupMemberVarShort

Element.lookupFuncs(String name)
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupFuncsShort

Element.lookupMemberFuncs(de.peeeq.wurstscript.types.WurstType receiverType, String name)
	returns com.google.common.collect.ImmutableCollection<de.peeeq.wurstscript.attributes.names.FuncLink>
	implemented by de.peeeq.wurstscript.attributes.names.NameResolution.lookupMemberFuncsShort
	
TypeParamDefs.attrTypes()
	returns com.google.common.collect.ImmutableList<de.peeeq.wurstscript.types.WurstType>
	implemented by de.peeeq.wurstscript.attributes.TypeParamTypes.calculte

Documentable.attrComment()
	returns String
	implemented by de.peeeq.wurstscript.attributes.AttrWurstDoc.getComment
	
ExprOrStatements.attrUsedGlobalVariables
	returns com.google.common.collect.ImmutableList<VarDef>
	implemented by de.peeeq.wurstscript.attributes.UsedGlobalVariables.getUsedGlobals
	circular de.peeeq.wurstscript.utils.Utils.emptyList
	
FunctionDefinition.attrUsedGlobalVariables
	returns com.google.common.collect.ImmutableList<VarDef>
	implemented by de.peeeq.wurstscript.attributes.UsedGlobalVariables.getUsedGlobals
	circular de.peeeq.wurstscript.utils.Utils.emptyList
	
ExprOrStatements.attrReadGlobalVariables
	returns com.google.common.collect.ImmutableList<VarDef>
	implemented by de.peeeq.wurstscript.attributes.UsedGlobalVariables.getReadGlobals
	circular de.peeeq.wurstscript.utils.Utils.emptyList
	
FunctionDefinition.attrReadGlobalVariables
	returns com.google.common.collect.ImmutableList<VarDef>
	implemented by de.peeeq.wurstscript.attributes.UsedGlobalVariables.getReadGlobals
	circular de.peeeq.wurstscript.utils.Utils.emptyList

InitBlock.attrReadGlobalVariables
	returns com.google.common.collect.ImmutableList<VarDef>
	implemented by de.peeeq.wurstscript.attributes.UsedGlobalVariables.getReadGlobals

Element.attrUsedPackages()
	returns com.google.common.collect.ImmutableCollection<WPackage>
	implemented by de.peeeq.wurstscript.attributes.UsedPackages.usedPackages
	
WPackage.attrImportedPackagesTransitive
	returns com.google.common.collect.ImmutableCollection<WPackage>
	implemented by de.peeeq.wurstscript.attributes.InitOrder.importedPackagesTrans
	
WPackage.attrInitDependencies
	returns com.google.common.collect.ImmutableList<WPackage>
	implemented by de.peeeq.wurstscript.attributes.InitOrder.initDependencies

WPackage.attrInitDependenciesTransitive
	returns com.google.common.collect.ImmutableList<WPackage>
	implemented by de.peeeq.wurstscript.attributes.InitOrder.initDependenciesTransitive
	

ExprIntVal.getValI()
	returns int
	implemented by de.peeeq.wurstscript.attributes.IntVal.getValI

Element.description()
	returns String
	implemented by de.peeeq.wurstscript.attributes.Description.description

Element.descriptionHtml()
	returns String
	implemented by de.peeeq.wurstscript.attributes.DescriptionHtml.description
	
TypeExpr.isModuleUseTypeArg()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.isModuleUseTypeArg

Element.isSubtreeOf(Element other)
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.isSubtreeOf
	
TypeParamDef.isStructureDefTypeParam()
	returns boolean
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.isStructureDefTypeParam

	
Element.prettyPrint(de.peeeq.wurstscript.attributes.prettyPrint.Spacer spacer, StringBuilder sb, int indent)
	returns void
	implemented by de.peeeq.wurstscript.attributes.prettyPrint.PrettyPrinter.prettyPrint


NameDef.getName()
    returns String
    implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getName
    
WImport.getPackagename()
	returns String    
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getPackagename
	
	
ExprNewObject.getTypeName()
	returns String    
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getTypeName	

LExpr.getVarName()
	returns String    
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getVarName

FuncRef.getFuncName()
	returns String    
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getFuncName

	
	
ModuleUse.getModuleName()	
	returns String    
	implemented by de.peeeq.wurstscript.attributes.SmallHelpers.getModuleName

SwitchStmt.calculateUnhandledCases()
    returns java.util.List<String>
    implemented by de.peeeq.wurstscript.attributes.SwitchStatements.unhandledCases

SwitchStmt.calculateHandlesAllCases()
    returns boolean
    implemented by de.peeeq.wurstscript.attributes.SwitchStatements.handlesAllCases

Annotation.getAnnotationType()
    returns String
    implemented by de.peeeq.wurstscript.attributes.Annotations.annotationType


Annotation.getAnnotationMessage()
    returns String
    implemented by de.peeeq.wurstscript.attributes.Annotations.annotationMessage
