package org.projectusus.core.filerelations.model; import net.sourceforge.c4j.ContractReference; import org.apache.commons.lang.builder.EqualsBuilder; import org.eclipse.core.resources.IFile; @ContractReference( contractClassName = "ClassDescriptorKeyContract" ) class ClassDescriptorKey { private final IFile file; private final Classname classname; private final Packagename packagename; public ClassDescriptorKey( IFile file, Classname classname, Packagename packagename ) { if( file == null || classname == null || packagename == null ) { throw new IllegalArgumentException( "Null parameters are not allowed." ); //$NON-NLS-1$ } this.file = file; this.classname = classname; this.packagename = packagename; } public ClassDescriptorKey( WrappedTypeBinding type ) { this( type.getUnderlyingResource(), type.getClassname(), type.getPackagename() ); } @Override public boolean equals( Object obj ) { return obj instanceof ClassDescriptorKey && equals( (ClassDescriptorKey)obj ); } private boolean equals( ClassDescriptorKey other ) { return new EqualsBuilder().append( getFile(), other.getFile() ). // append( getClassname(), other.getClassname() ).append( getPackagename(), other.getPackagename() ).isEquals(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((classname == null) ? 0 : classname.hashCode()); result = prime * result + ((file == null) ? 0 : file.hashCode()); result = prime * result + ((packagename == null) ? 0 : packagename.hashCode()); return result; } @Override public String toString() { return getPackagename() + "." + getClassname() + " in " + getFile(); //$NON-NLS-1$ //$NON-NLS-2$ } public IFile getFile() { return file; } public Classname getClassname() { return classname; } public Packagename getPackagename() { return packagename; } }