public static final @NonNull String VERSION = "0.6";
+ // Note: these are not just JLS keywords, but rather character sequences which are reserved in codegen contexts
public static final ImmutableSet<String> JAVA_RESERVED_WORDS = ImmutableSet.of(
- // https://docs.oracle.com/javase/specs/jls/se9/html/jls-3.html#jls-3.9
+ // https://docs.oracle.com/javase/specs/jls/se9/html/jls-3.html#jls-3.9 except module-info.java constructs
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",
"default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", "if",
"implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private",
"protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this",
"throw", "throws", "transient", "try", "void", "volatile", "while", "_",
+ // "open", "module", "requires", "transitive", "exports, "opens", "to", "uses", "provides", "with",
+
// https://docs.oracle.com/javase/specs/jls/se9/html/jls-3.html#jls-3.10.3
"false", "true",
// https://docs.oracle.com/javase/specs/jls/se9/html/jls-3.html#jls-3.10.7
- "null");
+ "null",
+ // https://docs.oracle.com/javase/specs/jls/se10/html/jls-3.html#jls-3.9
+ "var",
+ // https://docs.oracle.com/javase/specs/jls/se14/html/jls-3.html#jls-3.9
+ "yield",
+ // https://docs.oracle.com/javase/specs/jls/se16/html/jls-3.html#jls-3.9
+ "record");
public static final @NonNull String DATA_ROOT_SUFFIX = "Data";
public static final @NonNull String RPC_SERVICE_SUFFIX = "Service";
*/
public static final @NonNull String BINDING_HASHCODE_NAME = "bindingHashCode";
+ /**
+ * Name of default {@link Object#equals(Object)} implementation for instantiated DataObjects. Each such generated
+ * interface contains this static method.
+ */
+ public static final @NonNull String BINDING_EQUALS_NAME = "bindingEquals";
+
/**
* Name of default {@link Object#toString()} implementation for instantiated DataObjects. Each such generated
* interface contains this static method.
*/
public static final @NonNull String SCALAR_TYPE_OBJECT_GET_VALUE_NAME = "getValue";
- /**
- * Prefix for getter methods working on top of boolean.
- */
- public static final @NonNull String BOOLEAN_GETTER_PREFIX = "is";
-
/**
* Prefix for normal getter methods.
*/
return getMethodName(name.getLocalName());
}
- public static @NonNull String getGetterPrefix(final boolean isBoolean) {
- return isBoolean ? BOOLEAN_GETTER_PREFIX : GETTER_PREFIX;
- }
-
- public static @NonNull String getGetterMethodName(final String localName, final boolean isBoolean) {
- return getGetterPrefix(isBoolean) + toFirstUpper(getPropertyName(localName));
+ public static @NonNull String getGetterMethodName(final String localName) {
+ return GETTER_PREFIX + toFirstUpper(getPropertyName(localName));
}
- public static @NonNull String getGetterMethodName(final QName name, final boolean isBoolean) {
- return getGetterPrefix(isBoolean) + getGetterSuffix(name);
+ public static @NonNull String getGetterMethodName(final QName name) {
+ return GETTER_PREFIX + getGetterSuffix(name);
}
public static boolean isGetterMethodName(final String methodName) {
- return methodName.startsWith(GETTER_PREFIX) || methodName.startsWith(BOOLEAN_GETTER_PREFIX);
+ return methodName.startsWith(GETTER_PREFIX);
}
public static @NonNull String getGetterMethodForNonnull(final String methodName) {
return javaToYang.inverse();
}
- // See https://docs.oracle.com/javase/specs/jls/se9/html/jls-3.html#jls-3.8
+ // See https://docs.oracle.com/javase/specs/jls/se16/html/jls-3.html#jls-3.8
+ // TODO: we are being conservative here, but should differentiate TypeIdentifier and UnqualifiedMethodIdentifier,
+ // which have different exclusions
private static boolean isValidJavaIdentifier(final String str) {
return !str.isEmpty() && !JAVA_RESERVED_WORDS.contains(str)
&& Character.isJavaIdentifierStart(str.codePointAt(0))