import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Streams;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.concurrent.NotThreadSafe;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.mdsal.binding.model.api.Enumeration;
+import org.opendaylight.mdsal.binding.model.api.Enumeration.Pair;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
b.put(type.getIdentifier().simpleName(), new NestedJavaGeneratedType(this, type));
}
enclosedTypes = b.build();
- conflictingNames = ImmutableSet.of();
- }
- AbstractJavaGeneratedType(final JavaTypeName name, final GeneratedType genType) {
- this.name = requireNonNull(name);
- enclosedTypes = ImmutableMap.of();
+ final Set<String> cb = new HashSet<>();
+ if (genType instanceof Enumeration) {
+ ((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);
+ }
- // This is a workaround for BuilderTemplate, which does not model itself correctly -- it should generate
- // a GeneratedType for the Builder with a nested type for the implementation, which really should be
- // a different template which gets generated as an inner type.
- conflictingNames = Streams.concat(genType.getEnclosedTypes().stream(), genType.getEnumerations().stream())
- .map(type -> type.getIdentifier().simpleName()).collect(ImmutableSet.toImmutableSet());
+ 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())) {
+ set.add(inner.getIdentifier().simpleName());
+ }
+ collectAccessibleTypes(set, genType);
+ }
+ }
}
final JavaTypeName getName() {