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