package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangList;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangTuple;
import org.elixir_lang.Macro;
/**
* Module definition wrapping a `defmodule` call PSIElement.
*/
public class ModuleDefinition {
/*
* Public Fields
*/
public final Quotable defmodule;
/*
* Constructors
*/
public ModuleDefinition(Quotable defmodule){
this.defmodule = defmodule;
}
public String name() {
OtpErlangTuple quotedDefmodule = (OtpErlangTuple) defmodule.quote();
OtpErlangList callArguments = Macro.callArguments(quotedDefmodule);
// Alias + block
assert callArguments.arity() == 2;
OtpErlangObject quotedName = callArguments.elementAt(0);
// TODO handle other forms for module names
assert Macro.isAliases(quotedName);
return Macro.toString(quotedName);
}
public String fullyQualifiedName(){
return "Elixir." + name();
}
}