docs: public String[] getCodeBaseLocForPerm(Permission perm) {
  
          final Permission inPerm = perm;
  
          return AccessController.doPrivileged(new java.security.PrivilegedAction<String[]>() {
  
              @Override
              public String[] run() {
  
                  Class<?>[] classes = getClassContext();
  
                  StringBuffer sb = new StringBuffer(classes.length * 100);
                  sb.append(lineSep);
  
                  // one for offending class and the other for code base
                  // location
                  String[] retMsg = new String[2];
  
                  ProtectionDomain pd2 = null;
                  for (int i = 0; i < classes.length; i++) {
  
                      Class<?> clazz = classes[i];
                      ProtectionDomain pd = clazz.getProtectionDomain();
  
                      // check for occurrence of checkPermission from stack
                      if (classes[i].getName().indexOf("com.ibm.ws.kernel.launch.internal.MissingDoPrivDetectionSecurityManager") != -1) {
  
                          // found SecurityManager, start to go through
                          // the stack starting next class
                          for (int j = i + 1; j < classes.length; j++) {
  
                              pd2 = classes[j].getProtectionDomain();
  
                              if (isOffendingClass(classes, j, pd2, inPerm)) {
                                  retMsg[0] = lineSep + lineSep +
                                              "     " + classes[j].getName() + "  in  " + "{" + getCodeSource(pd2) + "}" +
                                              lineSep +
                                              lineSep;
  
                                  StringBuffer sb2 = new StringBuffer(classes.length * 100);
                                  sb2.append(lineSep);
                                  sb2.append(classes[j].getName()).append(" : ").append(getCodeSource(pd2) + lineSep);
                                  sb2.append("  ").append(permissionToString(pd2.getCodeSource(), classes[j].getClassLoader(), pd2.getPermissions()))
                                                  .append(lineSep);
  
                                  break;
                              }
  
                          }
  
                      }
  
                      java.security.CodeSource cs = pd.getCodeSource();
                      String csStr = getCodeSource(pd);
  
                      // class name : location
                      sb.append(classes[i].getName()).append(" : ").append(csStr + lineSep);
                      sb.append("  ").append(permissionToString(cs, clazz.getClassLoader(), pd.getPermissions()))
                                      .append(lineSep);
                  }
  
                  Tr.info(tc, "java.security.permdenied.class.info", retMsg[0]);
                  Tr.info(tc, "java.security.permdenied.codebaseloc.info", sb.toString());
  
                  retMsg[1] = getCodeSource(pd2).concat(lineSep);
                  return retMsg;
              }
          });
      }