Commit 55ff8e7e authored by Guy Nicholas's avatar Guy Nicholas

For extended records moved the base struct forward declare into the namespace

parent f2e35572
......@@ -146,12 +146,16 @@ class CppGenerator(spec: Spec) extends Generator(spec) {
// Requiring the extended class
if (r.ext.cpp) {
refs.hpp.add(s"struct $self; // Requiring extended class")
refs.cpp.add("#include "+q("../" + spec.cppFileIdentStyle(ident) + "." + spec.cppHeaderExt))
}
// C++ Header
def writeCppPrototype(w: IndentWriter) {
if (r.ext.cpp) {
w.w(s"struct $self; // Requiring extended class")
w.wl
w.wl
}
writeDoc(w, doc)
writeCppTypeParams(w, params)
w.w("struct " + actualSelf + cppFinal).bracedSemi {
......
......@@ -12,3 +12,4 @@
@import "constants.djinni"
@import "multiple_inheritance.djinni"
@import "single_language_interfaces.djinni"
@import "extended_record.djinni"
# Extended record
extended_record = record +c {
foo: bool;
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#pragma once
#include <utility>
namespace testsuite {
struct ExtendedRecord; // Requiring extended class
/** Extended record */
struct ExtendedRecordBase {
bool foo;
ExtendedRecordBase(bool foo_)
: foo(std::move(foo_))
{}
virtual ~ExtendedRecordBase() = default;
protected:
ExtendedRecordBase(const ExtendedRecordBase&) = default;
ExtendedRecordBase(ExtendedRecordBase&&) = default;
ExtendedRecordBase& operator=(const ExtendedRecordBase&) = default;
ExtendedRecordBase& operator=(ExtendedRecordBase&&) = default;
};
} // namespace testsuite
......@@ -14,6 +14,7 @@ djinni/primtypes.djinni
djinni/constants.djinni
djinni/multiple_inheritance.djinni
djinni/single_language_interfaces.djinni
djinni/extended_record.djinni
djinni/date.djinni
djinni/date.yaml
djinni/duration.djinni
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Extended record */
public final class ExtendedRecord {
/*package*/ final boolean mFoo;
public ExtendedRecord(
boolean foo) {
this.mFoo = foo;
}
public boolean getFoo() {
return mFoo;
}
@Override
public String toString() {
return "ExtendedRecord{" +
"mFoo=" + mFoo +
"}";
}
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#include "NativeExtendedRecord.hpp" // my header
#include "Marshal.hpp"
namespace djinni_generated {
NativeExtendedRecord::NativeExtendedRecord() = default;
NativeExtendedRecord::~NativeExtendedRecord() = default;
auto NativeExtendedRecord::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef<JniType> {
const auto& data = ::djinni::JniClass<NativeExtendedRecord>::get();
auto r = ::djinni::LocalRef<JniType>{jniEnv->NewObject(data.clazz.get(), data.jconstructor,
::djinni::get(::djinni::Bool::fromCpp(jniEnv, c.foo)))};
::djinni::jniExceptionCheck(jniEnv);
return r;
}
auto NativeExtendedRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 2);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeExtendedRecord>::get();
return {::djinni::Bool::toCpp(jniEnv, jniEnv->GetBooleanField(j, data.field_mFoo))};
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#pragma once
#include "djinni_support.hpp"
#include "extended_record.hpp"
namespace djinni_generated {
class NativeExtendedRecord final {
public:
using CppType = ::testsuite::ExtendedRecord;
using JniType = jobject;
using Boxed = NativeExtendedRecord;
~NativeExtendedRecord();
static CppType toCpp(JNIEnv* jniEnv, JniType j);
static ::djinni::LocalRef<JniType> fromCpp(JNIEnv* jniEnv, const CppType& c);
private:
NativeExtendedRecord();
friend ::djinni::JniClass<NativeExtendedRecord>;
const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/ExtendedRecord") };
const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "<init>", "(Z)V") };
const jfieldID field_mFoo { ::djinni::jniGetFieldID(clazz.get(), "mFoo", "Z") };
};
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#import "DBExtendedRecord.h"
#include "../extended_record.hpp"
static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file");
@class DBExtendedRecord;
namespace djinni_generated {
struct ExtendedRecord
{
using CppType = ::testsuite::ExtendedRecord;
using ObjcType = DBExtendedRecord*;
using Boxed = ExtendedRecord;
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 extended_record.djinni
#import "DBExtendedRecord+Private.h"
#import "DJIMarshal+Private.h"
#include <cassert>
namespace djinni_generated {
auto ExtendedRecord::toCpp(ObjcType obj) -> CppType
{
assert(obj);
return {::djinni::Bool::toCpp(obj.foo)};
}
auto ExtendedRecord::fromCpp(const CppType& cpp) -> ObjcType
{
return [[DBExtendedRecord alloc] initWithFoo:(::djinni::Bool::fromCpp(cpp.foo))];
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#import <Foundation/Foundation.h>
/** Extended record */
@interface DBExtendedRecord : NSObject
- (nonnull instancetype)initWithFoo:(BOOL)foo;
+ (nonnull instancetype)extendedRecordWithFoo:(BOOL)foo;
@property (nonatomic, readonly) BOOL foo;
@end
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from extended_record.djinni
#import "DBExtendedRecord.h"
@implementation DBExtendedRecord
- (nonnull instancetype)initWithFoo:(BOOL)foo
{
if (self = [super init]) {
_foo = foo;
}
return self;
}
+ (nonnull instancetype)extendedRecordWithFoo:(BOOL)foo
{
return [[self alloc] initWithFoo:foo];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@ %p foo:%@>", self.class, self, @(self.foo)];
}
@end
......@@ -4,6 +4,7 @@ djinni-output-temp/cpp/record_with_duration_and_derivings.cpp
djinni-output-temp/cpp/date_record.hpp
djinni-output-temp/cpp/date_record.cpp
djinni-output-temp/cpp/map_date_record.hpp
djinni-output-temp/cpp/extended_record_base.hpp
djinni-output-temp/cpp/objc_only_listener.hpp
djinni-output-temp/cpp/java_only_listener.hpp
djinni-output-temp/cpp/uses_single_language_listeners.hpp
......@@ -41,6 +42,7 @@ djinni-output-temp/java/TestDuration.java
djinni-output-temp/java/RecordWithDurationAndDerivings.java
djinni-output-temp/java/DateRecord.java
djinni-output-temp/java/MapDateRecord.java
djinni-output-temp/java/ExtendedRecord.java
djinni-output-temp/java/ObjcOnlyListener.java
djinni-output-temp/java/JavaOnlyListener.java
djinni-output-temp/java/UsesSingleLanguageListeners.java
......@@ -77,6 +79,8 @@ djinni-output-temp/jni/NativeDateRecord.hpp
djinni-output-temp/jni/NativeDateRecord.cpp
djinni-output-temp/jni/NativeMapDateRecord.hpp
djinni-output-temp/jni/NativeMapDateRecord.cpp
djinni-output-temp/jni/NativeExtendedRecord.hpp
djinni-output-temp/jni/NativeExtendedRecord.cpp
djinni-output-temp/jni/NativeObjcOnlyListener.hpp
djinni-output-temp/jni/NativeObjcOnlyListener.cpp
djinni-output-temp/jni/NativeJavaOnlyListener.hpp
......@@ -139,6 +143,8 @@ djinni-output-temp/objc/DBDateRecord.h
djinni-output-temp/objc/DBDateRecord.mm
djinni-output-temp/objc/DBMapDateRecord.h
djinni-output-temp/objc/DBMapDateRecord.mm
djinni-output-temp/objc/DBExtendedRecord.h
djinni-output-temp/objc/DBExtendedRecord.mm
djinni-output-temp/objc/DBObjcOnlyListener.h
djinni-output-temp/objc/DBJavaOnlyListener.h
djinni-output-temp/objc/DBUsesSingleLanguageListeners.h
......@@ -189,6 +195,8 @@ djinni-output-temp/objc/DBDateRecord+Private.h
djinni-output-temp/objc/DBDateRecord+Private.mm
djinni-output-temp/objc/DBMapDateRecord+Private.h
djinni-output-temp/objc/DBMapDateRecord+Private.mm
djinni-output-temp/objc/DBExtendedRecord+Private.h
djinni-output-temp/objc/DBExtendedRecord+Private.mm
djinni-output-temp/objc/DBObjcOnlyListener+Private.h
djinni-output-temp/objc/DBObjcOnlyListener+Private.mm
djinni-output-temp/objc/DBJavaOnlyListener+Private.h
......
#include "extended_record.hpp"
using namespace testsuite;
ExtendedRecord::ExtendedRecord() : ExtendedRecordBase(true) {}
#pragma once
#include "extended_record_base.hpp"
namespace testsuite {
struct ExtendedRecord : public ExtendedRecordBase
{
using ExtendedRecordBase::ExtendedRecordBase;
ExtendedRecord();
};
}
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