// Path: api/src/main/java/com/geewhiz/pacify/defect/DefectException.java
// public abstract class DefectException extends Exception implements Defect {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private PMarker           pMarker;
//     private PArchive          pArchive;
//     private PFile             pFile;
//     private PProperty         pProperty;
// 
//     public DefectException() {
//     }
// 
//     public DefectException(PMarker pMarker) {
//         this.pMarker = pMarker;
//     }
// 
//     public DefectException(PArchive pArchive) {
//         this.pMarker = pArchive.getPMarker();
//         this.pArchive = pArchive;
//     }
// 
//     public DefectException(PFile pFile) {
//         this.pMarker = pFile.getPMarker();
//         this.pArchive = pFile.getPArchive();
//         this.pFile = pFile;
//     }
// 
//     public DefectException(PProperty pProperty) {
//         this.pProperty = pProperty;
//         this.pFile = pProperty.getPFile();
//         this.pMarker = pFile.getPMarker();
//         this.pArchive = pFile.getPArchive();
//     }
// 
//     public PMarker getPMarker() {
//         return pMarker;
//     }
// 
//     public PArchive getPArchive() {
//         return pArchive;
//     }
// 
//     public PFile getPFile() {
//         return pFile;
//     }
// 
//     public PProperty getPProperty() {
//         return pProperty;
//     }
// 
//     public String getDefectMessage() {
//         StringBuffer result = new StringBuffer();
//         result.append(this.getClass().getSimpleName()).append(":");
// 
//         if (pMarker != null) {
//             result.append(String.format("\n\t[MarkerFile=%s]", pMarker.getFile().getAbsolutePath()));
//         }
//         if (pArchive != null) {
//             result.append(String.format("\n\t[Archive=%s]", pArchive.getFile().getAbsolutePath()));
//             if (pFile != null) {
//                 result.append(String.format("\n\t[Archive File=%s]", pFile.getRelativePath()));
//             }
//         } else {
//             if (pFile != null) {
//                 result.append(String.format("\n\t[File=%s]", pFile.getRelativePath()));
//             }
//         }
// 
//         if (pProperty != null) {
//             result.append(String.format("\n\t[Property=%s]", pProperty.getName()));
//         }
// 
//         return result.toString();
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((pArchive == null) ? 0 : pArchive.hashCode());
//         result = prime * result + ((pFile == null) ? 0 : pFile.hashCode());
//         result = prime * result + ((pMarker == null) ? 0 : pMarker.hashCode());
//         result = prime * result + ((pProperty == null) ? 0 : pProperty.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         DefectException other = (DefectException) obj;
//         if (pArchive == null) {
//             if (other.pArchive != null) {
//                 return false;
//             }
//         } else if (!pArchive.equals(other.pArchive)) {
//             return false;
//         }
//         if (pFile == null) {
//             if (other.pFile != null) {
//                 return false;
//             }
//         } else if (!pFile.equals(other.pFile)) {
//             return false;
//         }
//         if (pMarker == null) {
//             if (other.pMarker != null) {
//                 return false;
//             }
//         } else if (!pMarker.equals(other.pMarker)) {
//             return false;
//         }
//         if (pProperty == null) {
//             if (other.pProperty != null) {
//                 return false;
//             }
//         } else if (!pProperty.equals(other.pProperty)) {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: api/src/main/java/com/geewhiz/pacify/resolver/PropertyResolver.java
// public interface PropertyResolver extends Comparable<PropertyResolver> {
// 
//     boolean containsProperty(String property);
// 
//     boolean isProtectedProperty(String property);
// 
//     String getPropertyValue(String key);
// 
//     Set<String> getReferencedProperties(String property);
// 
//     Set<String> getPropertyKeys();
// 
//     String getEncoding();
// 
//     String getPropertyResolverDescription();
// 
//     LinkedHashSet<Defect> checkForDuplicateEntry();
// 
//     FilterSet createFilterSet();
// 
//     boolean propertyUsesToken(String property);
// 
//     String getBeginToken();
// 
//     String getEndToken();
// 
// }


import com.geewhiz.pacify.resolver.PropertyResolver;
import com.geewhiz.pacify.defect.DefectException;

                propertyResolver.getPropertyResolverDescription(),
                property);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((property == null) ? 0 : property.hashCode());
        result = prime * result + ((propertyResolver == null) ? 0 : propertyResolver.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!super.equals(obj)) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        PropertyDuplicateDefinedInPropertyFileDefect other = (PropertyDuplicateDefinedInPropertyFileDefect) obj;
        if (property == null) {
            if (other.property != null) {
                return false;
            }
        } else if (!property.equals(other.property)) {

// Path: api/src/main/java/com/geewhiz/pacify/defect/DefectException.java
// public abstract class DefectException extends Exception implements Defect {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private PMarker           pMarker;
//     private PArchive          pArchive;
//     private PFile             pFile;
//     private PProperty         pProperty;
// 
//     public DefectException() {
//     }
// 
//     public DefectException(PMarker pMarker) {
//         this.pMarker = pMarker;
//     }
// 
//     public DefectException(PArchive pArchive) {
//         this.pMarker = pArchive.getPMarker();
//         this.pArchive = pArchive;
//     }
// 
//     public DefectException(PFile pFile) {
//         this.pMarker = pFile.getPMarker();
//         this.pArchive = pFile.getPArchive();
//         this.pFile = pFile;
//     }
// 
//     public DefectException(PProperty pProperty) {
//         this.pProperty = pProperty;
//         this.pFile = pProperty.getPFile();
//         this.pMarker = pFile.getPMarker();
//         this.pArchive = pFile.getPArchive();
//     }
// 
//     public PMarker getPMarker() {
//         return pMarker;
//     }
// 
//     public PArchive getPArchive() {
//         return pArchive;
//     }
// 
//     public PFile getPFile() {
//         return pFile;
//     }
// 
//     public PProperty getPProperty() {
//         return pProperty;
//     }
// 
//     public String getDefectMessage() {
//         StringBuffer result = new StringBuffer();
//         result.append(this.getClass().getSimpleName()).append(":");
// 
//         if (pMarker != null) {
//             result.append(String.format("\n\t[MarkerFile=%s]", pMarker.getFile().getAbsolutePath()));
//         }
//         if (pArchive != null) {
//             result.append(String.format("\n\t[Archive=%s]", pArchive.getFile().getAbsolutePath()));
//             if (pFile != null) {
//                 result.append(String.format("\n\t[Archive File=%s]", pFile.getRelativePath()));
//             }
//         } else {
//             if (pFile != null) {
//                 result.append(String.format("\n\t[File=%s]", pFile.getRelativePath()));
//             }
//         }
// 
//         if (pProperty != null) {
//             result.append(String.format("\n\t[Property=%s]", pProperty.getName()));
//         }
// 
//         return result.toString();
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((pArchive == null) ? 0 : pArchive.hashCode());
//         result = prime * result + ((pFile == null) ? 0 : pFile.hashCode());
//         result = prime * result + ((pMarker == null) ? 0 : pMarker.hashCode());
//         result = prime * result + ((pProperty == null) ? 0 : pProperty.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         DefectException other = (DefectException) obj;
//         if (pArchive == null) {
//             if (other.pArchive != null) {
//                 return false;
//             }
//         } else if (!pArchive.equals(other.pArchive)) {
//             return false;
//         }
//         if (pFile == null) {
//             if (other.pFile != null) {
//                 return false;
//             }
//         } else if (!pFile.equals(other.pFile)) {
//             return false;
//         }
//         if (pMarker == null) {
//             if (other.pMarker != null) {
//                 return false;
//             }
//         } else if (!pMarker.equals(other.pMarker)) {
//             return false;
//         }
//         if (pProperty == null) {
//             if (other.pProperty != null) {
//                 return false;
//             }
//         } else if (!pProperty.equals(other.pProperty)) {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: api/src/main/java/com/geewhiz/pacify/resolver/PropertyResolver.java
// public interface PropertyResolver extends Comparable<PropertyResolver> {
// 
//     boolean containsProperty(String property);
// 
//     boolean isProtectedProperty(String property);
// 
//     String getPropertyValue(String key);
// 
//     Set<String> getReferencedProperties(String property);
// 
//     Set<String> getPropertyKeys();
// 
//     String getEncoding();
// 
//     String getPropertyResolverDescription();
// 
//     LinkedHashSet<Defect> checkForDuplicateEntry();
// 
//     FilterSet createFilterSet();
// 
//     boolean propertyUsesToken(String property);
// 
//     String getBeginToken();
// 
//     String getEndToken();
// 
// }


// Path: api/src/main/java/com/geewhiz/pacify/defect/PropertyDuplicateDefinedInPropertyFileDefect.java
import com.geewhiz.pacify.resolver.PropertyResolver;
import com.geewhiz.pacify.defect.DefectException;

                propertyResolver.getPropertyResolverDescription(),
                property);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((property == null) ? 0 : property.hashCode());
        result = prime * result + ((propertyResolver == null) ? 0 : propertyResolver.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!super.equals(obj)) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        PropertyDuplicateDefinedInPropertyFileDefect other = (PropertyDuplicateDefinedInPropertyFileDefect) obj;
        if (property == null) {
            if (other.property != null) {
                return false;
            }
        } else if (!property.equals(other.property)) {

            return false;
