Skip to content

Commit

Permalink
Exposed some JavaMembers methods, removed Fabric API dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
LatvianModder committed Mar 25, 2022
1 parent da4b457 commit 49d35c3
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 29 deletions.
35 changes: 13 additions & 22 deletions common/src/main/java/dev/latvian/mods/rhino/JavaMembers.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class JavaMembers {
}
}

boolean has(String name, boolean isStatic) {
public boolean has(String name, boolean isStatic) {
Map<String, Object> ht = isStatic ? staticMembers : members;
Object obj = ht.get(name);
if (obj != null) {
Expand All @@ -58,7 +58,7 @@ boolean has(String name, boolean isStatic) {
return findExplicitFunction(name, isStatic) != null;
}

Object get(Scriptable scope, String name, Object javaObject, boolean isStatic) {
public Object get(Scriptable scope, String name, Object javaObject, boolean isStatic) {
Map<String, Object> ht = isStatic ? staticMembers : members;
Object member = ht.get(name);
if (!isStatic && member == null) {
Expand Down Expand Up @@ -97,7 +97,7 @@ Object get(Scriptable scope, String name, Object javaObject, boolean isStatic) {
return cx.getWrapFactory().wrap(cx, scope, rval, type);
}

void put(Scriptable scope, String name, Object javaObject, Object value, boolean isStatic) {
public void put(Scriptable scope, String name, Object javaObject, Object value, boolean isStatic) {
Map<String, Object> ht = isStatic ? staticMembers : members;
Object member = ht.get(name);
if (!isStatic && member == null) {
Expand Down Expand Up @@ -155,12 +155,12 @@ void put(Scriptable scope, String name, Object javaObject, Object value, boolean
}
}

Object[] getIds(boolean isStatic) {
public Object[] getIds(boolean isStatic) {
Map<String, Object> map = isStatic ? staticMembers : members;
return map.keySet().toArray(ScriptRuntime.emptyArgs);
}

static String javaSignature(Class<?> type) {
public static String javaSignature(Class<?> type) {
if (!type.isArray()) {
return type.getName();
}
Expand All @@ -184,7 +184,7 @@ static String javaSignature(Class<?> type) {
return sb.toString();
}

static String liveConnectSignature(Class<?>[] argTypes) {
public static String liveConnectSignature(Class<?>[] argTypes) {
int N = argTypes.length;
if (N == 0) {
return "()";
Expand Down Expand Up @@ -276,7 +276,7 @@ private Object getExplicitFunction(Scriptable scope, String name, Object javaObj
* interfaces (if they exist). Basically upcasts every method to the
* nearest accessible method.
*/
private static Map<MethodSignature, Method> discoverAccessibleMethods(Class<?> clazz, boolean includeProtected, boolean includePrivate) {
public static Map<MethodSignature, Method> discoverAccessibleMethods(Class<?> clazz, boolean includeProtected, boolean includePrivate) {
Map<MethodSignature, Method> map = new HashMap<>();
discoverAccessibleMethods(clazz, map, includeProtected, includePrivate);
return map;
Expand Down Expand Up @@ -347,25 +347,17 @@ private static void discoverAccessibleMethods(Class<?> clazz, Map<MethodSignatur

private static void addMethod(Map<MethodSignature, Method> map, Method method) throws SecurityException {
if (!method.isAnnotationPresent(HideFromJS.class)) {
MethodSignature sig = new MethodSignature(method.getName(), method.getParameterTypes());
MethodSignature sig = new MethodSignature(method.getName(), method.getParameterCount() == 0 ? MethodSignature.NO_ARGS : method.getParameterTypes());
// Array may contain methods with same signature but different return value!
if (!map.containsKey(sig)) {
map.put(sig, method);
}
}
}

private static final class MethodSignature {
public record MethodSignature(String name, Class<?>[] args) {
private static final Class<?>[] NO_ARGS = new Class<?>[0];

private final String name;
private final Class<?>[] args;

private MethodSignature(String name, Class<?>[] args) {
this.name = name;
this.args = args;
}

@Override
public boolean equals(Object o) {
if (o instanceof MethodSignature ms) {
Expand Down Expand Up @@ -593,7 +585,7 @@ private void reflect(Context cx, Scriptable scope, boolean includeProtected, boo
ctors = new NativeJavaMethod(ctorMembers, cl.getSimpleName());
}

private List<Constructor<?>> getAccessibleConstructors(boolean includePrivate) {
public List<Constructor<?>> getAccessibleConstructors(boolean includePrivate) {
// The JVM currently doesn't allow changing access on java.lang.Class
// constructors, so don't try
if (cl == ScriptRuntime.ClassClass) {
Expand Down Expand Up @@ -621,7 +613,7 @@ private List<Constructor<?>> getAccessibleConstructors(boolean includePrivate) {
return constructorsList;
}

private List<Field> getAccessibleFields(boolean includeProtected, boolean includePrivate) {
public List<Field> getAccessibleFields(boolean includeProtected, boolean includePrivate) {
List<Field> fieldsList = new ArrayList<>();

try {
Expand Down Expand Up @@ -727,7 +719,7 @@ private static MemberBox extractSetMethod(MemberBox[] methods, boolean isStatic)
return null;
}

Map<String, FieldAndMethods> getFieldAndMethodsObjects(Scriptable scope, Object javaObject, boolean isStatic) {
public Map<String, FieldAndMethods> getFieldAndMethodsObjects(Scriptable scope, Object javaObject, boolean isStatic) {
Map<String, FieldAndMethods> ht = isStatic ? staticFieldAndMethods : fieldAndMethods;
if (ht == null) {
return null;
Expand All @@ -742,9 +734,8 @@ Map<String, FieldAndMethods> getFieldAndMethodsObjects(Scriptable scope, Object
return result;
}

static JavaMembers lookupClass(Scriptable scope, Class<?> dynamicType, Class<?> staticType, boolean includeProtected) {
public static JavaMembers lookupClass(ClassCache cache, Class<?> dynamicType, Class<?> staticType, boolean includeProtected) {
JavaMembers members;
ClassCache cache = ClassCache.get(scope);
Map<Class<?>, JavaMembers> ct = cache.getClassCacheMap();

Class<?> cl = dynamicType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public NativeJavaClass(Scriptable scope, Class<?> cl, boolean isAdapter) {
@Override
protected void initMembers() {
Class<?> cl = (Class<?>) javaObject;
members = JavaMembers.lookupClass(parent, cl, cl, isAdapter);
members = JavaMembers.lookupClass(ClassCache.get(parent), cl, cl, isAdapter);
staticFieldAndMethods = members.getFieldAndMethodsObjects(this, cl, true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ protected void initMembers() {
} else {
dynamicType = staticType;
}
members = JavaMembers.lookupClass(parent, dynamicType, staticType, isAdapter);
members = JavaMembers.lookupClass(ClassCache.get(parent), dynamicType, staticType, isAdapter);
fieldAndMethods = members.getFieldAndMethodsObjects(this, javaObject, false);
customMembers = null;
}
Expand Down
5 changes: 1 addition & 4 deletions fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ artifacts {

dependencies {
modImplementation("net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}")
modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}")

common(project(path: ":common", configuration: "dev")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
Expand Down Expand Up @@ -70,10 +69,8 @@ if (ENV.CURSEFORGE_KEY) {
addGameVersion "Fabric"
addGameVersion "1.18"
addGameVersion "1.18.1"
addGameVersion "1.18.2"
mainArtifact(remapJar.archivePath)
relations {
requiredDependency 'fabric-api'
}
changelog = getGitChangelog
changelogType = 'markdown'
}
Expand Down
1 change: 1 addition & 0 deletions forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ if (ENV.CURSEFORGE_KEY) {
addGameVersion "Forge"
addGameVersion "1.18"
addGameVersion "1.18.1"
addGameVersion "1.18.2"
mainArtifact(remapJar.archivePath)
changelog = getGitChangelog
changelogType = 'markdown'
Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ curseforge_id_fabric=416294
curseforge_type=beta
minecraft_version=1.18.1
fabric_loader_version=0.12.6
fabric_api_version=0.43.1+1.18
forge_version=39.0.+

0 comments on commit 49d35c3

Please sign in to comment.