diff --git a/lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java b/lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java index b0037e4..8eb80cc 100644 --- a/lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java +++ b/lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java @@ -340,7 +340,7 @@ private void acceptClass(MetaDescription metaDescription) throws IOException { } // Properties from my traits that are not in my own properties Set propertyDescriptionSet = new HashSet<>(); - metaDescription.getTraits().stream() + metaDescription.computeAllTraits().stream() .map(c -> c.getProperties().stream() .filter(traitProperty -> propertyDescriptions.stream().noneMatch(myProperty -> myProperty.getName().equals(traitProperty.getName()))) .collect(Collectors.toList())) @@ -365,7 +365,7 @@ private void acceptTrait(FM3Trait m) throws IOException { code.setTraits(m.getTraits().stream().map(FM3Type::getName).collect(Collectors.toList())); code.addImport(FameDescription.class); code.addImport(FamePackage.class); - for (FM3Trait t : m.computeAllTraits()) { + for (FM3Trait t : m.getTraits()) { code.addImport(packageName(t.getPackage()), t.getName()); } diff --git a/lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java index dbae859..42476c6 100644 --- a/lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java +++ b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java @@ -86,13 +86,21 @@ public FM3Trait(String name) { super(name); } - FM3Type traitOwner; - @FameProperty(name = "owner", opposite = "traits") - public FM3Type getTraitOwner() { - return traitOwner; + private Map users = new HashMap(); + + @FameProperty(name = "users", opposite = "traits") + public Collection getUsers() { + return users.values(); } - public void setTraitOwner(FM3Type traitOwner){ - this.traitOwner = traitOwner; + + public void setUsers(Collection users){ + for (FM3Type user : users) { + this.addUser(user); + } } -} + public void addUser(FM3Type user) { + users.put(user.getName(), user); + } + +} \ No newline at end of file diff --git a/lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java index aa64b77..4398bbb 100644 --- a/lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java +++ b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java @@ -156,7 +156,7 @@ public void setTraits(Collection traits) { } } - @FameProperty(name="traits", opposite = "owner") + @FameProperty(name="traits", opposite = "users") public Collection getTraits() { return traits.values(); } @@ -174,11 +174,16 @@ public boolean isRoot() { } public Set computeAllTraits() { - Set traits = new HashSet<>(); - traits.addAll(getTraits()); - for (FM3Trait t : traits) { - traits.addAll(t.computeAllTraits()); + Set computedTraits = new HashSet<>(); + computedTraits.addAll(getTraits()); + Set transitiveTraits = new HashSet<>(); + + for (FM3Trait t : computedTraits) { + transitiveTraits.addAll(t.computeAllTraits()); } - return traits; + + computedTraits.addAll(transitiveTraits); + return computedTraits; } + }