diff --git a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/debug/IStack.java b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/debug/IStack.java index 7d26f13928f..107b0fdabec 100644 --- a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/debug/IStack.java +++ b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/debug/IStack.java @@ -33,6 +33,7 @@ public interface IStack extends IDataModelService { * Stack frame information. */ public interface IFrameData extends IDataModelData { + int getLevel(); IAddress getAddress(); String getFile(); String getFunction(); diff --git a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/model/DMCs.java b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/model/DMCs.java index 14d77050f14..923621244b6 100644 --- a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/model/DMCs.java +++ b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/model/DMCs.java @@ -43,4 +43,29 @@ public class DMCs { return null; } + /** + * Checks all ancestors for a given DMC to see if the given + * potentialAncestor is in fact an ancestor. + * @param dmc DMC who's ancestors to check. + * @param potentialAncestor Ancestor DMC to look for. + * @return true if a match is found. + */ + public static boolean isAncestorOf(IDataModelContext dmc, IDataModelContext potentialAncestor) { + // Check the direct parents for a match. + for (IDataModelContext parentDmc : dmc.getParents()) { + if (potentialAncestor.equals(parentDmc)) { + return true; + } + } + + // Recursively check the parents' parents for a match. + for (IDataModelContext parentDmc : dmc.getParents()) { + if (isAncestorOf(parentDmc, potentialAncestor)) { + return true; + } + } + + // No match. + return false; + } }