blob: 0b2364a81aca58bf8d768887c2b99daf34ebb4b5 [file] [log] [blame] [raw]
/*
* $Id: JavaReflector.java 38 2012-01-04 22:44:15Z andre@naef.com $
* See LICENSE.txt for license terms.
*/
package com.naef.jnlua;
/**
* Reflects Java objects for access from Lua.
*
* <p>
* The interface can be implemented to provide a generic Java reflector that is
* then configured in a Lua state. It can also be implemented by individual Java
* classes to provide class-specific Java reflection. If an object implements
* the Java reflector interface, its own Java reflector is queried first for a
* requested metamethod. Only if the metamethod requested is not supported, the
* Java reflector configured in the Lua state is queried.
* </p>
*/
public interface JavaReflector {
/**
* Returns the metamethod implementation of this Java reflector for the
* specified metamethod. If this reflector does not support the metamethod,
* the method returns <code>null</code>.
*
* @param metamethod
* the metamethod
* @return the implementation, or <code>null</code> if this Java reflector
* does not support the metamethod
*/
public JavaFunction getMetamethod(Metamethod metamethod);
// -- Nested types
/**
* Lua metamethod.
*/
public enum Metamethod {
/**
* <code>__index</code> metamethod.
*/
INDEX,
/**
* <code>__newindex</code> metamethod.
*/
NEWINDEX,
/**
* <code>__len</code> metamethod.
*/
LEN,
/**
* <code>__eq</code> metamethod.
*/
EQ,
/**
* <code>__lt</code> metamethod.
*/
LT,
/**
* <code>__le</code> metamethod.
*/
LE,
/**
* <code>__unm</code> metamethod.
*/
UNM,
/**
* <code>__add</code> metamethod.
*/
ADD,
/**
* <code>__sub</code> metamethod.
*/
SUB,
/**
* <code>__mul</code> metamethod.
*/
MUL,
/**
* <code>__div</code> metamethod.
*/
DIV,
/**
* <code>__mod</code> metamethod.
*/
MOD,
/**
* <code>__pow</code> metamethod.
*/
POW,
/**
* <code>__concat</code> metamethod.
*/
CONCAT,
/**
* <code>__call</code> metamethod.
*/
CALL,
/**
* <code>__tostring</code> metamethod.
*/
TOSTRING,
/**
* <code>__pairs</code> metamethod,
*/
PAIRS,
/**
* <code>__ipairs</code> metamethod,
*/
IPAIRS,
/**
* <code>__javafields</code> metamethod.
*/
JAVAFIELDS,
/**
* <code>__javamethods</code> metamethod.
*/
JAVAMETHODS,
/**
* <code>__javaproperties</code> metamethod.
*/
JAVAPROPERTIES;
// -- Operations
/**
* Returns the Lua metamethod name.
*
* @return the metamethod name
*/
public String getMetamethodName() {
return "__" + toString().toLowerCase();
}
};
}