| <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 |
| …</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> |