Back to index

lightning-sunbird  0.9+nobinonly
Static Public Member Functions | Static Package Attributes
FileLocator Class Reference
Collaboration diagram for FileLocator:
Collaboration graph
[legend]

List of all members.

Static Public Member Functions

static String getFileLocation (byte[] line) throws IOException
static String getFileLocation (String line) throws IOException

Static Package Attributes

static boolean USE_BLAME = false
static boolean ASSIGN_BLAME = false
static final String MOZILLA_BASE = "/mozilla/"
static final String LXR_BASE = "http://lxr.mozilla.org/seamonkey/source/"
static final String BONSAI_BASE = "http://bonsai.mozilla.org/cvsblame.cgi?file="
static final String NS_BASE = "/ns/"
static final String NS_BONSAI_URL = "http://warp.mcom.com/webtools/bonsai/cvsblame.cgi?root=/m/src&file="
static final Hashtable fileTables = new Hashtable()
static final RevisionTable revisionTable = new RevisionTable()
static final BlameTable blameTable = new BlameTable()
static final Hashtable addr2LineTable = new Hashtable()

Detailed Description

Definition at line 40 of file FileLocator.java.


Member Function Documentation

static String FileLocator.getFileLocation ( byte[]  line) throws IOException [inline, static]

Definition at line 56 of file FileLocator.java.

                                                                         {
        return getFileLocation(new String(line));
    }

Here is the call graph for this function:

Here is the caller graph for this function:

static String FileLocator.getFileLocation ( String  line) throws IOException [inline, static]

Definition at line 60 of file FileLocator.java.

                                                                            {
        // start from the LAST occurence of '[', as C++ symbols can include it.
              int leftBracket = line.lastIndexOf('[');
              if (leftBracket == -1)
                     return line;
              int rightBracket = line.indexOf(']', leftBracket + 1);
              if (rightBracket == -1)
                     return line;
        
        // generalize for Linux & Mac versions of the Leak detector.
        String fullPath;
        int lineNumber, lineAnchor;
        int comma = line.indexOf(',', leftBracket + 1);
        if (comma != -1) {
            // Mac format: unmangled_symbol[mac_path,byte_offset]
            String macPath = line.substring(leftBracket + 1, comma);
            fullPath = "/" + macPath.replace(':', '/');
              
            // compute the line number in the file.
            int offset = 0;
            try {
                offset = Integer.parseInt(line.substring(comma + 1, rightBracket));
            } catch (NumberFormatException nfe) {
                return line;
            } catch (StringIndexOutOfBoundsException sobe) {
                System.err.println("### Error processing line: " + line);
                System.err.println("### comma = " + comma + ", rightBracket = " + rightBracket);
                System.err.flush();
                return line;
            }
              
            FileTable table = (FileTable) fileTables.get(fullPath);
            if (table == null) {
                table = new FileTable(fullPath);
                fileTables.put(fullPath, table);
            }
            lineNumber = 1 + table.getLine(offset);
            lineAnchor = lineNumber;
        } else {
            int space = line.indexOf(' ', leftBracket + 1);
            if (space != -1) {
                // Raw Linux format: mangled_symbol[library +address]
                String library = line.substring(leftBracket + 1, space);
                String address = line.substring(space + 1, rightBracket);
                Addr2Line addr2line = (Addr2Line) addr2LineTable.get(library);
                if (addr2line == null) {
                    System.out.println("new Addr2Line["+library+"]");
                    addr2line = new Addr2Line(library);
                    addr2LineTable.put(library, addr2line);
                }
                line = addr2line.getLine(address);
                return getFileLocation(line);
            } else {
                // Linux format: unmangled_symbol[unix_path:line_number]
                int colon = line.indexOf(':', leftBracket + 1);
                fullPath = line.substring(leftBracket + 1, colon);
                try {
                    lineNumber = Integer.parseInt(line.substring(colon + 1, rightBracket));
                } catch (NumberFormatException nfe) {
                    return line;
                }
                lineAnchor = lineNumber;
            }
        }
        
              // compute the URL of the file.
              int mozillaIndex = fullPath.indexOf(MOZILLA_BASE);
              String locationURL = null, blameInfo = "";
              if (mozillaIndex > -1) {
                     // if using blame, hilite the line number of the call, and include the revision.
                     String mozillaPath = fullPath.substring(mozillaIndex + 1);
                     String revision = revisionTable.getRevision(fullPath);
                     String bonsaiPath = mozillaPath + (revision.length() > 0 ? "&rev=" + revision : "");
                     if (USE_BLAME) {
                            locationURL = BONSAI_BASE + bonsaiPath + "&mark=" + lineNumber;
                            if (lineAnchor > 10)
                                   lineAnchor -= 10;
                     } else {
                            locationURL = LXR_BASE + mozillaPath.substring(MOZILLA_BASE.length());
                     }
                     if (ASSIGN_BLAME)
                            blameInfo = " (" + blameTable.getBlame(bonsaiPath, lineNumber) + ")";
              } else {
                     int nsIndex = fullPath.indexOf(NS_BASE);
                     if (nsIndex > -1 && USE_BLAME) {
                            // if using blame, hilite the line number of the call, and include the revision.
                            String nsPath = fullPath.substring(nsIndex + 1);
                            String revision = revisionTable.getRevision(fullPath);
                            String bonsaiPath = nsPath + (revision.length() > 0 ? "&rev=" + revision : "");
                            locationURL = NS_BONSAI_URL + bonsaiPath + "&mark=" + lineNumber;
                            if (lineAnchor > 10)
                                   lineAnchor -= 10;
                            if (ASSIGN_BLAME)
                                   blameInfo = " (" + blameTable.getBlame(bonsaiPath, lineNumber) + ")";
                     } else {
                            locationURL = "file://" + fullPath;
                     }
              }
              
              return "<A HREF=\"" + locationURL + "#" + lineAnchor + "\"TARGET=\"SOURCE\">" + line.substring(0, leftBracket) + "</A>" + blameInfo;
       }

Here is the call graph for this function:


Member Data Documentation

final Hashtable FileLocator.addr2LineTable = new Hashtable() [static, package]

Definition at line 54 of file FileLocator.java.

boolean FileLocator.ASSIGN_BLAME = false [static, package]

Definition at line 42 of file FileLocator.java.

final BlameTable FileLocator.blameTable = new BlameTable() [static, package]

Definition at line 53 of file FileLocator.java.

final String FileLocator.BONSAI_BASE = "http://bonsai.mozilla.org/cvsblame.cgi?file=" [static, package]

Definition at line 46 of file FileLocator.java.

final Hashtable FileLocator.fileTables = new Hashtable() [static, package]

Definition at line 51 of file FileLocator.java.

final String FileLocator.LXR_BASE = "http://lxr.mozilla.org/seamonkey/source/" [static, package]

Definition at line 45 of file FileLocator.java.

final String FileLocator.MOZILLA_BASE = "/mozilla/" [static, package]

Definition at line 44 of file FileLocator.java.

final String FileLocator.NS_BASE = "/ns/" [static, package]

Definition at line 48 of file FileLocator.java.

final String FileLocator.NS_BONSAI_URL = "http://warp.mcom.com/webtools/bonsai/cvsblame.cgi?root=/m/src&file=" [static, package]

Definition at line 49 of file FileLocator.java.

final RevisionTable FileLocator.revisionTable = new RevisionTable() [static, package]

Definition at line 52 of file FileLocator.java.

boolean FileLocator.USE_BLAME = false [static, package]

Definition at line 41 of file FileLocator.java.


The documentation for this class was generated from the following file: