|
27 | 27 | import org.screamingsandals.nms.generator.build.AccessorClassGenerator; |
28 | 28 | import org.screamingsandals.nms.generator.utils.GroovyUtils; |
29 | 29 |
|
| 30 | +import java.lang.reflect.Method; |
30 | 31 | import java.util.ArrayList; |
31 | 32 | import java.util.List; |
32 | 33 | import java.util.function.Consumer; |
33 | 34 |
|
34 | 35 | @ToString(callSuper = true) |
35 | 36 | public class RequiredClass extends RequiredSymbol implements RequiredArgumentType { |
| 37 | + @Nullable |
| 38 | + private static Class<?> kotlinJvmInternalClassBasedDeclarationContainer; |
| 39 | + @Nullable |
| 40 | + private static Method cBDCJClassMethod; |
| 41 | + |
| 42 | + static { |
| 43 | + // Please Jetbrains, don't rename it in the future :) |
| 44 | + try { |
| 45 | + kotlinJvmInternalClassBasedDeclarationContainer = Class.forName("kotlin.jvm.internal.ClassBasedDeclarationContainer"); // DeclarationContainerImpl |
| 46 | + } catch (Throwable ignored) { |
| 47 | + try { |
| 48 | + kotlinJvmInternalClassBasedDeclarationContainer = Class.forName("kotlin.jvm.internal.DeclarationContainerImpl"); |
| 49 | + } catch (Throwable ignored2) { |
| 50 | + } |
| 51 | + } |
| 52 | + try { |
| 53 | + if (kotlinJvmInternalClassBasedDeclarationContainer != null) { |
| 54 | + cBDCJClassMethod = kotlinJvmInternalClassBasedDeclarationContainer.getMethod("getJClass"); |
| 55 | + } |
| 56 | + } catch (Throwable ignored) { |
| 57 | + } |
| 58 | + } |
| 59 | + |
36 | 60 | @Getter |
37 | 61 | private final List<RequiredClassMember> requiredSymbols = new ArrayList<>(); |
38 | 62 |
|
@@ -125,6 +149,13 @@ private RequiredArgumentType[] parseParams(Object[] params) { |
125 | 149 | list.add((RequiredArgumentType) p); |
126 | 150 | } else if (p instanceof Class) { |
127 | 151 | list.add(new RequiredArgumentJvmClass((Class<?>) p)); |
| 152 | + } else if (kotlinJvmInternalClassBasedDeclarationContainer != null && cBDCJClassMethod != null && kotlinJvmInternalClassBasedDeclarationContainer.isInstance(p)) { |
| 153 | + try { |
| 154 | + var javaClass = cBDCJClassMethod.invoke(p); |
| 155 | + list.add(new RequiredArgumentJvmClass((Class<?>) javaClass)); |
| 156 | + } catch (Throwable throwable) { |
| 157 | + throw new RuntimeException("Invalid configuration: Can't convert kotlin KClass to java Class", throwable); |
| 158 | + } |
128 | 159 | } else if (p instanceof CharSequence) { |
129 | 160 | var unifiedString = p.toString(); |
130 | 161 | if (unifiedString.startsWith("@")) { |
|
0 commit comments