}
public boolean equals(Object a) {
if (a == null) return false;
if (!(a instanceof Descriptor)) return false;
Descriptor d = (Descriptor) a;
if (!safeEquals(implementation, d.getImplementation())) return false;
if (!equalOrderedCollection((contracts == null) ? EMPTY_CONTRACTS_SET : contracts, d.getAdvertisedContracts())) return false;
if (!safeEquals(name, d.getName())) return false;
if (!safeEquals(scope, d.getScope())) return false;
if (!equalOrderedCollection((qualifiers == null) ? EMPTY_QUALIFIER_SET : qualifiers, d.getQualifiers())) return false;
if (!safeEquals(descriptorType, d.getDescriptorType())) return false;
if (!safeEquals(descriptorVisibility, d.getDescriptorVisibility())) return false;
if (!equalMetadata((metadatas == null) ? EMPTY_METADATAS_MAP : metadatas, d.getMetadata())) return false;
if (!safeEquals(proxiable, d.isProxiable())) return false;
if (!safeEquals(proxyForSameScope, d.isProxyForSameScope())) return false;
if (!safeEquals(analysisName, d.getClassAnalysisName())) return false;
return true;
}