Граф коммитов

42 Коммитов

Автор SHA1 Сообщение Дата
Jim Chen 6723035d5c Bug 1352177 - 2. Introduce new config file format for SDK bindings; r=snorp
Instead of specifying a class name per line, the new format uses the
.ini format, with each section name specifying the class, and each
property name specifying a member of the class. WrapForJNI options can
be specified with each class or member. Comments can be specified with
';' or '#'. For example,

 # Generate bindings for Bundle using default options:
 [android.os.Bundle]

 # Generate bindings for Bundle using class options:
 [android.os.Bundle = exceptionMode:nsresult]

 # Generate bindings for Bundle using method options:
 [android.os.Bundle]
 putInt = stubName:PutInteger

 # Generate bindings for Bundle using class options with method override:
 # (note that all options are overriden at the same time.)
 [android.os.Bundle = exceptionMode:nsresult]
 # putInt will have stubName "PutInteger", and exceptionMode of "abort"
 putInt = stubName:PutInteger
 # putChar will have stubName "PutCharacter", and exceptionMode of "nsresult"
 putChar = stubName:PutCharacter, exceptionMode:nsresult

 # Overloded methods can be specified using its signature
 [android.os.Bundle]
 # Skip the copy constructor
 <init>(Landroid/os/Bundle;)V = skip:true

 # Generic member types can be specified
 [android.view.KeyEvent = skip:true]
 # Skip everything except fields
 <field> = skip:false

 # Skip everything except putInt and putChar
 [android.os.Bundle = skip:true]
 putInt = skip:false
 putChar =

 # Avoid conflicts in native bindings
 [android.os.Bundle]
 # Bundle(PersistableBundle) native binding can conflict with Bundle(ClassLoader)
 <init>(Landroid/os/PersistableBundle;)V = stubName:NewFromPersistableBundle

 # Generate a getter instead of a literal for certain runtime constants
 [android.os.Build$VERSION = skip:true]
 SDK_INT = noLiteral:true
2017-05-03 11:36:18 -04:00
Jim Chen f915e1bd65 Bug 1352177 - 1. Add a "noLiteral" option for WrapForJNI; r=snorp
For static final fields, generate a getter instead of a literal when
specified. Used to generate bindings for runtime constants whose values
are unknown at compile time.
2017-05-03 11:36:18 -04:00
Jim Chen 0bd1b97d16 Bug 1292323 - Update annotationProcessor to reflect WrapForJNI changes; r=snorp
Update the code generator and related classes in annotation processor to
use the new WrapForJNI flags. Also add some more sanity checking to make
sure the flags are used correctly.
2016-08-12 23:15:52 -04:00
Jim Chen 9177a4b375 Bug 1277624 - Move JNI class name out of Context; r=snorp
Move the class name strings into ObjectBase, so that the strings can be
overridden by derived classes in other namespaces.
2016-06-27 14:49:55 -04:00
Nathan Froyd 7831fb1c31 Bug 1277650 - part 1 - make generated Natives<>::methods[] const instead of constexpr; r=darchons
clang complains that a constexpr definition of methods[] cannot refer to
members of the incomplete Impl template parameter, and rightly so.
Making these const is sufficient for our purposes, and that enables us
to move the declaration outside of the class, where it will be
instantiated lazily (presumably at the point when |Impl| is a complete
class definition).  We also need to declare the length of methods[], as
other parts of the code require knowing the length of methods[] at
compile time.
2016-06-06 16:58:55 -04:00
Jim Chen d2bff49120 Bug 1244875 - Update binding generator; r=snorp
Update the automatic binding generator to match the JNI template
changes.
2016-02-09 17:27:28 -05:00
Jim Chen f133e47c1a Bug 1210585 - Use equals to compare Class instances; r=snorp
The code generator uses == and != to compare two instances of Class, but
it really should be using equals because two distinct instances of Class
can refer to the same class type.
2015-10-22 17:45:45 -04:00
Jim Chen 8d2a72b981 Bug 1209574 - Generate constants for non-accessible static final fields; r=snorp
We try to generate a C++ constant for static final fields, but that
was failing for inaccessible fields. Now we set the field to be
accessible so that we do end up generating a C++ constant.
2015-10-08 15:25:49 -04:00
Jim Chen 0b592d615c Bug 1209574 - Generate C++ name for any Java class in chain of declared classes; r=snorp
Right now, when we generate bindings for Java class A, and we encounter
a Java type B, we generate a corresponding C++ name only if A == B,
otherwise we generate a generic "jni::Object" C++ name. For example,

class Foo {
  class Bar {
    Foo getFoo(Bar bar);
  }
}

In C++, Foo.Bar.getFoo would become,

class Foo {
  class Bar {
    jni::Object::LocalRef getFoo(Bar::Param bar);
  };
};

This patch extends the code generator so that any Java class in the
chain of declared classes gets a corresponding C++ name. The above
example now becomes,

class Foo {
  class Bar {
    Foo::LocalRef getFoo(Bar::Param bar);
  };
};
2015-10-08 15:25:49 -04:00
Carsten "Tomcat" Book 37f97c2a3f Backed out changeset 30a7f9d43ffd (bug 1209574) for android perma Failures 2015-10-08 10:06:59 +02:00
Carsten "Tomcat" Book 348a8f0a15 Backed out changeset 9862f86ffe31 (bug 1209574) for Android Perma Failures 2015-10-08 10:06:47 +02:00
Jim Chen 5d16ca8d3b Bug 1209574 - Generate constants for non-accessible static final fields; r=snorp
We try to generate a C++ constant for static final fields, but that
was failing for inaccessible fields. Now we set the field to be
accessible so that we do end up generating a C++ constant.
2015-10-08 01:12:58 -04:00
Jim Chen 8a746d91f9 Bug 1209574 - Generate C++ name for any Java class in chain of declared classes; r=snorp
Right now, when we generate bindings for Java class A, and we encounter
a Java type B, we generate a corresponding C++ name only if A == B,
otherwise we generate a generic "jni::Object" C++ name. For example,

class Foo {
  class Bar {
    Foo getFoo(Bar bar);
  }
}

In C++, Foo.Bar.getFoo would become,

class Foo {
  class Bar {
    jni::Object::LocalRef getFoo(Bar::Param bar);
  };
};

This patch extends the code generator so that any Java class in the
chain of declared classes gets a corresponding C++ name. The above
example now becomes,

class Foo {
  class Bar {
    Foo::LocalRef getFoo(Bar::Param bar);
  };
};
2015-10-08 01:12:57 -04:00
Wes Kocher f12076ac2e Backed out 5 changesets (bug 1209574) for android tpn bustage
Backed out changeset fb1f06793a67 (bug 1209574)
Backed out changeset 5f0b32b1acc4 (bug 1209574)
Backed out changeset 657332ea4f59 (bug 1209574)
Backed out changeset 9d2c7ed9cd87 (bug 1209574)
Backed out changeset 8376124b6a0c (bug 1209574)
2015-10-07 09:04:39 -07:00
Jim Chen eb54e04df1 Bug 1209574 - Generate constants for non-accessible static final fields; r=snorp
We try to generate a C++ constant for static final fields, but that
was failing for inaccessible fields. Now we set the field to be
accessible so that we do end up generating a C++ constant.
2015-10-07 08:57:30 -04:00
Jim Chen 4ab3b96976 Bug 1209574 - Generate C++ name for any Java class in chain of declared classes; r=snorp
Right now, when we generate bindings for Java class A, and we encounter
a Java type B, we generate a corresponding C++ name only if A == B,
otherwise we generate a generic "jni::Object" C++ name. For example,

class Foo {
  class Bar {
    Foo getFoo(Bar bar);
  }
}

In C++, Foo.Bar.getFoo would become,

class Foo {
  class Bar {
    jni::Object::LocalRef getFoo(Bar::Param bar);
  };
};

This patch extends the code generator so that any Java class in the
chain of declared classes gets a corresponding C++ name. The above
example now becomes,

class Foo {
  class Bar {
    Foo::LocalRef getFoo(Bar::Param bar);
  };
};
2015-10-07 08:57:30 -04:00
Jim Chen 63dc585f5c Bug 1194360 - Remove use of inherited constructors; r=snorp
GeneratedJNIWrappers.h was updated in bug 1192079 to use inherited
constructors, which is a gcc 4.8 feature. Many people are still using an
older version of NDK which only comes with gcc 4.7.
2015-08-13 16:57:34 -04:00
Jim Chen 2bdb7be558 Bug 1192079 - Use unqualified names when possible; r=snorp
To reduce verbosity of the generated code, this patch makes the code
generator use unqualified names when possible, e.g. use State::Ref
instead of GeckoThread::State::Ref. To accomplish that, function
prototypes now use the C++11 -> syntax for return types.
2015-08-13 00:53:39 -04:00
Jim Chen 7595348845 Bug 1192079 - Support inner classes in generated JNI wrapper; r=snorp
Currently, when we generate JNI wrapper for an inner class, the
resulting C++ class will not actually be a nested class of the enclosing
class. As a result, the class can be confusing to use. For example,
wrapping Java class GeckoThread.State results in two unrelated C++
classes, GeckoThread and State, and it'd be confusing to use State by
itself.

This patch adds support for inner classes. We start by scanning only for
top-level classes, and when processing each top-level class, we
recursively scan for inner classes through
JarClassIterator.getInnerClasses() and CodeGenerator.generateClasses().
For each Java inner classes, the resulting C++ class will be a nested
class. For example, wrapping GeckoThread.State will produce
widget::GeckoThread and widget::GeckoThread::State.
2015-08-13 00:53:39 -04:00
Jim Chen 64eb7d8aff Bug 1186517 - Adjust white spacing in generated files; r=me 2015-07-29 15:11:15 -04:00
Jim Chen 2a96b6bc16 Bug 1178850 - Generate naive method bindings in annotation processor; r=snorp 2015-07-10 23:41:35 -04:00
Jim Chen 42c05f4a28 Bug 1178850 - Make mozilla::jni::Param more intuitive to use; r=snorp 2015-07-10 23:41:35 -04:00
Wes Kocher 027fd9354a Backed out 5 changesets (bug 1178850) for android build bustage CLOSED TREE
Backed out changeset 79085d3894e8 (bug 1178850)
Backed out changeset c02b603104ea (bug 1178850)
Backed out changeset d6dab7810669 (bug 1178850)
Backed out changeset 8ee5809f349b (bug 1178850)
Backed out changeset 821b22ce79e1 (bug 1178850)
2015-07-10 14:17:53 -07:00
Jim Chen acd92bfffd Bug 1178850 - Generate naive method bindings in annotation processor; r=snorp 2015-07-10 16:52:52 -04:00
Jim Chen 92f97132f9 Bug 1178850 - Make mozilla::jni::Param more intuitive to use; r=snorp 2015-07-10 16:52:51 -04:00
Jim Chen db34c64f29 Bug 1116589 - Use templated JNI classes in generated bindings; r=snorp 2015-01-09 19:33:57 -05:00
James Willcox 4f5b795709 Bug 1086693 - Part 5: Add a 'catchException' mode to JNI generator r=ckitching 2014-11-13 12:47:24 -06:00
James Willcox f793c98f19 Bug 1086693 - Part 4: Add a lazy initialization mode to CodeGenerator, and use it for SDK bindings r=ckitching 2014-11-13 12:47:24 -06:00
James Willcox 178ca1265d Bug 1086693 - Part 3: Don't generate members that are above a given API version r=ckitching 2014-11-13 12:47:23 -06:00
James Willcox 8d6684fdf9 Bug 1086693 - Part 1: Add SDKProcessor r=ckitching 2014-11-13 12:47:22 -06:00
Chris Kitching d9eab8b56d Bug 1049105: Make annotation processor compile with Xlint:all r=kats 2014-08-05 21:13:49 -07:00
Chris Kitching 9bc3c00d3c Bug 1049105: Remove generateStatic option from JNI wrapper generator r=kats 2014-08-05 15:04:38 -07:00
Kartikaya Gupta dffa17239a Follow-up to bug 1019836 to replace tabs with spaces. r=me and DONTBUILD because whitespace changes only. 2014-08-05 15:52:43 -04:00
Brad Lassey 551b30bb4c bug 1019836 - Support narrow char strings in android bridge r=snorp 2014-06-04 15:04:12 -04:00
Chris Peterson 8d8caa847d Bug 990764 - Replace MOZ_ASSUME_UNREACHABLE with MOZ_CRASH in widget/android. r=blassey 2014-04-27 18:56:46 -07:00
Jim Chen c137c2f965 Bug 958706 - Make generated JNI wrappers handle uncaught exceptions; r=blassey
This patch adds AndroidBridge::HandleUncaughtException calls to generated JNI wrappers. Also, the JNI annotation now accepts the noThrow flag to indicate that the JNI caller wishes to handle Exceptions manually.
2014-01-17 23:32:25 -06:00
Ehsan Akhgari b6f3a348f0 Bug 956783 - Stop using NULL in Fennec's JNI code; r=jchen 2014-01-06 15:21:27 -05:00
Chris Kitching c7984b3c10 Bug 913985: Part 3 - Update the annotation processor to generate wrapper classes. r=kats
--HG--
rename : build/annotationProcessors/MethodWithAnnotationInfo.java => build/annotationProcessors/AnnotationInfo.java
rename : build/annotationProcessors/utils/AlphabeticMethodComparator.java => build/annotationProcessors/utils/AlphabeticAnnotatableEntityComparator.java
rename : build/annotationProcessors/utils/GeneratableEntryPointIterator.java => build/annotationProcessors/utils/GeneratableElementIterator.java
2013-11-21 20:41:28 +00:00
Ryan VanderMeulen 2c440594a5 Backed out 7 changesets (bug 913985) for intermittent Android crashes.
Backed out changeset 53513a959cf0 (bug 913985)
Backed out changeset d23d1e678417 (bug 913985)
Backed out changeset a9c9187b4f4a (bug 913985)
Backed out changeset c6b02e4a3e35 (bug 913985)
Backed out changeset 895dae322e3c (bug 913985)
Backed out changeset 3d97e6a53313 (bug 913985)
Backed out changeset 892bb017f8ba (bug 913985)

--HG--
rename : build/annotationProcessors/AnnotationInfo.java => build/annotationProcessors/MethodWithAnnotationInfo.java
rename : build/annotationProcessors/utils/AlphabeticAnnotatableEntityComparator.java => build/annotationProcessors/utils/AlphabeticMethodComparator.java
rename : build/annotationProcessors/utils/GeneratableElementIterator.java => build/annotationProcessors/utils/GeneratableEntryPointIterator.java
rename : mobile/android/base/mozglue/generatorannotations/WrapElementForJNI.java => mobile/android/base/mozglue/GeneratableAndroidBridgeTarget.java
rename : mobile/android/base/mozglue/generatorannotations/OptionalGeneratedParameter.java => mobile/android/base/mozglue/OptionalGeneratedParameter.java
2013-11-19 10:56:09 -05:00
Chris Kitching e66536370a Bug 913985 - Part 3: update the annotation processor to generate wrapper classes. r=kats
--HG--
rename : build/annotationProcessors/MethodWithAnnotationInfo.java => build/annotationProcessors/AnnotationInfo.java
rename : build/annotationProcessors/utils/AlphabeticMethodComparator.java => build/annotationProcessors/utils/AlphabeticAnnotatableEntityComparator.java
rename : build/annotationProcessors/utils/GeneratableEntryPointIterator.java => build/annotationProcessors/utils/GeneratableElementIterator.java
2013-11-18 20:31:35 -08:00
Chris Kitching 1cc25f475e Bug 914760 - Generate less debugging code. r=rnewman 2013-09-10 21:10:47 -04:00
Chris Kitching abd1001920 Bug 794981 - Part 8: Add an annotation processor to the build process to generate the contents of part 5. r=kats, r=glandium 2013-09-09 08:57:37 -04:00