blob: 30c55b95030f5898a3347227890dcb2b531308d5 [file] [log] [blame]
<html devsite>
<head>
<title>Exporting Constants</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>In cases where an interface is not Java-compatible (because it uses unions
for example) it may still be desirable to export the constants (enum values) to
the Java world. This scenario is supported by <code>hidl-gen -Ljava-constants
&hellip;</code> which extracts annotated enum declarations from the interface
file(s) in a package and produces a java library named
<code>[PACKAGE-NAME]-V[PACKAGE-VERSION]-java-constants</code>. Annotate each
enum declaration to be exported as follows:</p>
<pre class="prettyprint">
@export
enum Foo : int32_t {
SOME_VALUE,
SOME_OTHER_VALUE,
};
</pre>
<p>If necessary, the name under which this type is exported to the Java world
can be different from that chosen in the interface declaration by adding the
annotation-parameter <code>name</code>:</p>
<pre class="prettyprint">
@export(name="JavaFoo")
enum Foo : int32_t {
SOME_VALUE,
SOME_OTHER_VALUE,
};
</pre>
<p>If Java conventions or personal preference ask for a common prefix to be
added to the enum type's values, use the annotation-parameter
<code>value_prefix</code>:</p>
<pre class="prettyprint">
// File "types.hal".
package android.hardware.bar@1.0;
@export(name="JavaFoo", value_prefix="JAVA_")
enum Foo : int32_t {
SOME_VALUE,
SOME_OTHER_VALUE,
};
</pre>
<p>The resulting Java class appears as follows:</p>
<pre class="prettyprint">
package android.hardware.bar.V1_0;
public class Constants {
public final class JavaFoo {
public static final int JAVA_SOME_VALUE = 0;
public static final int JAVA_SOME_OTHER_VALUE = 1;
};
};
</pre>
<p>Finally, Java type declaration for enum types declared in
<code>types.hal</code> are grouped inside a class <code>Constants</code> in the
given package. Enum types declared as children of an interface will be grouped
under that interface's Java class declaration.</p>
</body>
</html>