|
@@ -20,6 +20,7 @@ import org.openzen.zenscript.codemodel.scope.*;
|
20
|
20
|
import org.openzen.zenscript.codemodel.type.*;
|
21
|
21
|
import org.openzen.zenscript.codemodel.type.member.*;
|
22
|
22
|
import org.openzen.zenscript.javashared.*;
|
|
23
|
+import org.openzen.zenscript.javashared.types.JavaFunctionalInterfaceTypeID;
|
23
|
24
|
import org.openzen.zenscript.lexer.*;
|
24
|
25
|
import org.openzen.zenscript.parser.*;
|
25
|
26
|
import org.openzen.zenscript.parser.expression.*;
|
|
@@ -889,20 +890,14 @@ public class JavaNativeModule {
|
889
|
890
|
Expression defaultValue = getDefaultValue(parameter, type);
|
890
|
891
|
parameters[i] = new FunctionParameter(type, parameter.getName(), defaultValue, parameter.isVarArgs());
|
891
|
892
|
}
|
892
|
|
-
|
893
|
|
- TypeParameter[] typeParameters = new TypeParameter[javaTypeParameters.length];
|
894
|
|
- for (int i = 0; i < javaTypeParameters.length; i++) {
|
895
|
|
- TypeVariable<Method> javaTypeParameter = javaTypeParameters[i];
|
896
|
|
- typeParameters[i] = new TypeParameter(CodePosition.UNKNOWN, javaTypeParameter.getName());
|
897
|
|
- context.put(javaTypeParameter, typeParameters[i]);
|
898
|
|
-
|
899
|
|
- for (AnnotatedType bound : javaTypeParameter.getAnnotatedBounds())
|
900
|
|
- typeParameters[i].addBound(new ParameterTypeBound(CodePosition.NATIVE, loadType(context, bound)));
|
|
893
|
+ if (classParameters > 0 && classParameters == typeParameters.length) {
|
|
894
|
+ parameters = Arrays.copyOfRange(parameters, classParameters, parameters.length);
|
901
|
895
|
}
|
902
|
|
-
|
|
896
|
+
|
903
|
897
|
if (exceptionTypes.length > 1)
|
904
|
898
|
throw new IllegalArgumentException("A method can only throw a single exception type!");
|
905
|
899
|
|
|
900
|
+ TypeID returnType = javaReturnType == null ? BasicTypeID.VOID : loadStoredType(context, javaReturnType);
|
906
|
901
|
TypeID thrownType = exceptionTypes.length == 0 ? null : loadStoredType(context, exceptionTypes[0]);
|
907
|
902
|
return new FunctionHeader(typeParameters, returnType, thrownType, parameters);
|
908
|
903
|
}
|
|
@@ -931,7 +926,7 @@ public class JavaNativeModule {
|
931
|
926
|
return loadType(context, annotatedType, nullable, unsigned);
|
932
|
927
|
}
|
933
|
928
|
|
934
|
|
- private TypeID loadType(TypeVariableContext context, Type type, boolean nullable, boolean unsigned) {
|
|
929
|
+ private TypeID loadType(TypeVariableContext context, AnnotatedElement type, boolean nullable, boolean unsigned) {
|
935
|
930
|
TypeID result = loadType(context, type, unsigned);
|
936
|
931
|
if (nullable)
|
937
|
932
|
result = registry.getOptional(result);
|
|
@@ -1045,7 +1040,7 @@ public class JavaNativeModule {
|
1045
|
1040
|
getMethodDescriptor(functionalInterfaceMethod),
|
1046
|
1041
|
JavaModifiers.PUBLIC | JavaModifiers.ABSTRACT,
|
1047
|
1042
|
header.getReturnType().isGeneric());
|
1048
|
|
- return registry.getFunction(header);
|
|
1043
|
+ return new JavaFunctionalInterfaceTypeID(registry, header, functionalInterfaceMethod, method);
|
1049
|
1044
|
}
|
1050
|
1045
|
|
1051
|
1046
|
private <T> TypeVariableContext convertTypeParameters(Class<T> cls) {
|