mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
Make Definition's public API completely static.
TODO: Remove Definition arguments everywhere and hide INSTANCE field!
This commit is contained in:
parent
f5fc60ac67
commit
91f4bba042
@ -41,10 +41,10 @@ public final class AnalyzerCaster {
|
||||
return null;
|
||||
}
|
||||
|
||||
Cast transform = definition.transformsMap.get(cast);
|
||||
Cast transform = Definition.getTransform(cast);
|
||||
|
||||
if (transform == null && explicit) {
|
||||
transform = definition.transformsMap.get(new Cast(actual, expected, false));
|
||||
transform = Definition.getTransform(new Cast(actual, expected, false));
|
||||
}
|
||||
|
||||
if (transform != null) {
|
||||
|
@ -145,7 +145,7 @@ public final class Def {
|
||||
Definition.MethodKey key = new Definition.MethodKey(name, type.parameterCount());
|
||||
// check whitelist for matching method
|
||||
for (Class<?> clazz = receiverClass; clazz != null; clazz = clazz.getSuperclass()) {
|
||||
RuntimeClass struct = definition.runtimeMap.get(clazz);
|
||||
RuntimeClass struct = Definition.getRuntimeClass(clazz);
|
||||
|
||||
if (struct != null) {
|
||||
Method method = struct.methods.get(key);
|
||||
@ -155,7 +155,7 @@ public final class Def {
|
||||
}
|
||||
|
||||
for (final Class<?> iface : clazz.getInterfaces()) {
|
||||
struct = definition.runtimeMap.get(iface);
|
||||
struct = Definition.getRuntimeClass(iface);
|
||||
|
||||
if (struct != null) {
|
||||
Method method = struct.methods.get(key);
|
||||
@ -200,7 +200,7 @@ public final class Def {
|
||||
static MethodHandle lookupGetter(Class<?> receiverClass, String name, Definition definition) {
|
||||
// first try whitelist
|
||||
for (Class<?> clazz = receiverClass; clazz != null; clazz = clazz.getSuperclass()) {
|
||||
RuntimeClass struct = definition.runtimeMap.get(clazz);
|
||||
RuntimeClass struct = Definition.getRuntimeClass(clazz);
|
||||
|
||||
if (struct != null) {
|
||||
MethodHandle handle = struct.getters.get(name);
|
||||
@ -210,7 +210,7 @@ public final class Def {
|
||||
}
|
||||
|
||||
for (final Class<?> iface : clazz.getInterfaces()) {
|
||||
struct = definition.runtimeMap.get(iface);
|
||||
struct = Definition.getRuntimeClass(iface);
|
||||
|
||||
if (struct != null) {
|
||||
MethodHandle handle = struct.getters.get(name);
|
||||
@ -271,7 +271,7 @@ public final class Def {
|
||||
static MethodHandle lookupSetter(Class<?> receiverClass, String name, Definition definition) {
|
||||
// first try whitelist
|
||||
for (Class<?> clazz = receiverClass; clazz != null; clazz = clazz.getSuperclass()) {
|
||||
RuntimeClass struct = definition.runtimeMap.get(clazz);
|
||||
RuntimeClass struct = Definition.getRuntimeClass(clazz);
|
||||
|
||||
if (struct != null) {
|
||||
MethodHandle handle = struct.setters.get(name);
|
||||
@ -281,7 +281,7 @@ public final class Def {
|
||||
}
|
||||
|
||||
for (final Class<?> iface : clazz.getInterfaces()) {
|
||||
struct = definition.runtimeMap.get(iface);
|
||||
struct = Definition.getRuntimeClass(iface);
|
||||
|
||||
if (struct != null) {
|
||||
MethodHandle handle = struct.setters.get(name);
|
||||
|
@ -47,29 +47,29 @@ public final class Definition {
|
||||
public static final Definition INSTANCE = new Definition(new Definition());
|
||||
|
||||
/** Some native types as constants: */
|
||||
public static final Type voidType = INSTANCE.getType("void");
|
||||
public static final Type booleanType = INSTANCE.getType("boolean");
|
||||
public static final Type booleanobjType = INSTANCE.getType("Boolean");
|
||||
public static final Type byteType = INSTANCE.getType("byte");
|
||||
public static final Type byteobjType = INSTANCE.getType("Byte");
|
||||
public static final Type shortType = INSTANCE.getType("short");
|
||||
public static final Type shortobjType = INSTANCE.getType("Short");
|
||||
public static final Type intType = INSTANCE.getType("int");
|
||||
public static final Type intobjType = INSTANCE.getType("Integer");
|
||||
public static final Type longType = INSTANCE.getType("long");
|
||||
public static final Type longobjType = INSTANCE.getType("Long");
|
||||
public static final Type floatType = INSTANCE.getType("float");
|
||||
public static final Type floatobjType = INSTANCE.getType("Float");
|
||||
public static final Type doubleType = INSTANCE.getType("double");
|
||||
public static final Type doubleobjType = INSTANCE.getType("Double");
|
||||
public static final Type charType = INSTANCE.getType("char");
|
||||
public static final Type charobjType = INSTANCE.getType("Character");
|
||||
public static final Type objectType = INSTANCE.getType("Object");
|
||||
public static final Type defType = INSTANCE.getType("def");
|
||||
public static final Type defobjType = INSTANCE.getType("Def");
|
||||
public static final Type stringType = INSTANCE.getType("String");
|
||||
public static final Type exceptionType = INSTANCE.getType("Exception");
|
||||
public static final Type utilityType = INSTANCE.getType("Utility");
|
||||
public static final Type voidType = getType("void");
|
||||
public static final Type booleanType = getType("boolean");
|
||||
public static final Type booleanobjType = getType("Boolean");
|
||||
public static final Type byteType = getType("byte");
|
||||
public static final Type byteobjType = getType("Byte");
|
||||
public static final Type shortType = getType("short");
|
||||
public static final Type shortobjType = getType("Short");
|
||||
public static final Type intType = getType("int");
|
||||
public static final Type intobjType = getType("Integer");
|
||||
public static final Type longType = getType("long");
|
||||
public static final Type longobjType = getType("Long");
|
||||
public static final Type floatType = getType("float");
|
||||
public static final Type floatobjType = getType("Float");
|
||||
public static final Type doubleType = getType("double");
|
||||
public static final Type doubleobjType = getType("Double");
|
||||
public static final Type charType = getType("char");
|
||||
public static final Type charobjType = getType("Character");
|
||||
public static final Type objectType = getType("Object");
|
||||
public static final Type defType = getType("def");
|
||||
public static final Type defobjType = getType("Def");
|
||||
public static final Type stringType = getType("String");
|
||||
public static final Type exceptionType = getType("Exception");
|
||||
public static final Type utilityType = getType("Utility");
|
||||
|
||||
public enum Sort {
|
||||
VOID( void.class , 0 , true , false , false , false ),
|
||||
@ -394,8 +394,29 @@ public final class Definition {
|
||||
}
|
||||
}
|
||||
|
||||
final Map<Cast, Cast> transformsMap;
|
||||
final Map<Class<?>, RuntimeClass> runtimeMap;
|
||||
|
||||
/** Gets the type given by its name */
|
||||
public static Type getType(final String name) {
|
||||
return INSTANCE.getTypeInternal(name);
|
||||
}
|
||||
|
||||
/** Creates an array type from the given Struct. */
|
||||
public static Type getType(final Struct struct, final int dimensions) {
|
||||
return INSTANCE.getTypeInternal(struct, dimensions);
|
||||
}
|
||||
|
||||
public static RuntimeClass getRuntimeClass(Class<?> clazz) {
|
||||
return INSTANCE.runtimeMap.get(clazz);
|
||||
}
|
||||
|
||||
public static Cast getTransform(Cast cast) {
|
||||
return INSTANCE.transformsMap.get(cast);
|
||||
}
|
||||
|
||||
// INTERNAL IMPLEMENTATION:
|
||||
|
||||
private final Map<Cast, Cast> transformsMap;
|
||||
private final Map<Class<?>, RuntimeClass> runtimeMap;
|
||||
private final Map<String, Struct> structsMap;
|
||||
private final Map<String, Type> simpleTypesMap;
|
||||
|
||||
@ -531,26 +552,26 @@ public final class Definition {
|
||||
}
|
||||
|
||||
private void addTransforms() {
|
||||
Type booleanType = getType("boolean");
|
||||
Type objectType = getType("Object");
|
||||
Type defType = getType("def");
|
||||
Type booleanobjType = getType("Boolean");
|
||||
Type byteType = getType("byte");
|
||||
Type shortType = getType("short");
|
||||
Type intType = getType("int");
|
||||
Type charType = getType("char");
|
||||
Type longType = getType("long");
|
||||
Type floatType = getType("float");
|
||||
Type doubleType = getType("double");
|
||||
Type numberType = getType("Number");
|
||||
Type byteobjType = getType("Byte");
|
||||
Type shortobjType = getType("Short");
|
||||
Type charobjType = getType("Character");
|
||||
Type intobjType = getType("Integer");
|
||||
Type longobjType = getType("Long");
|
||||
Type floatobjType = getType("Float");
|
||||
Type doubleobjType = getType("Double");
|
||||
Type stringType = getType("String");
|
||||
Type booleanType = getTypeInternal("boolean");
|
||||
Type objectType = getTypeInternal("Object");
|
||||
Type defType = getTypeInternal("def");
|
||||
Type booleanobjType = getTypeInternal("Boolean");
|
||||
Type byteType = getTypeInternal("byte");
|
||||
Type shortType = getTypeInternal("short");
|
||||
Type intType = getTypeInternal("int");
|
||||
Type charType = getTypeInternal("char");
|
||||
Type longType = getTypeInternal("long");
|
||||
Type floatType = getTypeInternal("float");
|
||||
Type doubleType = getTypeInternal("double");
|
||||
Type numberType = getTypeInternal("Number");
|
||||
Type byteobjType = getTypeInternal("Byte");
|
||||
Type shortobjType = getTypeInternal("Short");
|
||||
Type charobjType = getTypeInternal("Character");
|
||||
Type intobjType = getTypeInternal("Integer");
|
||||
Type longobjType = getTypeInternal("Long");
|
||||
Type floatobjType = getTypeInternal("Float");
|
||||
Type doubleobjType = getTypeInternal("Double");
|
||||
Type stringType = getTypeInternal("String");
|
||||
|
||||
addTransform(booleanType, objectType, "Boolean", "valueOf", true, false);
|
||||
addTransform(booleanType, defType, "Boolean", "valueOf", true, false);
|
||||
@ -848,7 +869,7 @@ public final class Definition {
|
||||
final Struct struct = new Struct(name, clazz, org.objectweb.asm.Type.getType(clazz));
|
||||
|
||||
structsMap.put(name, struct);
|
||||
simpleTypesMap.put(name, getType(name));
|
||||
simpleTypesMap.put(name, getTypeInternal(name));
|
||||
}
|
||||
|
||||
private final void addConstructorInternal(final String struct, final String name, final Type[] args) {
|
||||
@ -919,7 +940,7 @@ public final class Definition {
|
||||
throw new IllegalArgumentException("Malformed signature: " + signature);
|
||||
}
|
||||
// method or field type (e.g. return type)
|
||||
Type rtn = getType(elements[0]);
|
||||
Type rtn = getTypeInternal(elements[0]);
|
||||
int parenIndex = elements[1].indexOf('(');
|
||||
if (parenIndex != -1) {
|
||||
// method or ctor
|
||||
@ -929,7 +950,7 @@ public final class Definition {
|
||||
String arguments[] = elements[1].substring(parenIndex + 1, parenEnd).split(",");
|
||||
args = new Type[arguments.length];
|
||||
for (int i = 0; i < arguments.length; i++) {
|
||||
args[i] = getType(arguments[i]);
|
||||
args[i] = getTypeInternal(arguments[i]);
|
||||
}
|
||||
} else {
|
||||
args = new Type[0];
|
||||
@ -1275,7 +1296,7 @@ public final class Definition {
|
||||
|
||||
if (!owner.clazz.isAssignableFrom(from.clazz)) {
|
||||
if (from.clazz.isAssignableFrom(owner.clazz)) {
|
||||
upcast = getType(owner.name);
|
||||
upcast = getTypeInternal(owner.name);
|
||||
} else {
|
||||
throw new ClassCastException("Transform with owner struct [" + owner.name + "]" +
|
||||
" and cast type from [" + from.name + "] to cast type to [" + to.name + "] using" +
|
||||
@ -1351,7 +1372,7 @@ public final class Definition {
|
||||
runtimeMap.put(struct.clazz, new RuntimeClass(methods, getters, setters));
|
||||
}
|
||||
|
||||
public final Type getType(final String name) {
|
||||
private Type getTypeInternal(final String name) {
|
||||
// simple types (e.g. 0 array dimensions) are a simple hash lookup for speed
|
||||
Type simple = simpleTypesMap.get(name);
|
||||
if (simple != null) {
|
||||
@ -1365,10 +1386,10 @@ public final class Definition {
|
||||
throw new IllegalArgumentException("The struct with name [" + name + "] has not been defined.");
|
||||
}
|
||||
|
||||
return getType(struct, dimensions);
|
||||
return getTypeInternal(struct, dimensions);
|
||||
}
|
||||
|
||||
public final Type getType(final Struct struct, final int dimensions) {
|
||||
private Type getTypeInternal(final Struct struct, final int dimensions) {
|
||||
String name = struct.name;
|
||||
org.objectweb.asm.Type type = struct.type;
|
||||
Class<?> clazz = struct.clazz;
|
||||
|
@ -182,7 +182,7 @@ public final class Variables {
|
||||
final Type type;
|
||||
|
||||
try {
|
||||
type = definition.getType(typestr);
|
||||
type = Definition.getType(typestr);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException("Error " + location + ": Not a type [" + typestr + "].");
|
||||
}
|
||||
@ -190,7 +190,7 @@ public final class Variables {
|
||||
boolean legal = !name.contains("<");
|
||||
|
||||
try {
|
||||
definition.getType(name);
|
||||
Definition.getType(name);
|
||||
legal = false;
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
// Do nothing.
|
||||
|
@ -42,7 +42,7 @@ public final class EExplicit extends AExpression {
|
||||
@Override
|
||||
void analyze(final CompilerSettings settings, final Definition definition, final Variables variables) {
|
||||
try {
|
||||
actual = definition.getType(this.type);
|
||||
actual = Definition.getType(this.type);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException(error("Not a type [" + this.type + "]."));
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public final class LBrace extends ALink {
|
||||
index.analyze(settings, definition, variables);
|
||||
index = index.cast(settings, definition, variables);
|
||||
|
||||
after = definition.getType(before.struct, before.dimensions - 1);
|
||||
after = Definition.getType(before.struct, before.dimensions - 1);
|
||||
|
||||
return this;
|
||||
} else if (sort == Sort.DEF) {
|
||||
|
@ -50,7 +50,7 @@ public final class LCast extends ALink {
|
||||
}
|
||||
|
||||
try {
|
||||
after = definition.getType(type);
|
||||
after = Definition.getType(type);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException(error("Not a type [" + type + "]."));
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public final class LNewArray extends ALink {
|
||||
final Type type;
|
||||
|
||||
try {
|
||||
type = definition.getType(this.type);
|
||||
type = Definition.getType(this.type);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException(error("Not a type [" + this.type + "]."));
|
||||
}
|
||||
@ -68,7 +68,7 @@ public final class LNewArray extends ALink {
|
||||
arguments.set(argument, expression.cast(settings, definition, variables));
|
||||
}
|
||||
|
||||
after = definition.getType(type.struct, arguments.size());
|
||||
after = Definition.getType(type.struct, arguments.size());
|
||||
|
||||
return this;
|
||||
}
|
||||
@ -87,7 +87,7 @@ public final class LNewArray extends ALink {
|
||||
if (arguments.size() > 1) {
|
||||
adapter.visitMultiANewArrayInsn(after.type.getDescriptor(), after.type.getDimensions());
|
||||
} else {
|
||||
adapter.newArray(definition.getType(after.struct, 0).type);
|
||||
adapter.newArray(Definition.getType(after.struct, 0).type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,7 +57,7 @@ public final class LNewObj extends ALink {
|
||||
final Type type;
|
||||
|
||||
try {
|
||||
type = definition.getType(this.type);
|
||||
type = Definition.getType(this.type);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException(error("Not a type [" + this.type + "]."));
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ public final class LVariable extends ALink {
|
||||
Type type = null;
|
||||
|
||||
try {
|
||||
type = definition.getType(name);
|
||||
type = Definition.getType(name);
|
||||
} catch (final IllegalArgumentException exception) {
|
||||
// Do nothing.
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user