Add short-cut path taking when the paremter type is equal to own type
Change-Id: I0edceb6630e0312ce5139d3e453a183a0cf06fd5
Showing
3 changed files
with
23 additions
and
2 deletions
| ... | @@ -87,7 +87,13 @@ final class EncodableDiscreteResources implements DiscreteResources { | ... | @@ -87,7 +87,13 @@ final class EncodableDiscreteResources implements DiscreteResources { |
| 87 | 87 | ||
| 88 | @Override | 88 | @Override |
| 89 | public DiscreteResources difference(DiscreteResources other) { | 89 | public DiscreteResources difference(DiscreteResources other) { |
| 90 | - return of(parent, Sets.difference(values(), other.values())); | 90 | + if (other instanceof EncodableDiscreteResources) { |
| 91 | + return of(parent, Sets.difference(this.values(), other.values())); | ||
| 92 | + } else if (other instanceof EmptyDiscreteResources) { | ||
| 93 | + return this; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + return DiscreteResources.of(Sets.difference(values(), other.values())); | ||
| 91 | } | 97 | } |
| 92 | 98 | ||
| 93 | @Override | 99 | @Override | ... | ... |
| ... | @@ -59,7 +59,13 @@ final class GenericDiscreteResources implements DiscreteResources { | ... | @@ -59,7 +59,13 @@ final class GenericDiscreteResources implements DiscreteResources { |
| 59 | 59 | ||
| 60 | @Override | 60 | @Override |
| 61 | public DiscreteResources difference(DiscreteResources other) { | 61 | public DiscreteResources difference(DiscreteResources other) { |
| 62 | - return of(Sets.difference(this.values(), other.values())); | 62 | + if (other instanceof GenericDiscreteResources) { |
| 63 | + return of(Sets.difference(this.values(), other.values())); | ||
| 64 | + } else if (other instanceof EmptyDiscreteResources) { | ||
| 65 | + return this; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + return DiscreteResources.of(Sets.difference(this.values(), other.values())); | ||
| 63 | } | 69 | } |
| 64 | 70 | ||
| 65 | @Override | 71 | @Override | ... | ... |
| ... | @@ -67,6 +67,15 @@ final class UnifiedDiscreteResources implements DiscreteResources { | ... | @@ -67,6 +67,15 @@ final class UnifiedDiscreteResources implements DiscreteResources { |
| 67 | 67 | ||
| 68 | @Override | 68 | @Override |
| 69 | public DiscreteResources difference(DiscreteResources other) { | 69 | public DiscreteResources difference(DiscreteResources other) { |
| 70 | + if (other instanceof UnifiedDiscreteResources) { | ||
| 71 | + UnifiedDiscreteResources cast = (UnifiedDiscreteResources) other; | ||
| 72 | + return new UnifiedDiscreteResources( | ||
| 73 | + this.generics.difference(cast.generics), | ||
| 74 | + this.encodables.difference(cast.encodables)); | ||
| 75 | + } else if (other instanceof EmptyDiscreteResources) { | ||
| 76 | + return this; | ||
| 77 | + } | ||
| 78 | + | ||
| 70 | return of(Sets.difference(this.values(), other.values())); | 79 | return of(Sets.difference(this.values(), other.values())); |
| 71 | } | 80 | } |
| 72 | 81 | ... | ... |
-
Please register or login to post a comment