/** * Treat non-idempotent RuleKeys as unequal to everything, including other non-idempotent * RuleKeys. */ @Override public boolean equals(Object that) { if (!(that instanceof RuleKey)) { return false; } RuleKey other = (RuleKey) that; if (!isIdempotent() || !other.isIdempotent()) { return false; } return (compareTo(other) == 0); }
/** * Order non-idempotent RuleKeys as less than all idempotent RuleKeys. * * <p>non-idempotent < idempotent */ @Override public int compareTo(RuleKey other) { if (!isIdempotent()) { if (!other.isIdempotent()) { return 0; } return -1; } else if (!other.isIdempotent()) { return 1; } return ByteBuffer.wrap(hashCode.asBytes()).compareTo(ByteBuffer.wrap(other.hashCode.asBytes())); }
public RuleKey build() { RuleKey ruleKey = idempotent ? new RuleKey(hasher.hash()) : new RuleKey(null); if (logElms != null) { logger.info( String.format( "%sRuleKey %s=%s", ruleKey.isIdempotent() ? "" : "non-idempotent ", ruleKey.toString(), Joiner.on("").join(logElms))); } return ruleKey; }
private Builder setVal(@Nullable RuleKey ruleKey) { if (ruleKey != null) { if (logElms != null) { logElms.add( String.format( "%sruleKey(sha1=%s):", ruleKey.isIdempotent() ? "" : "non-idempotent ", ruleKey.toString())); } feed(ruleKey.toString().getBytes()).mergeIdempotence(ruleKey.isIdempotent()); } return separate(); }
/** Helper method used to avoid memoizing non-idempotent RuleKeys. */ @Nullable public static RuleKey filter(RuleKey ruleKey) { if (!ruleKey.isIdempotent()) { return null; } return ruleKey; }
@Test public void testRuleKeyEqualsAndHashCodeMethods() { SourcePathResolver resolver = new SourcePathResolver( new BuildRuleResolver(TargetGraph.EMPTY, new BuildTargetNodeToBuildRuleTransformer())); RuleKey keyPair1 = createEmptyRuleKey(resolver).setReflectively("something", "foo").build(); RuleKey keyPair2 = createEmptyRuleKey(resolver).setReflectively("something", "foo").build(); RuleKey keyPair3 = createEmptyRuleKey(resolver).setReflectively("something", "bar").build(); assertEquals(keyPair1, keyPair2); assertEquals(keyPair1.hashCode(), keyPair2.hashCode()); assertNotEquals(keyPair1, keyPair3); assertNotEquals(keyPair1.hashCode(), keyPair3.hashCode()); assertNotEquals(keyPair2, keyPair3); assertNotEquals(keyPair2.hashCode(), keyPair3.hashCode()); }
@Test public void testRuleKeyFromHashString() { RuleKey ruleKey = new RuleKey("19d2558a6bd3a34fb3f95412de9da27ed32fe208"); assertEquals("19d2558a6bd3a34fb3f95412de9da27ed32fe208", ruleKey.toString()); }