<?xml version="1.0" encoding="UTF-8"?>
<pmd-cpd>
<duplication lines="12" tokens="115">
<file line="111" path="/Users/rgoers/projects/apache/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java"/>
<file line="134" path="/Users/rgoers/projects/apache/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java"/>
<codefragment>
<![CDATA[
            case WAITING: {
                StackTraceElement element = info.getStackTrace()[0];
                String className = element.getClassName();
                String method = element.getMethodName();
                if (className.equals("java.lang.Object") && method.equals("wait")) {
                    sb.append(" (on object monitor");
                    if (info.getLockOwnerName() != null) {
                        sb.append(" owned by \"");
                        sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
                    }
                    sb.append(")");
                } else if (className.equals("java.lang.Thread") && method.equals("join")) {
]]>
</codefragment>
</duplication>
<duplication lines="13" tokens="100">
<file line="121" path="/Users/rgoers/projects/apache/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java"/>
<file line="146" path="/Users/rgoers/projects/apache/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java"/>
<codefragment>
<![CDATA[
                    sb.append(")");
                } else if (className.equals("java.lang.Thread") && method.equals("join")) {
                    sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(")");
                } else {
                    sb.append(" (parking for lock");
                    if (info.getLockOwnerName() != null) {
                        sb.append(" owned by \"");
                        sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
                    }
                    sb.append(")");
                }
                break;
            }
]]>
</codefragment>
</duplication>
</pmd-cpd>