Commit 670af189 authored by Jacob Potter's avatar Jacob Potter

Fix generation of [description] of optional enums, and add a test

parent 38f34526
......@@ -397,12 +397,7 @@ class ObjcGenerator(spec: Spec) extends Generator(spec) {
for (f <- r.fields) {
w.w(", ")
f.ty.resolved.base match {
case MOptional =>
f.ty.resolved.args.head.base match {
case df: MDef if df.defType == DEnum =>
w.w(s"@(self.${idObjc.field(f.ident)})")
case _ => w.w(s"self.${idObjc.field(f.ident)}")
}
case MOptional => w.w(s"self.${idObjc.field(f.ident)}")
case t: MPrimitive => w.w(s"@(self.${idObjc.field(f.ident)})")
case df: MDef => df.defType match {
case DEnum => w.w(s"@(self.${idObjc.field(f.ident)})")
......
......@@ -10,3 +10,7 @@ color = enum {
indigo;
violet;
}
opt_color_record = record {
my_color: optional<color>;
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#pragma once
#include "color.hpp"
#include <experimental/optional>
#include <utility>
namespace testsuite {
struct OptColorRecord final {
std::experimental::optional<color> my_color;
OptColorRecord(std::experimental::optional<color> my_color_)
: my_color(std::move(my_color_))
{}
};
} // namespace testsuite
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class OptColorRecord {
/*package*/ final Color mMyColor;
public OptColorRecord(
@CheckForNull Color myColor) {
this.mMyColor = myColor;
}
@CheckForNull
public Color getMyColor() {
return mMyColor;
}
@Override
public String toString() {
return "OptColorRecord{" +
"mMyColor=" + mMyColor +
"}";
}
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#include "NativeOptColorRecord.hpp" // my header
#include "Marshal.hpp"
#include "NativeColor.hpp"
namespace djinni_generated {
NativeOptColorRecord::NativeOptColorRecord() = default;
NativeOptColorRecord::~NativeOptColorRecord() = default;
auto NativeOptColorRecord::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef<JniType> {
const auto& data = ::djinni::JniClass<NativeOptColorRecord>::get();
auto r = ::djinni::LocalRef<JniType>{jniEnv->NewObject(data.clazz.get(), data.jconstructor,
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c.my_color)))};
::djinni::jniExceptionCheck(jniEnv);
return r;
}
auto NativeOptColorRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 2);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeOptColorRecord>::get();
return {::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mMyColor))};
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#pragma once
#include "djinni_support.hpp"
#include "opt_color_record.hpp"
namespace djinni_generated {
class NativeOptColorRecord final {
public:
using CppType = ::testsuite::OptColorRecord;
using JniType = jobject;
using Boxed = NativeOptColorRecord;
~NativeOptColorRecord();
static CppType toCpp(JNIEnv* jniEnv, JniType j);
static ::djinni::LocalRef<JniType> fromCpp(JNIEnv* jniEnv, const CppType& c);
private:
NativeOptColorRecord();
friend ::djinni::JniClass<NativeOptColorRecord>;
const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/OptColorRecord") };
const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "<init>", "(Lcom/dropbox/djinni/test/Color;)V") };
const jfieldID field_mMyColor { ::djinni::jniGetFieldID(clazz.get(), "mMyColor", "Lcom/dropbox/djinni/test/Color;") };
};
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#import "DBOptColorRecord.h"
#include "opt_color_record.hpp"
static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file");
@class DBOptColorRecord;
namespace djinni_generated {
struct OptColorRecord
{
using CppType = ::testsuite::OptColorRecord;
using ObjcType = DBOptColorRecord*;
using Boxed = OptColorRecord;
static CppType toCpp(ObjcType objc);
static ObjcType fromCpp(const CppType& cpp);
};
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#import "DBOptColorRecord+Private.h"
#import "DJIMarshal+Private.h"
#include <cassert>
namespace djinni_generated {
auto OptColorRecord::toCpp(ObjcType obj) -> CppType
{
assert(obj);
return {::djinni::Optional<std::experimental::optional, ::djinni::Enum<::testsuite::color, DBColor>>::toCpp(obj.myColor)};
}
auto OptColorRecord::fromCpp(const CppType& cpp) -> ObjcType
{
return [[DBOptColorRecord alloc] initWithMyColor:(::djinni::Optional<std::experimental::optional, ::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(cpp.my_color))];
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#import "DBColor.h"
#import <Foundation/Foundation.h>
@interface DBOptColorRecord : NSObject
- (nonnull instancetype)initWithMyColor:(nullable NSNumber *)myColor;
+ (nonnull instancetype)optColorRecordWithMyColor:(nullable NSNumber *)myColor;
@property (nonatomic, readonly, nullable) NSNumber * myColor;
@end
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni
#import "DBOptColorRecord.h"
@implementation DBOptColorRecord
- (nonnull instancetype)initWithMyColor:(nullable NSNumber *)myColor
{
if (self = [super init]) {
_myColor = myColor;
}
return self;
}
+ (nonnull instancetype)optColorRecordWithMyColor:(nullable NSNumber *)myColor
{
return [[self alloc] initWithMyColor:myColor];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@ %p myColor:%@>", self.class, self, self.myColor];
}
@end
......@@ -14,6 +14,7 @@ djinni-output-temp/cpp/test_helpers.hpp
djinni-output-temp/cpp/empty_record.hpp
djinni-output-temp/cpp/user_token.hpp
djinni-output-temp/cpp/color.hpp
djinni-output-temp/cpp/opt_color_record.hpp
djinni-output-temp/cpp/client_returned_record.hpp
djinni-output-temp/cpp/client_interface.hpp
djinni-output-temp/cpp/cpp_exception.hpp
......@@ -37,6 +38,7 @@ djinni-output-temp/java/TestHelpers.java
djinni-output-temp/java/EmptyRecord.java
djinni-output-temp/java/UserToken.java
djinni-output-temp/java/Color.java
djinni-output-temp/java/OptColorRecord.java
djinni-output-temp/java/ClientReturnedRecord.java
djinni-output-temp/java/ClientInterface.java
djinni-output-temp/java/CppException.java
......@@ -68,6 +70,8 @@ djinni-output-temp/jni/NativeEmptyRecord.cpp
djinni-output-temp/jni/NativeUserToken.hpp
djinni-output-temp/jni/NativeUserToken.cpp
djinni-output-temp/jni/NativeColor.hpp
djinni-output-temp/jni/NativeOptColorRecord.hpp
djinni-output-temp/jni/NativeOptColorRecord.cpp
djinni-output-temp/jni/NativeClientReturnedRecord.hpp
djinni-output-temp/jni/NativeClientReturnedRecord.cpp
djinni-output-temp/jni/NativeClientInterface.hpp
......@@ -106,6 +110,8 @@ djinni-output-temp/objc/DBEmptyRecord.h
djinni-output-temp/objc/DBEmptyRecord.mm
djinni-output-temp/objc/DBUserToken.h
djinni-output-temp/objc/DBColor.h
djinni-output-temp/objc/DBOptColorRecord.h
djinni-output-temp/objc/DBOptColorRecord.mm
djinni-output-temp/objc/DBClientReturnedRecord.h
djinni-output-temp/objc/DBClientReturnedRecord.mm
djinni-output-temp/objc/DBClientInterface.h
......@@ -144,6 +150,8 @@ djinni-output-temp/objc/DBEmptyRecord+Private.h
djinni-output-temp/objc/DBEmptyRecord+Private.mm
djinni-output-temp/objc/DBUserToken+Private.h
djinni-output-temp/objc/DBUserToken+Private.mm
djinni-output-temp/objc/DBOptColorRecord+Private.h
djinni-output-temp/objc/DBOptColorRecord+Private.mm
djinni-output-temp/objc/DBClientReturnedRecord+Private.h
djinni-output-temp/objc/DBClientReturnedRecord+Private.mm
djinni-output-temp/objc/DBClientInterface+Private.h
......
......@@ -24,6 +24,8 @@
65868B621989FE4200D60EEE /* libDjinniObjcTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 65868B4A1989FE4200D60EEE /* libDjinniObjcTest.a */; };
6D66A8A91A3B09F000B312E8 /* DBConstantTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D66A8A81A3B09F000B312E8 /* DBConstantTests.mm */; };
A20094101B06982F00EF8D9B /* DBTokenTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = A200940E1B0697D300EF8D9B /* DBTokenTests.mm */; };
A209B5791BBA2A0A0070C310 /* DBOptColorRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */; };
A209B57A1BBA2A0A0070C310 /* DBOptColorRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */; };
A238CA8E1AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA761AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm */; };
A238CA901AF84B7100CDDCE5 /* DBConstants+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA781AF84B7100CDDCE5 /* DBConstants+Private.mm */; };
A238CA921AF84B7100CDDCE5 /* DBDateRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA7A1AF84B7100CDDCE5 /* DBDateRecord+Private.mm */; };
......@@ -146,6 +148,11 @@
65868B5E1989FE4200D60EEE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
6D66A8A81A3B09F000B312E8 /* DBConstantTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBConstantTests.mm; sourceTree = "<group>"; };
A200940E1B0697D300EF8D9B /* DBTokenTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBTokenTests.mm; sourceTree = "<group>"; };
A209B5751BBA2A0A0070C310 /* DBOptColorRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBOptColorRecord.h; sourceTree = "<group>"; };
A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBOptColorRecord.mm; sourceTree = "<group>"; };
A209B5771BBA2A0A0070C310 /* DBOptColorRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBOptColorRecord+Private.h"; sourceTree = "<group>"; };
A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBOptColorRecord+Private.mm"; sourceTree = "<group>"; };
A209B57B1BBA2A180070C310 /* opt_color_record.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = opt_color_record.hpp; sourceTree = "<group>"; };
A238CA761AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBClientReturnedRecord+Private.mm"; sourceTree = "<group>"; };
A238CA781AF84B7100CDDCE5 /* DBConstants+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBConstants+Private.mm"; sourceTree = "<group>"; };
A238CA7A1AF84B7100CDDCE5 /* DBDateRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBDateRecord+Private.mm"; sourceTree = "<group>"; };
......@@ -395,6 +402,10 @@
A24249181AF192E0003BF8F0 /* generated-objc */ = {
isa = PBXGroup;
children = (
A209B5751BBA2A0A0070C310 /* DBOptColorRecord.h */,
A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */,
A209B5771BBA2A0A0070C310 /* DBOptColorRecord+Private.h */,
A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */,
B52DA5641B103F6D005CE75F /* DBAssortedPrimitives.h */,
B52DA5651B103F6D005CE75F /* DBAssortedPrimitives.mm */,
B52DA5661B103F6D005CE75F /* DBAssortedPrimitives+Private.h */,
......@@ -489,6 +500,7 @@
A242495D1AF192FC003BF8F0 /* generated-cpp */ = {
isa = PBXGroup;
children = (
A209B57B1BBA2A180070C310 /* opt_color_record.hpp */,
B52DA56C1B103FBE005CE75F /* assorted_primitives.cpp */,
B52DA56D1B103FBE005CE75F /* assorted_primitives.hpp */,
A24249601AF192FC003BF8F0 /* client_interface.hpp */,
......@@ -627,6 +639,7 @@
CFF89B931B5D2CC7007F6EC2 /* date_record.cpp in Sources */,
A24850301AF96EBC00AFE907 /* DBRecordWithNestedDerivings.mm in Sources */,
CFFD58B11B041BD9001E10B6 /* DBConstantsInterface.mm in Sources */,
A209B5791BBA2A0A0070C310 /* DBOptColorRecord.mm in Sources */,
B52DA56E1B103FC5005CE75F /* assorted_primitives.cpp in Sources */,
CFFD58B31B041BD9001E10B6 /* DBConstantsInterface+Private.mm in Sources */,
CFC5D9FC1B152E4300BF2DF8 /* TranslateDuration.cpp in Sources */,
......@@ -658,6 +671,7 @@
A238CA8E1AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm in Sources */,
B52DA56B1B103F75005CE75F /* DBAssortedPrimitives+Private.mm in Sources */,
A248502E1AF96EBC00AFE907 /* DBPrimitiveList.mm in Sources */,
A209B57A1BBA2A0A0070C310 /* DBOptColorRecord+Private.mm in Sources */,
A238CAA01AF84B7100CDDCE5 /* DBRecordWithNestedDerivings+Private.mm in Sources */,
CFC5DA0A1B1532F600BF2DF8 /* DBRecordWithDurationAndDerivings+Private.mm in Sources */,
);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment