gdxapp4d/gdxapp4d-lib-bassboonyd/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᒃᣔᒃᓫᒻ/BabelLocalizer邪ᙾ.java

75 lines
2.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᒃᣔᒃᓫᒻ;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.reflect.Method;
import java.security.ProtectionDomain;
import java.util.Optional;
import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.DefaultBȍőnLoader;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class BabelLocalizer邪ᙾ implements ClassFileTransformer {
// not tested
@Override
public byte[] transform(Module module, ClassLoader loader, String className,
Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException {
if (!BabelLocalizer.class.isAssignableFrom(classBeingRedefined)) {
return null;
}
// xxxᴬᵖᶦ objects
for (Class<?> embeddedClass:classBeingRedefined.getDeclaredClasses()) {
// todo: check declared class, like this ?
if (Babelizeբ.ẞType.ẞTowerᴬᵖᶦ.class.isAssignableFrom(classBeingRedefined) && Babelizeբ.ẞTower.ẞƉěḭȵᶒMethodᴬᵖᶦ.class.isAssignableFrom(embeddedClass)) {
// check B
}
if (Babelizeբ.ẞTower.ẞƉěḭȵᶒMethodᴬᵖᶦ.class.isAssignableFrom(classBeingRedefined) && Babelizeբ.ẞTower.ẞTower抽.class.isAssignableFrom(embeddedClass)) {
// check T
}
}
// babel translated object interfaces
Optional<Class<?>> checkMethodNameInterface = DefaultBȍőnLoader.findInterfaceByAnnotation(classBeingRedefined, BabelMethodNameEnforcer注.class);
if (checkMethodNameInterface.isEmpty()) {
return null;
}
BabelMethodNameEnforcer注 checkMethodName = checkMethodNameInterface.get().getAnnotation(BabelMethodNameEnforcer注.class);
if (checkMethodName == null) {
return null;
}
for (Method m:classBeingRedefined.getMethods()) {
if (m.getName().startsWith("toBabel")) {
continue;
}
boolean def = false;
for (Method mo:Object.class.getMethods()) { // java is evil, junk default methods....
if (m.getName().equals(mo.getName())) {
def = true;
break;
}
}
if (def) {
continue;
}
for (int c:m.getName().codePoints().toArray()) {
boolean allow = false;
for (BabelMethodNameRange注 range:checkMethodName.ranges()) {
if (c >= range.start() || c <= range.stop()) {
allow = true;
break;
}
}
if (!allow) {
throw new IllegalClassFormatException("Illegal unicode char in method name: "+m);
}
}
}
return null;
}
}