@@ -238,35 +238,38 @@ def extract_relationships(self) -> None:
238
238
# Track processed attributes to avoid duplicates
239
239
processed_attrs = set ()
240
240
241
- # Composition links
241
+ # Process in priority order: Composition > Aggregation > Association
242
+
243
+ # 1. Composition links (highest priority)
242
244
for name , values in list (node .compositions_type .items ()):
245
+ if not self .show_attr (name ):
246
+ continue
243
247
for value in values :
244
248
self .assign_association_relationship (
245
249
value , obj , name , "composition"
246
250
)
247
251
processed_attrs .add (name )
248
252
249
- # Aggregation links
253
+ # 2. Aggregation links (medium priority)
250
254
for name , values in list (node .aggregations_type .items ()):
255
+ if not self .show_attr (name ) or name in processed_attrs :
256
+ continue
251
257
for value in values :
252
- if not self .show_attr (name ):
253
- continue
254
-
255
258
self .assign_association_relationship (
256
259
value , obj , name , "aggregation"
257
260
)
261
+ processed_attrs .add (name )
258
262
259
- # Association links
263
+ # 3. Association links (lowest priority)
260
264
associations = node .associations_type .copy ()
261
265
for name , values in node .locals_type .items ():
262
266
if name not in associations :
263
267
associations [name ] = values
264
268
265
269
for name , values in associations .items ():
270
+ if not self .show_attr (name ) or name in processed_attrs :
271
+ continue
266
272
for value in values :
267
- if not self .show_attr (name ):
268
- continue
269
-
270
273
self .assign_association_relationship (
271
274
value , obj , name , "association"
272
275
)
0 commit comments