Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
djinni
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
djinni
Commits
be210d55
Commit
be210d55
authored
Jan 13, 2016
by
Andrew Twyman
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #187 from tiwoc/typetag-cpp-test
Extend multiple inheritance tests by C++ tests
parents
49018487
ae9af63c
Changes
42
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
646 additions
and
30 deletions
+646
-30
test-suite/djinni/common.djinni
test-suite/djinni/common.djinni
+1
-1
test-suite/djinni/multiple_inheritance.djinni
test-suite/djinni/multiple_inheritance.djinni
+15
-0
test-suite/generated-src/cpp/first_listener.hpp
test-suite/generated-src/cpp/first_listener.hpp
+2
-1
test-suite/generated-src/cpp/listener_caller.hpp
test-suite/generated-src/cpp/listener_caller.hpp
+1
-1
test-suite/generated-src/cpp/return_one.hpp
test-suite/generated-src/cpp/return_one.hpp
+21
-0
test-suite/generated-src/cpp/return_two.hpp
test-suite/generated-src/cpp/return_two.hpp
+21
-0
test-suite/generated-src/cpp/second_listener.hpp
test-suite/generated-src/cpp/second_listener.hpp
+2
-1
test-suite/generated-src/inFileList.txt
test-suite/generated-src/inFileList.txt
+1
-1
test-suite/generated-src/java/com/dropbox/djinni/test/FirstListener.java
...rated-src/java/com/dropbox/djinni/test/FirstListener.java
+2
-1
test-suite/generated-src/java/com/dropbox/djinni/test/ListenerCaller.java
...ated-src/java/com/dropbox/djinni/test/ListenerCaller.java
+1
-1
test-suite/generated-src/java/com/dropbox/djinni/test/ReturnOne.java
...generated-src/java/com/dropbox/djinni/test/ReturnOne.java
+48
-0
test-suite/generated-src/java/com/dropbox/djinni/test/ReturnTwo.java
...generated-src/java/com/dropbox/djinni/test/ReturnTwo.java
+48
-0
test-suite/generated-src/java/com/dropbox/djinni/test/SecondListener.java
...ated-src/java/com/dropbox/djinni/test/SecondListener.java
+2
-1
test-suite/generated-src/jni/NativeFirstListener.cpp
test-suite/generated-src/jni/NativeFirstListener.cpp
+1
-1
test-suite/generated-src/jni/NativeFirstListener.hpp
test-suite/generated-src/jni/NativeFirstListener.hpp
+1
-1
test-suite/generated-src/jni/NativeListenerCaller.cpp
test-suite/generated-src/jni/NativeListenerCaller.cpp
+1
-1
test-suite/generated-src/jni/NativeListenerCaller.hpp
test-suite/generated-src/jni/NativeListenerCaller.hpp
+1
-1
test-suite/generated-src/jni/NativeReturnOne.cpp
test-suite/generated-src/jni/NativeReturnOne.cpp
+42
-0
test-suite/generated-src/jni/NativeReturnOne.hpp
test-suite/generated-src/jni/NativeReturnOne.hpp
+32
-0
test-suite/generated-src/jni/NativeReturnTwo.cpp
test-suite/generated-src/jni/NativeReturnTwo.cpp
+42
-0
test-suite/generated-src/jni/NativeReturnTwo.hpp
test-suite/generated-src/jni/NativeReturnTwo.hpp
+32
-0
test-suite/generated-src/jni/NativeSecondListener.cpp
test-suite/generated-src/jni/NativeSecondListener.cpp
+1
-1
test-suite/generated-src/jni/NativeSecondListener.hpp
test-suite/generated-src/jni/NativeSecondListener.hpp
+1
-1
test-suite/generated-src/objc/DBFirstListener+Private.h
test-suite/generated-src/objc/DBFirstListener+Private.h
+1
-1
test-suite/generated-src/objc/DBFirstListener+Private.mm
test-suite/generated-src/objc/DBFirstListener+Private.mm
+1
-1
test-suite/generated-src/objc/DBFirstListener.h
test-suite/generated-src/objc/DBFirstListener.h
+2
-1
test-suite/generated-src/objc/DBListenerCaller+Private.h
test-suite/generated-src/objc/DBListenerCaller+Private.h
+1
-1
test-suite/generated-src/objc/DBListenerCaller+Private.mm
test-suite/generated-src/objc/DBListenerCaller+Private.mm
+1
-1
test-suite/generated-src/objc/DBListenerCaller.h
test-suite/generated-src/objc/DBListenerCaller.h
+1
-1
test-suite/generated-src/objc/DBReturnOne+Private.h
test-suite/generated-src/objc/DBReturnOne+Private.h
+31
-0
test-suite/generated-src/objc/DBReturnOne+Private.mm
test-suite/generated-src/objc/DBReturnOne+Private.mm
+67
-0
test-suite/generated-src/objc/DBReturnOne.h
test-suite/generated-src/objc/DBReturnOne.h
+15
-0
test-suite/generated-src/objc/DBReturnTwo+Private.h
test-suite/generated-src/objc/DBReturnTwo+Private.h
+31
-0
test-suite/generated-src/objc/DBReturnTwo+Private.mm
test-suite/generated-src/objc/DBReturnTwo+Private.mm
+67
-0
test-suite/generated-src/objc/DBReturnTwo.h
test-suite/generated-src/objc/DBReturnTwo.h
+15
-0
test-suite/generated-src/objc/DBSecondListener+Private.h
test-suite/generated-src/objc/DBSecondListener+Private.h
+1
-1
test-suite/generated-src/objc/DBSecondListener+Private.mm
test-suite/generated-src/objc/DBSecondListener+Private.mm
+1
-1
test-suite/generated-src/objc/DBSecondListener.h
test-suite/generated-src/objc/DBSecondListener.h
+2
-1
test-suite/generated-src/outFileList.txt
test-suite/generated-src/outFileList.txt
+14
-0
test-suite/handwritten-src/cpp/return_one_two.cpp
test-suite/handwritten-src/cpp/return_one_two.cpp
+25
-0
test-suite/handwritten-src/objc/tests/DBMultipleInheritanceTests.m
...e/handwritten-src/objc/tests/DBMultipleInheritanceTests.m
+23
-3
test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj
test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj
+28
-4
No files found.
test-suite/djinni/common.djinni
View file @
be210d55
...
@@ -10,4 +10,4 @@
...
@@ -10,4 +10,4 @@
@import "test.djinni"
@import "test.djinni"
@import "primtypes.djinni"
@import "primtypes.djinni"
@import "constants.djinni"
@import "constants.djinni"
@import "
listeners
.djinni"
@import "
multiple_inheritance
.djinni"
test-suite/djinni/
listeners
.djinni
→
test-suite/djinni/
multiple_inheritance
.djinni
View file @
be210d55
# Used for ObjC multiple inheritance tests
first_listener = interface +o {
first_listener = interface +o {
first();
first();
}
}
# Used for ObjC multiple inheritance tests
second_listener = interface +o {
second_listener = interface +o {
second();
second();
}
}
...
@@ -15,3 +17,16 @@ listener_caller = interface +c {
...
@@ -15,3 +17,16 @@ listener_caller = interface +c {
callFirst();
callFirst();
callSecond();
callSecond();
}
}
# Used for C++ multiple inheritance tests
return_one = interface +c {
static get_instance(): return_one;
return_one(): i8;
}
# Used for C++ multiple inheritance tests
return_two = interface +c {
static get_instance(): return_two;
return_two(): i8;
}
test-suite/generated-src/cpp/first_listener.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
namespace
testsuite
{
namespace
testsuite
{
/** Used for ObjC multiple inheritance tests */
class
FirstListener
{
class
FirstListener
{
public:
public:
virtual
~
FirstListener
()
{}
virtual
~
FirstListener
()
{}
...
...
test-suite/generated-src/cpp/listener_caller.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
...
...
test-suite/generated-src/cpp/return_one.hpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#pragma once
#include <cstdint>
#include <memory>
namespace
testsuite
{
/** Used for C++ multiple inheritance tests */
class
ReturnOne
{
public:
virtual
~
ReturnOne
()
{}
static
std
::
shared_ptr
<
ReturnOne
>
get_instance
();
virtual
int8_t
return_one
()
=
0
;
};
}
// namespace testsuite
test-suite/generated-src/cpp/return_two.hpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#pragma once
#include <cstdint>
#include <memory>
namespace
testsuite
{
/** Used for C++ multiple inheritance tests */
class
ReturnTwo
{
public:
virtual
~
ReturnTwo
()
{}
static
std
::
shared_ptr
<
ReturnTwo
>
get_instance
();
virtual
int8_t
return_two
()
=
0
;
};
}
// namespace testsuite
test-suite/generated-src/cpp/second_listener.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
namespace
testsuite
{
namespace
testsuite
{
/** Used for ObjC multiple inheritance tests */
class
SecondListener
{
class
SecondListener
{
public:
public:
virtual
~
SecondListener
()
{}
virtual
~
SecondListener
()
{}
...
...
test-suite/generated-src/inFileList.txt
View file @
be210d55
...
@@ -12,7 +12,7 @@ djinni/user_token.djinni
...
@@ -12,7 +12,7 @@ djinni/user_token.djinni
djinni/test.djinni
djinni/test.djinni
djinni/primtypes.djinni
djinni/primtypes.djinni
djinni/constants.djinni
djinni/constants.djinni
djinni/
listeners
.djinni
djinni/
multiple_inheritance
.djinni
djinni/date.djinni
djinni/date.djinni
djinni/date.yaml
djinni/date.yaml
djinni/duration.djinni
djinni/duration.djinni
...
...
test-suite/generated-src/java/com/dropbox/djinni/test/FirstListener.java
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
package
com.dropbox.djinni.test
;
package
com.dropbox.djinni.test
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.Nonnull
;
import
javax.annotation.Nonnull
;
/** Used for ObjC multiple inheritance tests */
public
abstract
class
FirstListener
{
public
abstract
class
FirstListener
{
public
abstract
void
first
();
public
abstract
void
first
();
}
}
test-suite/generated-src/java/com/dropbox/djinni/test/ListenerCaller.java
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
package
com.dropbox.djinni.test
;
package
com.dropbox.djinni.test
;
...
...
test-suite/generated-src/java/com/dropbox/djinni/test/ReturnOne.java
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
package
com.dropbox.djinni.test
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.Nonnull
;
/** Used for C++ multiple inheritance tests */
public
abstract
class
ReturnOne
{
public
abstract
byte
returnOne
();
@CheckForNull
public
static
native
ReturnOne
getInstance
();
private
static
final
class
CppProxy
extends
ReturnOne
{
private
final
long
nativeRef
;
private
final
AtomicBoolean
destroyed
=
new
AtomicBoolean
(
false
);
private
CppProxy
(
long
nativeRef
)
{
if
(
nativeRef
==
0
)
throw
new
RuntimeException
(
"nativeRef is zero"
);
this
.
nativeRef
=
nativeRef
;
}
private
native
void
nativeDestroy
(
long
nativeRef
);
public
void
destroy
()
{
boolean
destroyed
=
this
.
destroyed
.
getAndSet
(
true
);
if
(!
destroyed
)
nativeDestroy
(
this
.
nativeRef
);
}
protected
void
finalize
()
throws
java
.
lang
.
Throwable
{
destroy
();
super
.
finalize
();
}
@Override
public
byte
returnOne
()
{
assert
!
this
.
destroyed
.
get
()
:
"trying to use a destroyed object"
;
return
native_returnOne
(
this
.
nativeRef
);
}
private
native
byte
native_returnOne
(
long
_nativeRef
);
}
}
test-suite/generated-src/java/com/dropbox/djinni/test/ReturnTwo.java
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
package
com.dropbox.djinni.test
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.Nonnull
;
/** Used for C++ multiple inheritance tests */
public
abstract
class
ReturnTwo
{
public
abstract
byte
returnTwo
();
@CheckForNull
public
static
native
ReturnTwo
getInstance
();
private
static
final
class
CppProxy
extends
ReturnTwo
{
private
final
long
nativeRef
;
private
final
AtomicBoolean
destroyed
=
new
AtomicBoolean
(
false
);
private
CppProxy
(
long
nativeRef
)
{
if
(
nativeRef
==
0
)
throw
new
RuntimeException
(
"nativeRef is zero"
);
this
.
nativeRef
=
nativeRef
;
}
private
native
void
nativeDestroy
(
long
nativeRef
);
public
void
destroy
()
{
boolean
destroyed
=
this
.
destroyed
.
getAndSet
(
true
);
if
(!
destroyed
)
nativeDestroy
(
this
.
nativeRef
);
}
protected
void
finalize
()
throws
java
.
lang
.
Throwable
{
destroy
();
super
.
finalize
();
}
@Override
public
byte
returnTwo
()
{
assert
!
this
.
destroyed
.
get
()
:
"trying to use a destroyed object"
;
return
native_returnTwo
(
this
.
nativeRef
);
}
private
native
byte
native_returnTwo
(
long
_nativeRef
);
}
}
test-suite/generated-src/java/com/dropbox/djinni/test/SecondListener.java
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
package
com.dropbox.djinni.test
;
package
com.dropbox.djinni.test
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.CheckForNull
;
import
javax.annotation.Nonnull
;
import
javax.annotation.Nonnull
;
/** Used for ObjC multiple inheritance tests */
public
abstract
class
SecondListener
{
public
abstract
class
SecondListener
{
public
abstract
void
second
();
public
abstract
void
second
();
}
}
test-suite/generated-src/jni/NativeFirstListener.cpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "NativeFirstListener.hpp" // my header
#include "NativeFirstListener.hpp" // my header
...
...
test-suite/generated-src/jni/NativeFirstListener.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
...
...
test-suite/generated-src/jni/NativeListenerCaller.cpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "NativeListenerCaller.hpp" // my header
#include "NativeListenerCaller.hpp" // my header
#include "NativeFirstListener.hpp"
#include "NativeFirstListener.hpp"
...
...
test-suite/generated-src/jni/NativeListenerCaller.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
...
...
test-suite/generated-src/jni/NativeReturnOne.cpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#include "NativeReturnOne.hpp" // my header
#include "Marshal.hpp"
#include "NativeReturnOne.hpp"
namespace
djinni_generated
{
NativeReturnOne
::
NativeReturnOne
()
:
::
djinni
::
JniInterface
<::
testsuite
::
ReturnOne
,
NativeReturnOne
>
(
"com/dropbox/djinni/test/ReturnOne$CppProxy"
)
{}
NativeReturnOne
::~
NativeReturnOne
()
=
default
;
CJNIEXPORT
void
JNICALL
Java_com_dropbox_djinni_test_ReturnOne_00024CppProxy_nativeDestroy
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
,
jlong
nativeRef
)
{
try
{
DJINNI_FUNCTION_PROLOGUE1
(
jniEnv
,
nativeRef
);
delete
reinterpret_cast
<
djinni
::
CppProxyHandle
<::
testsuite
::
ReturnOne
>*>
(
nativeRef
);
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
)
}
CJNIEXPORT
jobject
JNICALL
Java_com_dropbox_djinni_test_ReturnOne_getInstance
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
)
{
try
{
DJINNI_FUNCTION_PROLOGUE0
(
jniEnv
);
auto
r
=
::
testsuite
::
ReturnOne
::
get_instance
();
return
::
djinni
::
release
(
::
djinni_generated
::
NativeReturnOne
::
fromCpp
(
jniEnv
,
r
));
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
0
/* value doesn't matter */
)
}
CJNIEXPORT
jbyte
JNICALL
Java_com_dropbox_djinni_test_ReturnOne_00024CppProxy_native_1returnOne
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
,
jlong
nativeRef
)
{
try
{
DJINNI_FUNCTION_PROLOGUE1
(
jniEnv
,
nativeRef
);
const
auto
&
ref
=
::
djinni
::
objectFromHandleAddress
<::
testsuite
::
ReturnOne
>
(
nativeRef
);
auto
r
=
ref
->
return_one
();
return
::
djinni
::
release
(
::
djinni
::
I8
::
fromCpp
(
jniEnv
,
r
));
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
0
/* value doesn't matter */
)
}
}
// namespace djinni_generated
test-suite/generated-src/jni/NativeReturnOne.hpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#pragma once
#include "djinni_support.hpp"
#include "return_one.hpp"
namespace
djinni_generated
{
class
NativeReturnOne
final
:
::
djinni
::
JniInterface
<::
testsuite
::
ReturnOne
,
NativeReturnOne
>
{
public:
using
CppType
=
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>
;
using
CppOptType
=
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>
;
using
JniType
=
jobject
;
using
Boxed
=
NativeReturnOne
;
~
NativeReturnOne
();
static
CppType
toCpp
(
JNIEnv
*
jniEnv
,
JniType
j
)
{
return
::
djinni
::
JniClass
<
NativeReturnOne
>::
get
().
_fromJava
(
jniEnv
,
j
);
}
static
::
djinni
::
LocalRef
<
JniType
>
fromCppOpt
(
JNIEnv
*
jniEnv
,
const
CppOptType
&
c
)
{
return
{
jniEnv
,
::
djinni
::
JniClass
<
NativeReturnOne
>::
get
().
_toJava
(
jniEnv
,
c
)};
}
static
::
djinni
::
LocalRef
<
JniType
>
fromCpp
(
JNIEnv
*
jniEnv
,
const
CppType
&
c
)
{
return
fromCppOpt
(
jniEnv
,
c
);
}
private:
NativeReturnOne
();
friend
::
djinni
::
JniClass
<
NativeReturnOne
>
;
friend
::
djinni
::
JniInterface
<::
testsuite
::
ReturnOne
,
NativeReturnOne
>
;
};
}
// namespace djinni_generated
test-suite/generated-src/jni/NativeReturnTwo.cpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#include "NativeReturnTwo.hpp" // my header
#include "Marshal.hpp"
#include "NativeReturnTwo.hpp"
namespace
djinni_generated
{
NativeReturnTwo
::
NativeReturnTwo
()
:
::
djinni
::
JniInterface
<::
testsuite
::
ReturnTwo
,
NativeReturnTwo
>
(
"com/dropbox/djinni/test/ReturnTwo$CppProxy"
)
{}
NativeReturnTwo
::~
NativeReturnTwo
()
=
default
;
CJNIEXPORT
void
JNICALL
Java_com_dropbox_djinni_test_ReturnTwo_00024CppProxy_nativeDestroy
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
,
jlong
nativeRef
)
{
try
{
DJINNI_FUNCTION_PROLOGUE1
(
jniEnv
,
nativeRef
);
delete
reinterpret_cast
<
djinni
::
CppProxyHandle
<::
testsuite
::
ReturnTwo
>*>
(
nativeRef
);
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
)
}
CJNIEXPORT
jobject
JNICALL
Java_com_dropbox_djinni_test_ReturnTwo_getInstance
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
)
{
try
{
DJINNI_FUNCTION_PROLOGUE0
(
jniEnv
);
auto
r
=
::
testsuite
::
ReturnTwo
::
get_instance
();
return
::
djinni
::
release
(
::
djinni_generated
::
NativeReturnTwo
::
fromCpp
(
jniEnv
,
r
));
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
0
/* value doesn't matter */
)
}
CJNIEXPORT
jbyte
JNICALL
Java_com_dropbox_djinni_test_ReturnTwo_00024CppProxy_native_1returnTwo
(
JNIEnv
*
jniEnv
,
jobject
/*this*/
,
jlong
nativeRef
)
{
try
{
DJINNI_FUNCTION_PROLOGUE1
(
jniEnv
,
nativeRef
);
const
auto
&
ref
=
::
djinni
::
objectFromHandleAddress
<::
testsuite
::
ReturnTwo
>
(
nativeRef
);
auto
r
=
ref
->
return_two
();
return
::
djinni
::
release
(
::
djinni
::
I8
::
fromCpp
(
jniEnv
,
r
));
}
JNI_TRANSLATE_EXCEPTIONS_RETURN
(
jniEnv
,
0
/* value doesn't matter */
)
}
}
// namespace djinni_generated
test-suite/generated-src/jni/NativeReturnTwo.hpp
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#pragma once
#include "djinni_support.hpp"
#include "return_two.hpp"
namespace
djinni_generated
{
class
NativeReturnTwo
final
:
::
djinni
::
JniInterface
<::
testsuite
::
ReturnTwo
,
NativeReturnTwo
>
{
public:
using
CppType
=
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>
;
using
CppOptType
=
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>
;
using
JniType
=
jobject
;
using
Boxed
=
NativeReturnTwo
;
~
NativeReturnTwo
();
static
CppType
toCpp
(
JNIEnv
*
jniEnv
,
JniType
j
)
{
return
::
djinni
::
JniClass
<
NativeReturnTwo
>::
get
().
_fromJava
(
jniEnv
,
j
);
}
static
::
djinni
::
LocalRef
<
JniType
>
fromCppOpt
(
JNIEnv
*
jniEnv
,
const
CppOptType
&
c
)
{
return
{
jniEnv
,
::
djinni
::
JniClass
<
NativeReturnTwo
>::
get
().
_toJava
(
jniEnv
,
c
)};
}
static
::
djinni
::
LocalRef
<
JniType
>
fromCpp
(
JNIEnv
*
jniEnv
,
const
CppType
&
c
)
{
return
fromCppOpt
(
jniEnv
,
c
);
}
private:
NativeReturnTwo
();
friend
::
djinni
::
JniClass
<
NativeReturnTwo
>
;
friend
::
djinni
::
JniInterface
<::
testsuite
::
ReturnTwo
,
NativeReturnTwo
>
;
};
}
// namespace djinni_generated
test-suite/generated-src/jni/NativeSecondListener.cpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "NativeSecondListener.hpp" // my header
#include "NativeSecondListener.hpp" // my header
...
...
test-suite/generated-src/jni/NativeSecondListener.hpp
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#pragma once
#pragma once
...
...
test-suite/generated-src/objc/DBFirstListener+Private.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "first_listener.hpp"
#include "first_listener.hpp"
#include <memory>
#include <memory>
...
...
test-suite/generated-src/objc/DBFirstListener+Private.mm
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import "DBFirstListener+Private.h"
#import "DBFirstListener+Private.h"
#import "DBFirstListener.h"
#import "DBFirstListener.h"
...
...
test-suite/generated-src/objc/DBFirstListener.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import <Foundation/Foundation.h>
#import <Foundation/Foundation.h>
/** Used for ObjC multiple inheritance tests */
@protocol
DBFirstListener
@protocol
DBFirstListener
-
(
void
)
first
;
-
(
void
)
first
;
...
...
test-suite/generated-src/objc/DBListenerCaller+Private.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "listener_caller.hpp"
#include "listener_caller.hpp"
#include <memory>
#include <memory>
...
...
test-suite/generated-src/objc/DBListenerCaller+Private.mm
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import "DBListenerCaller+Private.h"
#import "DBListenerCaller+Private.h"
#import "DBListenerCaller.h"
#import "DBListenerCaller.h"
...
...
test-suite/generated-src/objc/DBListenerCaller.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import <Foundation/Foundation.h>
#import <Foundation/Foundation.h>
@class
DBListenerCaller
;
@class
DBListenerCaller
;
...
...
test-suite/generated-src/objc/DBReturnOne+Private.h
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#include "return_one.hpp"
#include <memory>
static_assert
(
__has_feature
(
objc_arc
),
"Djinni requires ARC to be enabled for this file"
);
@
class
DBReturnOne
;
namespace
djinni_generated
{
class
ReturnOne
{
public:
using
CppType
=
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>
;
using
CppOptType
=
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>
;
using
ObjcType
=
DBReturnOne
*
;
using
Boxed
=
ReturnOne
;
static
CppType
toCpp
(
ObjcType
objc
);
static
ObjcType
fromCppOpt
(
const
CppOptType
&
cpp
);
static
ObjcType
fromCpp
(
const
CppType
&
cpp
)
{
return
fromCppOpt
(
cpp
);
}
private:
class
ObjcProxy
;
};
}
// namespace djinni_generated
test-suite/generated-src/objc/DBReturnOne+Private.mm
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#import "DBReturnOne+Private.h"
#import "DBReturnOne.h"
#import "DBReturnOne+Private.h"
#import "DJICppWrapperCache+Private.h"
#import "DJIError.h"
#import "DJIMarshal+Private.h"
#include <exception>
#include <utility>
static_assert
(
__has_feature
(
objc_arc
),
"Djinni requires ARC to be enabled for this file"
);
@interface
DBReturnOne
()
-
(
id
)
initWithCpp
:(
const
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>&
)
cppRef
;
@end
@implementation
DBReturnOne
{
::
djinni
::
CppProxyCache
::
Handle
<
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>>
_cppRefHandle
;
}
-
(
id
)
initWithCpp
:(
const
std
::
shared_ptr
<::
testsuite
::
ReturnOne
>&
)
cppRef
{
if
(
self
=
[
super
init
])
{
_cppRefHandle
.
assign
(
cppRef
);
}
return
self
;
}
+
(
nullable
DBReturnOne
*
)
getInstance
{
try
{
auto
r
=
::
testsuite
::
ReturnOne
::
get_instance
();
return
::
djinni_generated
::
ReturnOne
::
fromCpp
(
r
);
}
DJINNI_TRANSLATE_EXCEPTIONS
()
}
-
(
int8_t
)
returnOne
{
try
{
auto
r
=
_cppRefHandle
.
get
()
->
return_one
();
return
::
djinni
::
I8
::
fromCpp
(
r
);
}
DJINNI_TRANSLATE_EXCEPTIONS
()
}
namespace
djinni_generated
{
auto
ReturnOne
::
toCpp
(
ObjcType
objc
)
->
CppType
{
if
(
!
objc
)
{
return
nullptr
;
}
return
objc
->
_cppRefHandle
.
get
();
}
auto
ReturnOne
::
fromCppOpt
(
const
CppOptType
&
cpp
)
->
ObjcType
{
if
(
!
cpp
)
{
return
nil
;
}
return
::
djinni
::
get_cpp_proxy
<
DBReturnOne
>
(
cpp
);
}
}
// namespace djinni_generated
@end
test-suite/generated-src/objc/DBReturnOne.h
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#import <Foundation/Foundation.h>
@class
DBReturnOne
;
/** Used for C++ multiple inheritance tests */
@interface
DBReturnOne
:
NSObject
+
(
nullable
DBReturnOne
*
)
getInstance
;
-
(
int8_t
)
returnOne
;
@end
test-suite/generated-src/objc/DBReturnTwo+Private.h
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#include "return_two.hpp"
#include <memory>
static_assert
(
__has_feature
(
objc_arc
),
"Djinni requires ARC to be enabled for this file"
);
@
class
DBReturnTwo
;
namespace
djinni_generated
{
class
ReturnTwo
{
public:
using
CppType
=
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>
;
using
CppOptType
=
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>
;
using
ObjcType
=
DBReturnTwo
*
;
using
Boxed
=
ReturnTwo
;
static
CppType
toCpp
(
ObjcType
objc
);
static
ObjcType
fromCppOpt
(
const
CppOptType
&
cpp
);
static
ObjcType
fromCpp
(
const
CppType
&
cpp
)
{
return
fromCppOpt
(
cpp
);
}
private:
class
ObjcProxy
;
};
}
// namespace djinni_generated
test-suite/generated-src/objc/DBReturnTwo+Private.mm
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#import "DBReturnTwo+Private.h"
#import "DBReturnTwo.h"
#import "DBReturnTwo+Private.h"
#import "DJICppWrapperCache+Private.h"
#import "DJIError.h"
#import "DJIMarshal+Private.h"
#include <exception>
#include <utility>
static_assert
(
__has_feature
(
objc_arc
),
"Djinni requires ARC to be enabled for this file"
);
@interface
DBReturnTwo
()
-
(
id
)
initWithCpp
:(
const
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>&
)
cppRef
;
@end
@implementation
DBReturnTwo
{
::
djinni
::
CppProxyCache
::
Handle
<
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>>
_cppRefHandle
;
}
-
(
id
)
initWithCpp
:(
const
std
::
shared_ptr
<::
testsuite
::
ReturnTwo
>&
)
cppRef
{
if
(
self
=
[
super
init
])
{
_cppRefHandle
.
assign
(
cppRef
);
}
return
self
;
}
+
(
nullable
DBReturnTwo
*
)
getInstance
{
try
{
auto
r
=
::
testsuite
::
ReturnTwo
::
get_instance
();
return
::
djinni_generated
::
ReturnTwo
::
fromCpp
(
r
);
}
DJINNI_TRANSLATE_EXCEPTIONS
()
}
-
(
int8_t
)
returnTwo
{
try
{
auto
r
=
_cppRefHandle
.
get
()
->
return_two
();
return
::
djinni
::
I8
::
fromCpp
(
r
);
}
DJINNI_TRANSLATE_EXCEPTIONS
()
}
namespace
djinni_generated
{
auto
ReturnTwo
::
toCpp
(
ObjcType
objc
)
->
CppType
{
if
(
!
objc
)
{
return
nullptr
;
}
return
objc
->
_cppRefHandle
.
get
();
}
auto
ReturnTwo
::
fromCppOpt
(
const
CppOptType
&
cpp
)
->
ObjcType
{
if
(
!
cpp
)
{
return
nil
;
}
return
::
djinni
::
get_cpp_proxy
<
DBReturnTwo
>
(
cpp
);
}
}
// namespace djinni_generated
@end
test-suite/generated-src/objc/DBReturnTwo.h
0 → 100644
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from multiple_inheritance.djinni
#import <Foundation/Foundation.h>
@class
DBReturnTwo
;
/** Used for C++ multiple inheritance tests */
@interface
DBReturnTwo
:
NSObject
+
(
nullable
DBReturnTwo
*
)
getInstance
;
-
(
int8_t
)
returnTwo
;
@end
test-suite/generated-src/objc/DBSecondListener+Private.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#include "second_listener.hpp"
#include "second_listener.hpp"
#include <memory>
#include <memory>
...
...
test-suite/generated-src/objc/DBSecondListener+Private.mm
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import "DBSecondListener+Private.h"
#import "DBSecondListener+Private.h"
#import "DBSecondListener.h"
#import "DBSecondListener.h"
...
...
test-suite/generated-src/objc/DBSecondListener.h
View file @
be210d55
// AUTOGENERATED FILE - DO NOT MODIFY!
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from
listeners
.djinni
// This file generated by Djinni from
multiple_inheritance
.djinni
#import <Foundation/Foundation.h>
#import <Foundation/Foundation.h>
/** Used for ObjC multiple inheritance tests */
@protocol
DBSecondListener
@protocol
DBSecondListener
-
(
void
)
second
;
-
(
void
)
second
;
...
...
test-suite/generated-src/outFileList.txt
View file @
be210d55
...
@@ -7,6 +7,8 @@ djinni-output-temp/cpp/map_date_record.hpp
...
@@ -7,6 +7,8 @@ djinni-output-temp/cpp/map_date_record.hpp
djinni-output-temp/cpp/first_listener.hpp
djinni-output-temp/cpp/first_listener.hpp
djinni-output-temp/cpp/second_listener.hpp
djinni-output-temp/cpp/second_listener.hpp
djinni-output-temp/cpp/listener_caller.hpp
djinni-output-temp/cpp/listener_caller.hpp
djinni-output-temp/cpp/return_one.hpp
djinni-output-temp/cpp/return_two.hpp
djinni-output-temp/cpp/constant_record.hpp
djinni-output-temp/cpp/constant_record.hpp
djinni-output-temp/cpp/constants.hpp
djinni-output-temp/cpp/constants.hpp
djinni-output-temp/cpp/constants.cpp
djinni-output-temp/cpp/constants.cpp
...
@@ -39,6 +41,8 @@ djinni-output-temp/java/MapDateRecord.java
...
@@ -39,6 +41,8 @@ djinni-output-temp/java/MapDateRecord.java
djinni-output-temp/java/FirstListener.java
djinni-output-temp/java/FirstListener.java
djinni-output-temp/java/SecondListener.java
djinni-output-temp/java/SecondListener.java
djinni-output-temp/java/ListenerCaller.java
djinni-output-temp/java/ListenerCaller.java
djinni-output-temp/java/ReturnOne.java
djinni-output-temp/java/ReturnTwo.java
djinni-output-temp/java/ConstantRecord.java
djinni-output-temp/java/ConstantRecord.java
djinni-output-temp/java/Constants.java
djinni-output-temp/java/Constants.java
djinni-output-temp/java/ConstantsInterface.java
djinni-output-temp/java/ConstantsInterface.java
...
@@ -73,6 +77,10 @@ djinni-output-temp/jni/NativeSecondListener.hpp
...
@@ -73,6 +77,10 @@ djinni-output-temp/jni/NativeSecondListener.hpp
djinni-output-temp/jni/NativeSecondListener.cpp
djinni-output-temp/jni/NativeSecondListener.cpp
djinni-output-temp/jni/NativeListenerCaller.hpp
djinni-output-temp/jni/NativeListenerCaller.hpp
djinni-output-temp/jni/NativeListenerCaller.cpp
djinni-output-temp/jni/NativeListenerCaller.cpp
djinni-output-temp/jni/NativeReturnOne.hpp
djinni-output-temp/jni/NativeReturnOne.cpp
djinni-output-temp/jni/NativeReturnTwo.hpp
djinni-output-temp/jni/NativeReturnTwo.cpp
djinni-output-temp/jni/NativeConstantRecord.hpp
djinni-output-temp/jni/NativeConstantRecord.hpp
djinni-output-temp/jni/NativeConstantRecord.cpp
djinni-output-temp/jni/NativeConstantRecord.cpp
djinni-output-temp/jni/NativeConstants.hpp
djinni-output-temp/jni/NativeConstants.hpp
...
@@ -122,6 +130,8 @@ djinni-output-temp/objc/DBMapDateRecord.mm
...
@@ -122,6 +130,8 @@ djinni-output-temp/objc/DBMapDateRecord.mm
djinni-output-temp/objc/DBFirstListener.h
djinni-output-temp/objc/DBFirstListener.h
djinni-output-temp/objc/DBSecondListener.h
djinni-output-temp/objc/DBSecondListener.h
djinni-output-temp/objc/DBListenerCaller.h
djinni-output-temp/objc/DBListenerCaller.h
djinni-output-temp/objc/DBReturnOne.h
djinni-output-temp/objc/DBReturnTwo.h
djinni-output-temp/objc/DBConstantRecord.h
djinni-output-temp/objc/DBConstantRecord.h
djinni-output-temp/objc/DBConstantRecord.mm
djinni-output-temp/objc/DBConstantRecord.mm
djinni-output-temp/objc/DBConstants.h
djinni-output-temp/objc/DBConstants.h
...
@@ -170,6 +180,10 @@ djinni-output-temp/objc/DBSecondListener+Private.h
...
@@ -170,6 +180,10 @@ djinni-output-temp/objc/DBSecondListener+Private.h
djinni-output-temp/objc/DBSecondListener+Private.mm
djinni-output-temp/objc/DBSecondListener+Private.mm
djinni-output-temp/objc/DBListenerCaller+Private.h
djinni-output-temp/objc/DBListenerCaller+Private.h
djinni-output-temp/objc/DBListenerCaller+Private.mm
djinni-output-temp/objc/DBListenerCaller+Private.mm
djinni-output-temp/objc/DBReturnOne+Private.h
djinni-output-temp/objc/DBReturnOne+Private.mm
djinni-output-temp/objc/DBReturnTwo+Private.h
djinni-output-temp/objc/DBReturnTwo+Private.mm
djinni-output-temp/objc/DBConstantRecord+Private.h
djinni-output-temp/objc/DBConstantRecord+Private.h
djinni-output-temp/objc/DBConstantRecord+Private.mm
djinni-output-temp/objc/DBConstantRecord+Private.mm
djinni-output-temp/objc/DBConstants+Private.h
djinni-output-temp/objc/DBConstants+Private.h
...
...
test-suite/handwritten-src/cpp/return_one_two.cpp
0 → 100644
View file @
be210d55
#include "return_one.hpp"
#include "return_two.hpp"
namespace
testsuite
{
class
ReturnOneTwo
:
public
ReturnOne
,
public
ReturnTwo
{
public:
static
std
::
shared_ptr
<
ReturnOneTwo
>
shared_instance
()
{
static
auto
instance
=
std
::
make_shared
<
ReturnOneTwo
>
();
return
instance
;
}
int8_t
return_one
()
override
{
return
1
;
}
int8_t
return_two
()
override
{
return
2
;
}
};
std
::
shared_ptr
<
ReturnOne
>
ReturnOne
::
get_instance
()
{
return
ReturnOneTwo
::
shared_instance
();
}
std
::
shared_ptr
<
ReturnTwo
>
ReturnTwo
::
get_instance
()
{
return
ReturnOneTwo
::
shared_instance
();
}
}
// namespace testsuite
test-suite/handwritten-src/objc/tests/DB
ListenerCallerTest
.m
→
test-suite/handwritten-src/objc/tests/DB
MultipleInheritanceTests
.m
View file @
be210d55
...
@@ -3,6 +3,8 @@
...
@@ -3,6 +3,8 @@
#include "DBFirstListener.h"
#include "DBFirstListener.h"
#include "DBSecondListener.h"
#include "DBSecondListener.h"
#include "DBListenerCaller.h"
#include "DBListenerCaller.h"
#include "DBReturnOne.h"
#include "DBReturnTwo.h"
@interface
Listener
:
NSObject
<
DBFirstListener
,
DBSecondListener
>
@interface
Listener
:
NSObject
<
DBFirstListener
,
DBSecondListener
>
@property
bool
firstCalled
;
@property
bool
firstCalled
;
...
@@ -30,11 +32,11 @@
...
@@ -30,11 +32,11 @@
@end
@end
// test instance of ObjC class implementing two +o interfaces, passed to C++
@interface
DB
ListenerCaller
Test
:
XCTestCase
@interface
DB
ObjcMultipleInheritance
Test
:
XCTestCase
@end
@end
@implementation
DB
ListenerCaller
Test
{
@implementation
DB
ObjcMultipleInheritance
Test
{
Listener
*
listener
;
Listener
*
listener
;
DBListenerCaller
*
caller
;
DBListenerCaller
*
caller
;
}
}
...
@@ -56,3 +58,21 @@
...
@@ -56,3 +58,21 @@
}
}
@end
@end
// test instance of C++ class implementing two +c interfaces, used in ObjC
@interface
DBCppMultipleInheritanceTest
:
XCTestCase
@end
@implementation
DBCppMultipleInheritanceTest
-
(
void
)
testReturnOne
{
DBReturnOne
*
returnOne
=
[
DBReturnOne
getInstance
];
XCTAssertEqual
([
returnOne
returnOne
],
1
);
}
-
(
void
)
testReturnTwo
{
DBReturnTwo
*
returnTwo
=
[
DBReturnTwo
getInstance
];
XCTAssertEqual
([
returnTwo
returnTwo
],
2
);
}
@end
\ No newline at end of file
test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj
View file @
be210d55
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment