Skip to content

Commit 435aecd

Browse files
committed
コンストラクタ・フィールドなど追加
1 parent eda12a4 commit 435aecd

39 files changed

+1255
-207
lines changed

src/main/java/dev/toapuro/kubeextra/Test.java

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 78 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,97 @@
11
package dev.toapuro.kubeextra.claasgen;
22

3+
import dev.latvian.mods.rhino.BaseFunction;
34
import dev.toapuro.kubeextra.claasgen.annotation.KubeAnnotation;
5+
import dev.toapuro.kubeextra.claasgen.kubejs.KubeConstructor;
6+
import dev.toapuro.kubeextra.claasgen.kubejs.KubeField;
7+
import dev.toapuro.kubeextra.claasgen.kubejs.callback.InstantFunction;
8+
import javassist.CtClass;
49

10+
import javax.annotation.Nullable;
511
import java.util.ArrayList;
612
import java.util.List;
713

814
public class KubeClass {
15+
private final String fqcn;
916
private final String className;
17+
private final List<InstantFunction> instants;
18+
private final List<KubeField> fields;
1019
private final List<KubeMethod> methods;
20+
private final List<KubeConstructor> constructors;
1121
private final List<KubeAnnotation> annotations;
12-
private boolean hasEmptyConstructor;
22+
private final List<CtClass> implementsClasses;
23+
@Nullable
24+
private CtClass superClass;
25+
private int modifiers;
1326

14-
public KubeClass(String className) {
27+
public KubeClass(String fqcn, String className) {
28+
this.fqcn = fqcn;
1529
this.className = className;
16-
this.hasEmptyConstructor = false;
30+
this.superClass = null;
31+
32+
this.modifiers = 0;
33+
this.instants = new ArrayList<>();
34+
this.fields = new ArrayList<>();
1735
this.methods = new ArrayList<>();
1836
this.annotations = new ArrayList<>();
37+
this.constructors = new ArrayList<>();
38+
this.implementsClasses = new ArrayList<>();
39+
}
40+
41+
public InstantFunction addInstantFunction(BaseFunction instant) {
42+
InstantFunction instantFunction = new InstantFunction(className, instant.size(), instant);
43+
this.instants.add(instantFunction);
44+
return instantFunction;
1945
}
2046

2147
public void addAnnotation(KubeAnnotation annotation) {
2248
this.annotations.add(annotation);
2349
}
2450

51+
public void addField(KubeField kubeField) {
52+
this.fields.add(kubeField);
53+
}
54+
55+
public void addConstructor(KubeConstructor kubeConstructor) {
56+
this.constructors.add(kubeConstructor);
57+
}
58+
59+
public void addImplementsClass(CtClass implementsClass) {
60+
this.implementsClasses.add(implementsClass);
61+
}
62+
2563
public void addMethod(KubeMethod kubeMethod) {
2664
this.methods.add(kubeMethod);
2765
}
2866

67+
public String getFqcn() {
68+
return fqcn;
69+
}
70+
71+
public List<InstantFunction> getInstants() {
72+
return instants;
73+
}
74+
75+
public List<KubeField> getFields() {
76+
return fields;
77+
}
78+
2979
public String getClassName() {
3080
return className;
3181
}
3282

83+
public List<KubeConstructor> getConstructors() {
84+
return constructors;
85+
}
86+
87+
public int getModifiers() {
88+
return modifiers;
89+
}
90+
91+
public void setModifiers(int modifiers) {
92+
this.modifiers = modifiers;
93+
}
94+
3395
public List<KubeMethod> getMethods() {
3496
return methods;
3597
}
@@ -38,11 +100,20 @@ public List<KubeAnnotation> getAnnotations() {
38100
return annotations;
39101
}
40102

41-
public boolean hasEmptyConstructor() {
42-
return hasEmptyConstructor;
103+
public boolean hasSuperClass() {
104+
return superClass != null;
105+
}
106+
107+
@Nullable
108+
public CtClass getSuperClass() {
109+
return superClass;
110+
}
111+
112+
public void setSuperClass(@Nullable CtClass superClass) {
113+
this.superClass = superClass;
43114
}
44115

45-
public void setHasEmptyConstructor(boolean emptyConstructor) {
46-
this.hasEmptyConstructor = emptyConstructor;
116+
public List<CtClass> getImplementsClasses() {
117+
return implementsClasses;
47118
}
48119
}

src/main/java/dev/toapuro/kubeextra/claasgen/KubeMethod.java

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,66 @@
22

33
import dev.latvian.mods.rhino.BaseFunction;
44
import dev.toapuro.kubeextra.claasgen.annotation.KubeAnnotation;
5-
import dev.toapuro.kubeextra.claasgen.parameter.MethodParameterTypes;
5+
import dev.toapuro.kubeextra.claasgen.arguments.MethodParameterTypes;
66
import javassist.CtClass;
77

8+
import java.util.ArrayList;
89
import java.util.List;
910

10-
public record KubeMethod(KubeClass parentClass, String methodName, List<KubeAnnotation> annotations,
11-
CtClass returnType, MethodParameterTypes parameters, int modifiers, BaseFunction implCallback) {
11+
public class KubeMethod {
12+
private final KubeClass parentClass;
13+
private final String methodName;
14+
private final String descriptor;
15+
private final List<KubeAnnotation> annotations;
16+
private final CtClass returnType;
17+
private final MethodParameterTypes parameters;
18+
private final int modifiers;
19+
private final BaseFunction implCallback;
20+
21+
public KubeMethod(KubeClass parentClass, String methodName, String descriptor, CtClass returnType, MethodParameterTypes parameters, int modifiers, BaseFunction implCallback) {
22+
this.parentClass = parentClass;
23+
this.methodName = methodName;
24+
this.descriptor = descriptor;
25+
this.annotations = new ArrayList<>();
26+
this.returnType = returnType;
27+
this.parameters = parameters;
28+
this.modifiers = modifiers;
29+
this.implCallback = implCallback;
30+
}
31+
32+
public void addAnnotation(KubeAnnotation annotation) {
33+
this.annotations.add(annotation);
34+
}
35+
36+
public KubeClass getParentClass() {
37+
return parentClass;
38+
}
39+
40+
public String getMethodName() {
41+
return methodName;
42+
}
43+
44+
public String getDescriptor() {
45+
return descriptor;
46+
}
47+
48+
public List<KubeAnnotation> getAnnotations() {
49+
return annotations;
50+
}
51+
52+
public CtClass getReturnType() {
53+
return returnType;
54+
}
55+
56+
public MethodParameterTypes getParameters() {
57+
return parameters;
58+
}
59+
60+
public int getModifiers() {
61+
return modifiers;
62+
}
63+
64+
public BaseFunction getImplCallback() {
65+
return implCallback;
66+
}
1267
}

src/main/java/dev/toapuro/kubeextra/claasgen/annotation/KubeAnnotation.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
import dev.latvian.mods.rhino.Context;
44
import dev.latvian.mods.rhino.Scriptable;
55
import dev.latvian.mods.rhino.ScriptableObject;
6-
import javassist.ClassPool;
6+
import dev.toapuro.kubeextra.handler.CtClassLookupHandler;
77
import javassist.CtClass;
8-
import javassist.NotFoundException;
98
import javassist.bytecode.ConstPool;
109
import javassist.bytecode.annotation.Annotation;
1110
import javassist.bytecode.annotation.MemberValue;
1211

13-
import java.util.*;
12+
import java.util.Arrays;
13+
import java.util.HashMap;
14+
import java.util.List;
15+
import java.util.Map;
1416

1517
public class KubeAnnotation {
1618
private final CtClass annotationClass;
@@ -28,11 +30,7 @@ public KubeAnnotation(CtClass annotationClass) {
2830

2931
public static KubeAnnotation fromScriptable(String annotationName, Scriptable annotationParams, Context context) {
3032
KubeAnnotation annotation;
31-
try {
32-
annotation = new KubeAnnotation(ClassPool.getDefault().getCtClass(annotationName));
33-
} catch (NotFoundException e) {
34-
throw new RuntimeException(e);
35-
}
33+
annotation = new KubeAnnotation(CtClassLookupHandler.lookupOrMake(annotationName));
3634

3735
List<String> propKeys = Arrays.stream(ScriptableObject.getPropertyIds(context, annotationParams))
3836
.map(Object::toString).toList();
@@ -47,7 +45,7 @@ public void putArg(String key, Object object) {
4745
arguments.put(key, object);
4846
}
4947

50-
public Annotation buildAnnotation(ConstPool cp) {
48+
public Annotation compileAnnotation(ConstPool cp) {
5149
Annotation annotation = new Annotation(annotationClass.getName(), cp);
5250
arguments.forEach((key, value) -> {
5351
MemberValue memberValue = AnnotationHelper.getMemberValue(value, cp);

src/main/java/dev/toapuro/kubeextra/claasgen/parameter/MethodParameterType.java renamed to src/main/java/dev/toapuro/kubeextra/claasgen/arguments/MethodParameterType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.toapuro.kubeextra.claasgen.parameter;
1+
package dev.toapuro.kubeextra.claasgen.arguments;
22

33
import javassist.CtClass;
44

src/main/java/dev/toapuro/kubeextra/claasgen/parameter/MethodParameterTypes.java renamed to src/main/java/dev/toapuro/kubeextra/claasgen/arguments/MethodParameterTypes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.toapuro.kubeextra.claasgen.parameter;
1+
package dev.toapuro.kubeextra.claasgen.arguments;
22

33
import javassist.ClassPool;
44
import javassist.CtClass;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.toapuro.kubeextra.claasgen.arguments;
2+
3+
import javassist.CtClass;
4+
5+
public class SuperParamArgument {
6+
private final CtClass paramClass;
7+
private final ArgType argType;
8+
9+
public SuperParamArgument(CtClass paramClass, ArgType argType) {
10+
this.paramClass = paramClass;
11+
this.argType = argType;
12+
}
13+
14+
public CtClass getParamClass() {
15+
return paramClass;
16+
}
17+
18+
public ArgType getArgType() {
19+
return argType;
20+
}
21+
22+
public enum ArgType {
23+
CONST_I,
24+
CONST_D,
25+
CONST_F,
26+
CONST_L,
27+
FUNCTION
28+
}
29+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dev.toapuro.kubeextra.claasgen.arguments;
2+
3+
import javassist.CtClass;
4+
5+
public class SuperParamConstArgument extends SuperParamArgument {
6+
private final Object initialValue;
7+
8+
public SuperParamConstArgument(CtClass paramClass, ArgType argType, Object initialValue) {
9+
super(paramClass, argType);
10+
this.initialValue = initialValue;
11+
}
12+
13+
public SuperParamConstArgument(CtClass paramClass, int initialValue) {
14+
this(paramClass, ArgType.CONST_I, Integer.valueOf(initialValue));
15+
}
16+
17+
public SuperParamConstArgument(CtClass paramClass, double initialValue) {
18+
this(paramClass, ArgType.CONST_D, Double.valueOf(initialValue));
19+
}
20+
21+
public SuperParamConstArgument(CtClass paramClass, float initialValue) {
22+
this(paramClass, ArgType.CONST_F, Float.valueOf(initialValue));
23+
}
24+
25+
public SuperParamConstArgument(CtClass paramClass, long initialValue) {
26+
this(paramClass, ArgType.CONST_L, Long.valueOf(initialValue));
27+
}
28+
29+
public Object getInitialValue() {
30+
return initialValue;
31+
}
32+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package dev.toapuro.kubeextra.claasgen.arguments;
2+
3+
import dev.toapuro.kubeextra.claasgen.kubejs.callback.InstantFunction;
4+
import javassist.CtClass;
5+
6+
public class SuperParamFunctionArgument extends SuperParamArgument {
7+
private final InstantFunction instant;
8+
private final int index;
9+
10+
public SuperParamFunctionArgument(CtClass paramClass, InstantFunction instant, int index) {
11+
super(paramClass, ArgType.FUNCTION);
12+
this.instant = instant;
13+
this.index = index;
14+
}
15+
16+
public int getIndex() {
17+
return index;
18+
}
19+
20+
public InstantFunction getInstant() {
21+
return instant;
22+
}
23+
}

0 commit comments

Comments
 (0)