org_aspectj_ajde_core_tests_ShowWeaveMessagesTest_java
org.aspectj.weaver.model.AsmRelationshipProvider
private static String findOrFakeUpNode(AsmManager model, ResolvedType onType) {
        IHierarchy hierarchy = model.getHierarchy();
        ISourceLocation sourceLocation = onType.getSourceLocation();
        String canonicalFilePath = model.getCanonicalFilePath(sourceLocation.getSourceFile());
        int lineNumber = sourceLocation.getLine();
        IProgramElement node = hierarchy.findNodeForSourceFile(hierarchy.getRoot(), canonicalFilePath);
        if (node == null) {
            String jarPath;
            String element;
            String bpath = onType.getBinaryPath();
            if (bpath == null) {
                return model.getHandleProvider().createHandleIdentifier(AsmRelationshipProvider.createFileStructureNode(model, canonicalFilePath));
            }
            IProgramElement programElement = model.getHierarchy().getRoot();
            StringBuilder phantomHandle = new StringBuilder();
            phantomHandle.append(programElement.getHandleIdentifier());
            phantomHandle.append(HandleProviderDelimiter.PACKAGEFRAGMENTROOT.getDelimiter()).append(HandleProviderDelimiter.PHANTOM.getDelimiter());
            int pos = bpath.indexOf(33);
            if (pos != -1 && (element = model.getHandleElementForInpath(jarPath = bpath.substring(0, pos))) != null) {
                phantomHandle.append(element);
            }
            String packageName = onType.getPackageName();
            phantomHandle.append(HandleProviderDelimiter.PACKAGEFRAGMENT.getDelimiter()).append(packageName);
            int dotClassPosition = bpath.lastIndexOf(".class");
            if (dotClassPosition == -1) {
                phantomHandle.append(HandleProviderDelimiter.CLASSFILE.getDelimiter()).append("UNKNOWN.class");
            } else {
                char ch;
                int startPosition;
                for (startPosition = dotClassPosition; startPosition > 0 && (ch = bpath.charAt(startPosition)) != '/' && ch != '\\' && ch != '!'; --startPosition) {
                }
                String classFile = bpath.substring(startPosition + 1, dotClassPosition + 6);
                phantomHandle.append(HandleProviderDelimiter.CLASSFILE.getDelimiter()).append(classFile);
            }
            phantomHandle.append(HandleProviderDelimiter.TYPE.getDelimiter()).append(onType.getClassName());
            return phantomHandle.toString();
        }
        IProgramElement closernode = hierarchy.findCloserMatchForLineNumber(node, lineNumber);
        if (closernode == null) {
            return node.getHandleIdentifier();
        }
        return closernode.getHandleIdentifier();
    }
 -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.io.File.getPath(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT]