Browse Source

Fix optional not counting as nullable

The Optional annotation is parameter, not type bound
kindlich 5 years ago
parent
commit
58a34905c6
No known key found for this signature in database

+ 10
- 2
JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeModule.java View File

645
 			Parameter parameter = javaParameters[i];
645
 			Parameter parameter = javaParameters[i];
646
 
646
 
647
 			//AnnotatedType parameterType = parameter.getAnnotatedType();
647
 			//AnnotatedType parameterType = parameter.getAnnotatedType();
648
-			StoredType type = loadStoredType(context, parameter.getAnnotatedType());
648
+			StoredType type = loadStoredType(context, parameter);
649
 			Expression defaultValue = getDefaultValue(parameter, type);
649
 			Expression defaultValue = getDefaultValue(parameter, type);
650
 			parameters[i] = new FunctionParameter(type, parameter.getName(), defaultValue, parameter.isVarArgs());
650
 			parameters[i] = new FunctionParameter(type, parameter.getName(), defaultValue, parameter.isVarArgs());
651
 		}
651
 		}
670
 	private StoredType loadStoredType(TypeVariableContext context, AnnotatedType annotatedType) {
670
 	private StoredType loadStoredType(TypeVariableContext context, AnnotatedType annotatedType) {
671
 		return loadType(context, annotatedType);
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
 	private StoredType loadType(TypeVariableContext context, AnnotatedType annotatedType) {
682
 	private StoredType loadType(TypeVariableContext context, AnnotatedType annotatedType) {
675
 		if (annotatedType.isAnnotationPresent(ZenCodeType.USize.class))
683
 		if (annotatedType.isAnnotationPresent(ZenCodeType.USize.class))
677
 		else if (annotatedType.isAnnotationPresent(ZenCodeType.NullableUSize.class))
685
 		else if (annotatedType.isAnnotationPresent(ZenCodeType.NullableUSize.class))
678
 			return registry.getOptional(BasicTypeID.USIZE).stored();
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
 		boolean unsigned = annotatedType.isAnnotationPresent(ZenCodeType.Unsigned.class);
689
 		boolean unsigned = annotatedType.isAnnotationPresent(ZenCodeType.Unsigned.class);
682
 		
690
 		
683
 		Type type = annotatedType.getType();
691
 		Type type = annotatedType.getType();

Loading…
Cancel
Save