From 3ee465f629ad120a4eda5e79aebc8db0341ebc22 Mon Sep 17 00:00:00 2001 From: Jakub Toth Date: Mon, 10 Apr 2017 11:17:19 +0200 Subject: [PATCH] Improve NonJavaCharsConverter * rename NonJavaCharsConverter to JavaIdentifierNormalizer * rename public methods of JavaIdentifierNormalizer from 'convert*' to 'normalizeIdentifier' * add new checking of identifiers by set of SPECIAL_RESERVED_WORDS Change-Id: Ia603a4876065fe9f7420cafe5128c3ce89e47555 Signed-off-by: Jakub Toth --- .../generator/impl/AuxiliaryGenUtils.java | 6 +- .../javav2/generator/impl/GenHelperUtil.java | 4 +- .../generator/yang/types/BaseYangTypes.java | 5 +- .../yang/types/TypeProviderImpl.java | 12 +- .../generator/util/AbstractBaseType.java | 8 +- .../generator/util/BindingGeneratorUtil.java | 6 +- ...ter.java => JavaIdentifierNormalizer.java} | 155 ++++++++++-------- .../type/builder/EnumerationBuilderImpl.java | 4 +- ...java => JavaIdentifierNormalizerTest.java} | 52 +++--- .../yangModuleInfoTemplate.scala.txt | 10 +- 10 files changed, 142 insertions(+), 120 deletions(-) rename binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/{NonJavaCharsConverter.java => JavaIdentifierNormalizer.java} (84%) rename binding2/mdsal-binding2-generator-util/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/util/{NonJavaCharsConverterTest.java => JavaIdentifierNormalizerTest.java} (87%) diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java index 55c37a9903..95da08fbff 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java @@ -30,7 +30,7 @@ import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForN import org.opendaylight.mdsal.binding.javav2.generator.impl.util.YangTextTemplate; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; -import org.opendaylight.mdsal.binding.javav2.generator.util.NonJavaCharsConverter; +import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl; @@ -160,7 +160,7 @@ final class AuxiliaryGenUtils { } // underscore used as separator for distinction of method parts in convertIdentifier() method.append('_').append(localName); - return NonJavaCharsConverter.convertIdentifier(method.toString(), JavaIdentifier.METHOD); + return JavaIdentifierNormalizer.normalizeSpecificIdentifier(method.toString(), JavaIdentifier.METHOD); } static String createDescription(final SchemaNode schemaNode, final String fullyQualifiedName, @@ -530,7 +530,7 @@ final class AuxiliaryGenUtils { final String leafName = leaf.getQName().getLocalName(); final String leafDesc = encodeAngleBrackets(leaf.getDescription()); final GeneratedPropertyBuilder propBuilder = - toBuilder.addProperty(NonJavaCharsConverter.convertIdentifier(leafName, JavaIdentifier.METHOD)); + toBuilder.addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(leafName, JavaIdentifier.METHOD)); propBuilder.setReadOnly(isReadOnly); propBuilder.setReturnType(returnType); propBuilder.setComment(leafDesc); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 2107c4230d..df05610c04 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -35,7 +35,7 @@ import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; -import org.opendaylight.mdsal.binding.javav2.generator.util.NonJavaCharsConverter; +import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedPropertyBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl; @@ -431,7 +431,7 @@ final class GenHelperUtil { } sb.append(notificationInterface.getName()); - listenerInterface.addMethod(NonJavaCharsConverter.convertIdentifier(sb.toString(), JavaIdentifier.METHOD)) + listenerInterface.addMethod(JavaIdentifierNormalizer.normalizeSpecificIdentifier(sb.toString(), JavaIdentifier.METHOD)) .setAccessModifier(AccessModifier.PUBLIC).addParameter(notificationInterface, "notification") .setComment(encodeAngleBrackets(notification.getDescription())).setReturnType(Types.VOID); return listenerInterface; diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/BaseYangTypes.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/BaseYangTypes.java index ddeef41fb1..01cb8a7024 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/BaseYangTypes.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/BaseYangTypes.java @@ -15,7 +15,7 @@ import java.math.BigInteger; import java.util.Map; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; -import org.opendaylight.mdsal.binding.javav2.generator.util.NonJavaCharsConverter; +import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions; import org.opendaylight.mdsal.binding.javav2.model.api.Type; @@ -211,7 +211,8 @@ public final class BaseYangTypes { @Override public String getParamNameFromType(final TypeDefinition type) { - return NonJavaCharsConverter.convertIdentifier(type.getQName().getLocalName(), JavaIdentifier.METHOD); + return JavaIdentifierNormalizer.normalizeSpecificIdentifier(type.getQName().getLocalName(), + JavaIdentifier.METHOD); } }; diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java index 8b1f38011b..ef2109f478 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java @@ -41,7 +41,7 @@ import java.util.regex.Pattern; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; -import org.opendaylight.mdsal.binding.javav2.generator.util.NonJavaCharsConverter; +import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedPropertyBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl; @@ -317,7 +317,7 @@ public final class TypeProviderImpl implements TypeProvider { for (final Bit bit : bitList) { final String name = bit.getName(); genPropertyBuilder = - genTOBuilder.addProperty(NonJavaCharsConverter.convertIdentifier(name, JavaIdentifier.METHOD)); + genTOBuilder.addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(name, JavaIdentifier.METHOD)); genPropertyBuilder.setReadOnly(true); genPropertyBuilder.setReturnType(BaseYangTypes.BOOLEAN_TYPE); @@ -457,7 +457,7 @@ public final class TypeProviderImpl implements TypeProvider { final String basePackageName = BindingMapping.getRootPackageName(module); final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, typeDefinition .getPath(), BindingNamespaceType.Typedef); - final String genTOName = NonJavaCharsConverter.normalizeClassIdentifier(packageName, typedefName); + final String genTOName = JavaIdentifierNormalizer.normalizeClassIdentifier(packageName, typedefName); final String name = packageName + "." + genTOName; if (!(returnType.getFullyQualifiedName().equals(name))) { returnType = shadedTOWithRestrictions(gto, r); @@ -781,7 +781,7 @@ public final class TypeProviderImpl implements TypeProvider { final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, identity.getPath (), BindingNamespaceType.Typedef); final String genTypeName = - NonJavaCharsConverter.normalizeClassIdentifier(packageName, identity.getQName().getLocalName()); + JavaIdentifierNormalizer.normalizeClassIdentifier(packageName, identity.getQName().getLocalName()); final Type baseType = Types.typeForClass(Class.class); final Type paramType = Types.wildcardTypeFor(packageName, genTypeName); @@ -854,7 +854,7 @@ public final class TypeProviderImpl implements TypeProvider { private static void updateUnionTypeAsProperty(final GeneratedTOBuilder unionGenTransObject, final Type type, final String propertyName) { if (unionGenTransObject != null && type != null && !unionGenTransObject.containsProperty(propertyName)) { final GeneratedPropertyBuilder propBuilder = unionGenTransObject - .addProperty(NonJavaCharsConverter.convertIdentifier(propertyName, JavaIdentifier.METHOD)); + .addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(propertyName, JavaIdentifier.METHOD)); propBuilder.setReturnType(type); unionGenTransObject.addEqualsIdentity(propBuilder); @@ -896,7 +896,7 @@ public final class TypeProviderImpl implements TypeProvider { final GeneratedPropertyBuilder propertyBuilder; propertyBuilder = parentUnionGenTOBuilder - .addProperty(NonJavaCharsConverter.convertIdentifier(newTOBuilderName, JavaIdentifier.METHOD)); + .addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(newTOBuilderName, JavaIdentifier.METHOD)); propertyBuilder.setReturnType(subUnionGenTOBUilders.get(0)); parentUnionGenTOBuilder.addEqualsIdentity(propertyBuilder); parentUnionGenTOBuilder.addToStringProperty(propertyBuilder); diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/AbstractBaseType.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/AbstractBaseType.java index bd0b0478c3..4615d2791e 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/AbstractBaseType.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/AbstractBaseType.java @@ -42,8 +42,8 @@ public abstract class AbstractBaseType implements Type { protected AbstractBaseType(final String pkName, final String name) { Preconditions.checkNotNull(pkName, "Package Name for Generated Type cannot be null!"); Preconditions.checkNotNull(name, "Name of Generated Type cannot be null!"); - this.packageName = NonJavaCharsConverter.convertFullPackageName(pkName); - this.name = NonJavaCharsConverter.normalizeClassIdentifier(pkName, name); + this.packageName = JavaIdentifierNormalizer.normalizeFullPackageName(pkName); + this.name = JavaIdentifierNormalizer.normalizeClassIdentifier(pkName, name); } /** @@ -65,8 +65,8 @@ public abstract class AbstractBaseType implements Type { this.packageName = pkName; this.name = name; } else { - this.packageName = NonJavaCharsConverter.convertFullPackageName(pkName); - this.name = NonJavaCharsConverter.normalizeClassIdentifier(pkName, name); + this.packageName = JavaIdentifierNormalizer.normalizeFullPackageName(pkName); + this.name = JavaIdentifierNormalizer.normalizeClassIdentifier(pkName, name); } } diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java index bb3905c482..184a908934 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java @@ -172,9 +172,9 @@ public final class BindingGeneratorUtil { sb.append(basePackageName) .append('.') .append(namespaceType.getPackagePrefix()); - return NonJavaCharsConverter.convertFullPackageName(sb.toString()); + return JavaIdentifierNormalizer.normalizeFullPackageName(sb.toString()); } - return NonJavaCharsConverter.convertFullPackageName(basePackageName); + return JavaIdentifierNormalizer.normalizeFullPackageName(basePackageName); } return generateNormalizedPackageName(basePackageName, pathFromRoot, size, namespaceType); @@ -372,7 +372,7 @@ public final class BindingGeneratorUtil { final String nodeLocalName = iterator.next().getLocalName(); builder.append(nodeLocalName); } - final String normalizedPackageName = NonJavaCharsConverter.convertFullPackageName(builder.toString()); + final String normalizedPackageName = JavaIdentifierNormalizer.normalizeFullPackageName(builder.toString()); // Prevent duplication of input PACKAGE_INTERNER.intern(normalizedPackageName); return normalizedPackageName; diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/NonJavaCharsConverter.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java similarity index 84% rename from binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/NonJavaCharsConverter.java rename to binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java index f532d94e5a..c8268adf7e 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/NonJavaCharsConverter.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java @@ -9,25 +9,29 @@ package org.opendaylight.mdsal.binding.javav2.generator.util; import com.google.common.annotations.Beta; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.ListMultimap; import java.util.List; +import java.util.Set; import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration; import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration.Pair; import org.opendaylight.mdsal.binding.javav2.util.BindingMapping; /** - * This util class converts every non-java char in identifier to java char by its unicode name - * (JAVA SE - * SPEFICIATIONS - Identifiers). There are special types of mapping non-java chars to original - * identifiers according to specific {@linkplain JavaIdentifier java type}: + * This util class converts every non-java char in identifier to java char by + * its unicode name (JAVA SE + * SPECIFICATIONS - Identifiers). There are special types of mapping + * non-java chars to original identifiers according to specific + * {@linkplain JavaIdentifier java type}: *