Do not confuse nested type with available types 47/74547/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 26 Jul 2018 18:42:56 +0000 (20:42 +0200)
committerRobert Varga <nite@hq.sk>
Thu, 26 Jul 2018 19:42:38 +0000 (19:42 +0000)
Nested types imply the same package, which is not acurate in this
context. Fix this by populating conflictingNames and mark it for
possible future improvement.

Change-Id: Icca087257eaf0c63b9a44204368dd48552da01a4
JIRA: MDSAL-365
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java

index 9a25876d64be5f5ffbc17c0f94abef31caaa31ac..0d368f0252035d983d6e3af79634e373e3cf45d6 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.mdsal.binding.java.api.generator;
 
-import static com.google.common.collect.ImmutableSet.toImmutableSet;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableMap;
@@ -15,6 +14,7 @@ import com.google.common.collect.ImmutableMap.Builder;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.concurrent.NotThreadSafe;
@@ -49,27 +49,26 @@ abstract class AbstractJavaGeneratedType {
         for (GeneratedType type : Iterables.concat(genType.getEnclosedTypes(), genType.getEnumerations())) {
             b.put(type.getIdentifier().simpleName(), new NestedJavaGeneratedType(this, type));
         }
-        collectInheritedEnclosedTypes(b, genType);
-
         enclosedTypes = b.build();
 
+        final Set<String> cb = new HashSet<>();
         if (genType instanceof Enumeration) {
-            conflictingNames = ((Enumeration) genType).getValues().stream().map(Pair::getMappedName)
-                    .collect(toImmutableSet());
-        } else {
-            conflictingNames = ImmutableSet.of();
+            ((Enumeration) genType).getValues().stream().map(Pair::getMappedName).forEach(cb::add);
         }
+        // TODO: perhaps we can do something smarter to actually access the types
+        collectAccessibleTypes(cb, genType);
+
+        conflictingNames = ImmutableSet.copyOf(cb);
     }
 
-    private void collectInheritedEnclosedTypes(Builder<String, NestedJavaGeneratedType> builder,
-            GeneratedType type) {
+    private void collectAccessibleTypes(Set<String> set, GeneratedType type) {
         for (Type impl : type.getImplements()) {
             if (impl instanceof GeneratedType) {
                 final GeneratedType genType = (GeneratedType) impl;
                 for (GeneratedType inner : Iterables.concat(genType.getEnclosedTypes(), genType.getEnumerations())) {
-                    builder.put(inner.getIdentifier().simpleName(), new NestedJavaGeneratedType(this, inner));
+                    set.add(inner.getIdentifier().simpleName());
                 }
-                collectInheritedEnclosedTypes(builder, genType);
+                collectAccessibleTypes(set, genType);
             }
         }
     }