//generated by abstract-syntax-gen
package de.peeeq.wurstscript.luaAst;
import java.util.*;

public interface LuaDefinition extends LuaStatement, Element{
    void setName(String name);
    String getName();
    Element getParent();
    <T> T match(Matcher<T> s);
    void match(MatcherVoid s);
    public interface Matcher<T> {
        T case_LuaFunction(LuaFunction luaFunction);
        T case_LuaMethod(LuaMethod luaMethod);
        T case_LuaVariable(LuaVariable luaVariable);
    }

    public interface MatcherVoid {
        void case_LuaFunction(LuaFunction luaFunction);
        void case_LuaMethod(LuaMethod luaMethod);
        void case_LuaVariable(LuaVariable luaVariable);
    }

    LuaDefinition copy();
    LuaDefinition copyWithRefs();
    /** */
    public abstract void print(StringBuilder sb, int indent);
}