Add generator references fo CollisionDomain 02/96502/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 9 Jun 2021 18:06:00 +0000 (20:06 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 9 Jun 2021 18:15:56 +0000 (20:15 +0200)
Having a generator reference is handy for diagnosing conflicts.

Change-Id: If5ff5b7c5862594cb07b7a1cdcece64f2ad2da6b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractAugmentGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractCompositeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractImplicitGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/CollisionDomain.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/KeyGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ModuleGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcContainerGenerator.java

index d0351cb5a24b756af9589ac122b17cffeb5b229f..30373159d84e9f06447fd37d5363362ade74ccea 100644 (file)
@@ -83,7 +83,7 @@ abstract class AbstractAugmentGenerator extends AbstractCompositeGenerator<Augme
         final AbstractQName explicitIdentifier = statement()
             .findFirstEffectiveSubstatementArgument(AugmentIdentifierEffectiveStatement.class).orElse(null);
         if (explicitIdentifier != null) {
-            return domain.addPrimary(new CamelCaseNamingStrategy(StatementNamespace.DEFAULT, explicitIdentifier));
+            return domain.addPrimary(this, new CamelCaseNamingStrategy(StatementNamespace.DEFAULT, explicitIdentifier));
         }
 
         final AbstractCompositeGenerator<?> target = targetGenerator();
@@ -99,7 +99,7 @@ abstract class AbstractAugmentGenerator extends AbstractCompositeGenerator<Augme
             }
         }
 
-        return domain.addSecondary(target.getMember(), String.valueOf(offset), statement().argument());
+        return domain.addSecondary(this, target.getMember(), String.valueOf(offset), statement().argument());
     }
 
     @Override
index 9334af3c85254f40f64e49ef13dbf555d37c519c..9eed2ec4a4190b53e41a951ea72bf3ea1e4f4a7c 100644 (file)
@@ -56,7 +56,7 @@ import org.slf4j.LoggerFactory;
 abstract class AbstractCompositeGenerator<T extends EffectiveStatement<?, ?>> extends AbstractExplicitGenerator<T> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractCompositeGenerator.class);
 
-    private final @NonNull CollisionDomain domain = new CollisionDomain();
+    private final @NonNull CollisionDomain domain = new CollisionDomain(this);
     private final List<Generator> children;
 
     private List<AbstractAugmentGenerator> augments = List.of();
index d91e4d452900ed6a00442fa7c4b4b196459ce51b..0ee1c8b2c9e2d539c3f84a4bd85d882acb9d9d1e 100644 (file)
@@ -149,7 +149,7 @@ public abstract class AbstractExplicitGenerator<T extends EffectiveStatement<?,
 
     @Override
     Member createMember(final CollisionDomain domain) {
-        return domain.addPrimary(new CamelCaseNamingStrategy(namespace(), localName()));
+        return domain.addPrimary(this, new CamelCaseNamingStrategy(namespace(), localName()));
     }
 
     void addAsGetterMethod(final @NonNull GeneratedTypeBuilderBase<?> builder,
index 387a816f2307fedb61c2d09f86f24075e42c5d5a..f1fb55071f3f5d118d41b5a651454942cc0cb01e 100644 (file)
@@ -31,7 +31,7 @@ abstract class AbstractImplicitGenerator extends Generator {
 
     @Override
     final Member createMember(final CollisionDomain domain) {
-        return domain.addSecondary(((ModuleGenerator) getParent()).getPrefixMember(), classSuffix());
+        return domain.addSecondary(this, ((ModuleGenerator) getParent()).getPrefixMember(), classSuffix());
     }
 
     abstract @NonNull String classSuffix();
index c79485fd75da9e022eec049a94562e217f5add99..977d6b4f9619e2db4ea05eb1f96d1be5bff40016 100644 (file)
@@ -27,10 +27,16 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 
 final class CollisionDomain {
     abstract class Member {
+        private final Generator gen;
+
         private List<Secondary> secondaries = List.of();
         private String currentPackage;
         private String currentClass;
 
+        Member(final Generator gen) {
+            this.gen = requireNonNull(gen);
+        }
+
         final void addSecondary(final Secondary secondary) {
             if (secondaries.isEmpty()) {
                 secondaries = new ArrayList<>();
@@ -74,14 +80,15 @@ final class CollisionDomain {
         }
 
         ToStringHelper addToStringAttributes(final ToStringHelper helper) {
-            return helper.add("class", currentClass).add("package", currentPackage);
+            return helper.add("gen", gen).add("class", currentClass).add("package", currentPackage);
         }
     }
 
     private class Primary extends Member {
         private ClassNamingStrategy strategy;
 
-        Primary(final ClassNamingStrategy strategy) {
+        Primary(final Generator gen, final ClassNamingStrategy strategy) {
+            super(gen);
             this.strategy = requireNonNull(strategy);
         }
 
@@ -114,8 +121,8 @@ final class CollisionDomain {
     }
 
     private final class Prefix extends Primary {
-        Prefix(final ClassNamingStrategy strategy) {
-            super(strategy);
+        Prefix(final Generator gen, final ClassNamingStrategy strategy) {
+            super(gen, strategy);
         }
     }
 
@@ -123,7 +130,8 @@ final class CollisionDomain {
         private final String classSuffix;
         final Member classPrimary;
 
-        Secondary(final Member primary, final String classSuffix) {
+        Secondary(final Generator gen, final Member primary, final String classSuffix) {
+            super(gen);
             this.classPrimary = requireNonNull(primary);
             this.classSuffix = requireNonNull(classSuffix);
             primary.addSecondary(this);
@@ -145,8 +153,8 @@ final class CollisionDomain {
     }
 
     private final class LeafSecondary extends Secondary {
-        LeafSecondary(final Member classPrimary, final String classSuffix) {
-            super(classPrimary, classSuffix);
+        LeafSecondary(final Generator gen, final Member classPrimary, final String classSuffix) {
+            super(gen, classPrimary, classSuffix);
         }
 
         @Override
@@ -159,8 +167,9 @@ final class CollisionDomain {
     private final class SuffixSecondary extends Secondary {
         private final AbstractQName packageSuffix;
 
-        SuffixSecondary(final Member primaryClass, final String classSuffix, final AbstractQName packageSuffix) {
-            super(primaryClass, classSuffix);
+        SuffixSecondary(final Generator gen, final Member primaryClass, final String classSuffix,
+                final AbstractQName packageSuffix) {
+            super(gen, primaryClass, classSuffix);
             this.packageSuffix = requireNonNull(packageSuffix);
         }
 
@@ -173,8 +182,9 @@ final class CollisionDomain {
     private final class AugmentSecondary extends Secondary {
         private final SchemaNodeIdentifier packageSuffix;
 
-        AugmentSecondary(final Member primary, final String classSuffix, final SchemaNodeIdentifier packageSuffix) {
-            super(primary, classSuffix);
+        AugmentSecondary(final AbstractAugmentGenerator gen, final Member primary, final String classSuffix,
+                final SchemaNodeIdentifier packageSuffix) {
+            super(gen, primary, classSuffix);
             this.packageSuffix = requireNonNull(packageSuffix);
         }
 
@@ -191,29 +201,36 @@ final class CollisionDomain {
         }
     }
 
+    private final AbstractCompositeGenerator<?> gen;
+
     private List<Member> members = List.of();
     private boolean solved;
 
-    @NonNull Member addPrefix(final ClassNamingStrategy strategy) {
+    CollisionDomain(final AbstractCompositeGenerator<?> gen) {
+        this.gen = requireNonNull(gen);
+    }
+
+    @NonNull Member addPrefix(final Generator memberGen, final ClassNamingStrategy strategy) {
         // Note that contrary to the method name, we are not adding the result to members
-        return new Prefix(strategy);
+        return new Prefix(memberGen, strategy);
     }
 
-    @NonNull Member addPrimary(final ClassNamingStrategy strategy) {
-        return addMember(new Primary(strategy));
+    @NonNull Member addPrimary(final Generator memberGen, final ClassNamingStrategy strategy) {
+        return addMember(new Primary(memberGen, strategy));
     }
 
-    @NonNull Member addSecondary(final Member primary, final String classSuffix) {
-        return addMember(new LeafSecondary(primary, classSuffix));
+    @NonNull Member addSecondary(final Generator memberGen, final Member primary, final String classSuffix) {
+        return addMember(new LeafSecondary(memberGen, primary, classSuffix));
     }
 
-    @NonNull Member addSecondary(final Member primary, final String classSuffix, final AbstractQName packageSuffix) {
-        return addMember(new SuffixSecondary(primary, classSuffix, packageSuffix));
+    @NonNull Member addSecondary(final RpcContainerGenerator memberGen, final Member primary, final String classSuffix,
+            final AbstractQName packageSuffix) {
+        return addMember(new SuffixSecondary(memberGen, primary, classSuffix, packageSuffix));
     }
 
-    @NonNull Member addSecondary(final Member classPrimary, final String classSuffix,
-            final SchemaNodeIdentifier packageSuffix) {
-        return addMember(new AugmentSecondary(classPrimary, classSuffix, packageSuffix));
+    @NonNull Member addSecondary(final AbstractAugmentGenerator memberGen, final Member classPrimary,
+            final String classSuffix, final SchemaNodeIdentifier packageSuffix) {
+        return addMember(new AugmentSecondary(memberGen, classPrimary, classSuffix, packageSuffix));
     }
 
     /*
@@ -275,7 +292,7 @@ final class CollisionDomain {
                             remaining++;
                         }
                     }
-                    checkState(remaining < 2, "Failed to resolve members %s", conflicting);
+                    checkState(remaining < 2, "Failed to solve %s due to naming conflict among %s", this, conflicting);
                 }
             }
         } while (!solved);
@@ -283,6 +300,11 @@ final class CollisionDomain {
         return result;
     }
 
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).add("gen", gen).toString();
+    }
+
     @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "https://github.com/spotbugs/spotbugs/issues/811")
     private @NonNull Member addMember(final @NonNull Member member) {
index 6d3c7f0d223c6f66ada552843cf5e794e4b32bda..3b27958ffc49143545cf9e389d972820a127d5fd 100644 (file)
@@ -41,7 +41,7 @@ final class KeyGenerator extends AbstractExplicitGenerator<KeyEffectiveStatement
 
     @Override
     Member createMember(final CollisionDomain domain) {
-        return domain.addSecondary(listGen.getMember(), SUFFIX);
+        return domain.addSecondary(this, listGen.getMember(), SUFFIX);
     }
 
     @Override
index 013079b3f9a5a5929c6e42b2412e3bf954da44df..18e85c3280098b82be35ddd79e478cf53275e4db 100644 (file)
@@ -50,7 +50,7 @@ public final class ModuleGenerator extends AbstractCompositeGenerator<ModuleEffe
         yangModuleInfo = JavaTypeName.create(javaPackage(), BindingMapping.MODULE_INFO_CLASS_NAME);
         placement = computePlacement();
         prefixMember = placement != ClassPlacement.NONE || haveSecondary()
-            ? domain().addPrefix(new ModuleNamingStrategy(statement.argument())) : null;
+            ? domain().addPrefix(this, new ModuleNamingStrategy(statement.argument())) : null;
     }
 
     private @NonNull ClassPlacement computePlacement() {
@@ -100,7 +100,7 @@ public final class ModuleGenerator extends AbstractCompositeGenerator<ModuleEffe
 
     @Override
     Member createMember(final CollisionDomain domain) {
-        return domain.addSecondary(prefixMember, BindingMapping.DATA_ROOT_SUFFIX);
+        return domain.addSecondary(this, prefixMember, BindingMapping.DATA_ROOT_SUFFIX);
     }
 
     @Override
index 0ad88cd1d45cb325e8ec36d5f2c6167e68bb668e..4643c3a0e896a5da16b43c7c0e5352f9b4dc152d 100644 (file)
@@ -41,6 +41,6 @@ final class RpcContainerGenerator extends OperationContainerGenerator {
 
     @Override
     Member createMember(final CollisionDomain domain) {
-        return domain.addSecondary(getParent().ensureMember(), suffix, statement().argument());
+        return domain.addSecondary(this, getParent().ensureMember(), suffix, statement().argument());
     }
 }