aboutsummaryrefslogtreecommitdiff
path: root/javaplugin
diff options
context:
space:
mode:
Diffstat (limited to 'javaplugin')
-rw-r--r--javaplugin/build.gradle.kts1
-rw-r--r--javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java13
-rw-r--r--javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java22
3 files changed, 25 insertions, 11 deletions
diff --git a/javaplugin/build.gradle.kts b/javaplugin/build.gradle.kts
index 6982a5a..dc461bc 100644
--- a/javaplugin/build.gradle.kts
+++ b/javaplugin/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
java
idea
+ id("firmament.common")
}
dependencies {
implementation("net.fabricmc:stitch:0.6.2")
diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java
index cb87b20..d45563b 100644
--- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java
+++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/IntermediaryMethodReplacer.java
@@ -31,7 +31,7 @@ public class IntermediaryMethodReplacer extends TreeScanner<Void, Void> {
public void replaceMethodName(JCTree.JCMethodInvocation node) {
var select = node.getMethodSelect();
if (!(select instanceof JCTree.JCFieldAccess fieldAccess)) return;
- if (!fieldAccess.name.contentEquals("methodName")) return;
+ if (!fieldAccess.name.contentEquals("intermediaryMethod")) return;
if (!(node.args.head instanceof JCTree.JCMemberReference methodReference)) {
plugin.utils.reportError(sourceFile, node, "Please provide a Class::method reference directly (and nothing else)");
return;
@@ -43,14 +43,17 @@ public class IntermediaryMethodReplacer extends TreeScanner<Void, Void> {
type.tsym.flatName().toString(),
clearName
);
- fieldAccess.name = plugin.names.fromString("id");
- node.args = List.of(plugin.treeMaker.Literal(intermediaryName));
+ fieldAccess.name = plugin.names.fromString("ofMethod");
+ var args = List.<JCTree.JCExpression>of(plugin.treeMaker.Literal(intermediaryName.interMethodName()));
+ args.tail = List.of(plugin.treeMaker.Literal(intermediaryName.interClassName()));
+ args.tail.tail = node.args.tail;
+ node.args = args;
}
public void replaceClassName(JCTree.JCMethodInvocation node) {
var select = node.getMethodSelect();
if (!(select instanceof JCTree.JCFieldAccess fieldAccess)) return;
- if (!fieldAccess.name.contentEquals("className")) return;
+ if (!fieldAccess.name.contentEquals("intermediaryClass")) return;
if (node.getTypeArguments().size() != 1) {
plugin.utils.reportError(sourceFile, node, "You need to explicitly provide the class you want the intermediary name for");
return;
@@ -63,7 +66,7 @@ public class IntermediaryMethodReplacer extends TreeScanner<Void, Void> {
plugin.utils.reportError(sourceFile, node, "Unknown class name " + sourceName);
return;
}
- fieldAccess.name = plugin.names.fromString("id");
+ fieldAccess.name = plugin.names.fromString("ofIntermediaryClass");
node.typeargs = List.nil();
node.args = List.of(plugin.treeMaker.Literal(mappedName));
}
diff --git a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java
index eef5f9a..36713b6 100644
--- a/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java
+++ b/javaplugin/src/main/java/moe/nea/firmament/javaplugin/MappingTree.java
@@ -18,15 +18,21 @@ public class MappingTree {
if (sourceIndex < 0)
throw new RuntimeException("Could not find source namespace " + sourceNamespace + " in mappings file.");
this.classLookup = tinyV2File
- .getClassEntries()
- .stream()
- .collect(Collectors.toMap(it -> it.getClassNames().get(sourceIndex), it -> it));
+ .getClassEntries()
+ .stream()
+ .collect(Collectors.toMap(it -> it.getClassNames().get(sourceIndex), it -> it));
targetIndex = tinyV2File.getHeader().getNamespaces().indexOf(targetNamespace);
if (targetIndex < 0)
throw new RuntimeException("Could not find target namespace " + targetNamespace + " in mappings file.");
}
- public String resolveMethodToIntermediary(String className, String methodName) {
+ public record MethodCoordinate(
+ String interClassName,
+ String interMethodName
+ ) {
+ }
+
+ public MethodCoordinate resolveMethodToIntermediary(String className, String methodName) {
var classData = classLookup.get(className.replace(".", "/"));
TinyMethod candidate = null;
for (TinyMethod method : classData.getMethods()) {
@@ -37,7 +43,11 @@ public class MappingTree {
candidate = method;
}
}
- return candidate.getMethodNames().get(targetIndex);
+ if (candidate == null)
+ throw new RuntimeException("Couldd not find candidate for method " + className + "." + methodName);
+ return new MethodCoordinate(
+ classData.getClassNames().get(targetIndex),
+ candidate.getMethodNames().get(targetIndex));
}
public String resolveClassToIntermediary(String className) {
@@ -46,6 +56,6 @@ public class MappingTree {
return null;
}
return cls.getClassNames().get(targetIndex)
- .replace("/", ".");
+ .replace("/", ".");
}
}