private static final String EMPTY_STRING = "";
private static final String RESERVED_KEYWORD = "reserved_keyword";
private static final ListMultimap<String, String> PACKAGES_MAP = ArrayListMultimap.create();
+ private static final Set<String> PRIMITIVE_TYPES = ImmutableSet.of("char[]", "byte[]");
public static final Set<String> SPECIAL_RESERVED_PATHS =
- ImmutableSet.of("org.opendaylight.yangtools.yang.common", "org.opendaylight.mdsal.binding.javav2.spec",
- "java", "com");
+ ImmutableSet.of("org.opendaylight.yangtools.yang.model","org.opendaylight.yangtools.concepts","org.opendaylight.yangtools.yang.common",
+ "org.opendaylight.mdsal.binding.javav2.spec", "java", "com");
private JavaIdentifierNormalizer() {
throw new UnsupportedOperationException("Util class");
final String[] packageNameParts = fullPackageName.split("\\.");
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < packageNameParts.length; i++) {
- sb.append(normalizePartialPackageName(packageNameParts[i]));
+ String normalizedPartialPackageName = normalizePartialPackageName(packageNameParts[i]);
+
+ // check if fullPackageName contains class name at the end and
+ // capitalize last part of normalized package name
+ if (packageNameParts.length != 1 && i == packageNameParts.length - 1
+ && Character.isUpperCase(packageNameParts[i].charAt(FIRST_CHAR))) {
+ normalizedPartialPackageName = packageNameParts[i];
+ }
+
+ sb.append(normalizedPartialPackageName);
+
if (i != (packageNameParts.length - 1)) {
sb.append(".");
}
* @return - java acceptable identifier
*/
public static String normalizeClassIdentifier(final String packageName, final String className) {
+ if (packageName.isEmpty() && PRIMITIVE_TYPES.contains(className)) {
+ return className;
+ }
for (final String reservedPath : SPECIAL_RESERVED_PATHS) {
if (packageName.startsWith(reservedPath)) {
return className;
}
}
final String convertedClassName = normalizeSpecificIdentifier(className, JavaIdentifier.CLASS);
- return normalizeClassIdentifier(packageName, convertedClassName, convertedClassName, FIRST_INDEX);
+ // if packageName contains class name at the end, then the className is
+ // name of inner class
+ final String[] packageNameParts = packageName.split("\\.");
+ String suppInnerClassPackageName = packageName;
+ if (packageNameParts.length > 1) {
+ if (Character.isUpperCase(packageNameParts[packageNameParts.length - 1].charAt(FIRST_CHAR))) {
+ final StringBuilder sb = new StringBuilder();
+ // ignore class name in package name - inner class name has
+ // to be normalizing according to original package of parent
+ // class
+ for (int i = 0; i < packageNameParts.length - 1; i++) {
+ sb.append(packageNameParts[i]);
+ if (i != (packageNameParts.length - 2)) {
+ sb.append('.');
+ }
+ }
+ suppInnerClassPackageName = sb.toString();
+ }
+ }
+
+ return normalizeClassIdentifier(suppInnerClassPackageName, convertedClassName, convertedClassName, FIRST_INDEX);
}
/**