/* | |
* $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(); | |
} | |
}; | |
} |