Преглед изворни кода

Fix optional not counting as nullable

The Optional annotation is parameter, not type bound
kindlich пре 5 година
родитељ
комит
58a34905c6
No known key found for this signature in database

+ 10
- 2
JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeModule.java Прегледај датотеку

@@ -645,7 +645,7 @@ public class JavaNativeModule {
645 645
 			Parameter parameter = javaParameters[i];
646 646
 
647 647
 			//AnnotatedType parameterType = parameter.getAnnotatedType();
648
-			StoredType type = loadStoredType(context, parameter.getAnnotatedType());
648
+			StoredType type = loadStoredType(context, parameter);
649 649
 			Expression defaultValue = getDefaultValue(parameter, type);
650 650
 			parameters[i] = new FunctionParameter(type, parameter.getName(), defaultValue, parameter.isVarArgs());
651 651
 		}
@@ -670,6 +670,14 @@ public class JavaNativeModule {
670 670
 	private StoredType loadStoredType(TypeVariableContext context, AnnotatedType annotatedType) {
671 671
 		return loadType(context, annotatedType);
672 672
 	}
673
+
674
+	private StoredType loadStoredType(TypeVariableContext context, Parameter parameter) {
675
+		final StoredType type = loadStoredType(context, parameter.getAnnotatedType());
676
+		//Optional is a parameter annotation so passing the parameter's type does not pass the optional
677
+		if(parameter.isAnnotationPresent(ZenCodeType.Optional.class) && !type.isOptional())
678
+			return new StoredType(registry.getOptional(type.type), type.getSpecifiedStorage());
679
+		return type;
680
+	}
673 681
 	
674 682
 	private StoredType loadType(TypeVariableContext context, AnnotatedType annotatedType) {
675 683
 		if (annotatedType.isAnnotationPresent(ZenCodeType.USize.class))
@@ -677,7 +685,7 @@ public class JavaNativeModule {
677 685
 		else if (annotatedType.isAnnotationPresent(ZenCodeType.NullableUSize.class))
678 686
 			return registry.getOptional(BasicTypeID.USIZE).stored();
679 687
 		
680
-		boolean nullable = annotatedType.isAnnotationPresent(ZenCodeType.Nullable.class) || annotatedType.isAnnotationPresent(ZenCodeType.Optional.class);
688
+		boolean nullable = annotatedType.isAnnotationPresent(ZenCodeType.Nullable.class);
681 689
 		boolean unsigned = annotatedType.isAnnotationPresent(ZenCodeType.Unsigned.class);
682 690
 		
683 691
 		Type type = annotatedType.getType();

Loading…
Откажи
Сачувај