Skip to content

Commit 65aa265

Browse files
ctf: make lookuprole recursive
Makes CTF too deep structs still work Change-Id: Ic8a75dd8c798945779bbcf2a7de3fcab7195decb Signed-off-by: Matthew Khouzam <[email protected]>
1 parent 512233e commit 65aa265

File tree

1 file changed

+22
-2
lines changed
  • ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types

1 file changed

+22
-2
lines changed

ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,31 @@ public Definition lookupDefinition(String lookupPath, ScopedDefinition defintion
236236
* @since 4.4
237237
*/
238238
public IDefinition lookupRole(String role) {
239+
if (role == null) {
240+
return null;
241+
}
239242
for (IDefinition def : fDefinitions) {
240-
IDeclaration decl = def.getDeclaration();
241-
if (role != null && role.equals(decl.getRole())) {
243+
if (role.equals(def.getDeclaration().getRole())) {
242244
return def;
243245
}
246+
IDefinition result = lookupRoleRecursive(def, role);
247+
if (result != null) {
248+
return result;
249+
}
250+
}
251+
return null;
252+
}
253+
254+
private IDefinition lookupRoleRecursive(IDefinition def, String role) {
255+
if (def instanceof StructDefinition) {
256+
return ((StructDefinition) def).lookupRole(role);
257+
}
258+
if (def instanceof VariantDefinition) {
259+
IDefinition current = ((VariantDefinition) def).getCurrentField();
260+
if (role.equals(current.getDeclaration().getRole())) {
261+
return current;
262+
}
263+
return lookupRoleRecursive(current, role);
244264
}
245265
return null;
246266
}

0 commit comments

Comments
 (0)