Skip to content

Commit 408b0d9

Browse files
committed
add info for @OnlyIn side only marker
1 parent 8c421c7 commit 408b0d9

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

src/main/java/zzzank/probejs/lang/java/base/AnnotationHolder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.lang.annotation.Annotation;
99
import java.util.Arrays;
1010
import java.util.List;
11+
import java.util.Optional;
1112
import java.util.stream.Collectors;
1213

1314
public class AnnotationHolder {
@@ -43,4 +44,8 @@ public <T extends Annotation> T getAnnotation(Class<T> type) {
4344
}
4445
return null;
4546
}
47+
48+
public <T extends Annotation> Optional<T> getAnnotationOptional(Class<T> type) {
49+
return Optional.ofNullable(getAnnotation(type));
50+
}
4651
}

src/main/java/zzzank/probejs/lang/transpiler/transformation/impl/InjectAnnotation.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.latvian.mods.rhino.annotations.typing.JSInfo;
44
import dev.latvian.mods.rhino.annotations.typing.JSParams;
55
import lombok.val;
6+
import net.minecraftforge.api.distmarker.OnlyIn;
67
import zzzank.probejs.features.rhizo.RhizoState;
78
import zzzank.probejs.lang.java.base.AnnotationHolder;
89
import zzzank.probejs.lang.java.clazz.Clazz;
@@ -30,17 +31,16 @@ public void transformMethod(Clazz clazz, MethodInfo methodInfo, MethodDecl decl)
3031
applyInfo(methodInfo, decl);
3132
applyDeprecated(methodInfo, decl);
3233
applyJSParams(methodInfo, decl.params);
34+
applySideOnly(methodInfo, decl);
3335

3436
if (RhizoState.INFO_ANNOTATION) {
3537
val paramLines = methodInfo.params.stream()
3638
.filter(p -> p.hasAnnotation(JSInfo.class))
3739
.map(p -> String.format("@param %s - %s", p.name, p.getAnnotation(JSInfo.class).value()))
38-
.collect(Collectors.toList());
39-
if (!paramLines.isEmpty()) {
40+
.toArray(String[]::new);
41+
if (paramLines.length != 0) {
4042
decl.linebreak();
41-
for (String line : paramLines) {
42-
decl.addComment(line);
43-
}
43+
decl.addComment(paramLines);
4444
}
4545
}
4646
}
@@ -49,13 +49,15 @@ public void transformMethod(Clazz clazz, MethodInfo methodInfo, MethodDecl decl)
4949
public void transformField(Clazz clazz, FieldInfo fieldInfo, FieldDecl decl) {
5050
applyInfo(fieldInfo, decl);
5151
applyDeprecated(fieldInfo, decl);
52+
applySideOnly(fieldInfo, decl);
5253
}
5354

5455
@Override
5556
public void transformConstructor(Clazz clazz, ConstructorInfo constructorInfo, ConstructorDecl decl) {
5657
applyInfo(constructorInfo, decl);
5758
applyDeprecated(constructorInfo, decl);
5859
applyJSParams(constructorInfo, decl.params);
60+
applySideOnly(constructorInfo, decl);
5961
}
6062

6163
public void applyDeprecated(AnnotationHolder info, CommentableCode decl) {
@@ -94,4 +96,19 @@ public void applyJSParams(AnnotationHolder parent, Collection<ParamDecl> params)
9496
}
9597
}
9698
}
99+
100+
public void applySideOnly(AnnotationHolder target, CommentableCode decl) {
101+
val dist = target.getAnnotationOptional(OnlyIn.class)
102+
.map(OnlyIn::value)
103+
.orElse(null);
104+
if (dist == null) {
105+
return;
106+
}
107+
decl.linebreak();
108+
if (dist.isClient()) {
109+
decl.addComment("Client only, do not use in server scripts");
110+
} else if (dist.isDedicatedServer()) {
111+
decl.addComment("Server only, do not use in client scripts");
112+
}
113+
}
97114
}

0 commit comments

Comments
 (0)