aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/MergeConflict.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-03-17 22:34:52 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-03-18 12:48:29 +0000
commit80665ec28f4fde484c35e2935e8d06aabe902841 (patch)
treebb05d02f898becb9a92e3bfe4af97a4649499884 /src/tools/android/java/com/google/devtools/build/android/MergeConflict.java
parent652bb6953d2f020322c08c806a1409aae7696c09 (diff)
Part 3 of 5: Merging semantics.
Introduces the AndroidDataMerger, MergeConflict, and UnwrittenMergedAndroidData which is the entry point in the AndroidResourceProcessing *AndroidData lifecycle. Also, refactors the AndroidDataSet parsing of resources, making it functionally immutable. -- MOS_MIGRATED_REVID=117492690
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/MergeConflict.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/MergeConflict.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/MergeConflict.java b/src/tools/android/java/com/google/devtools/build/android/MergeConflict.java
new file mode 100644
index 0000000000..2728af1fb8
--- /dev/null
+++ b/src/tools/android/java/com/google/devtools/build/android/MergeConflict.java
@@ -0,0 +1,70 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.android;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+/**
+ * Represents a conflict of two DataResources that share the same FullyQualifiedName.
+ */
+public class MergeConflict {
+ static final String CONFLICT_MESSAGE = "%s is provided from %s and %s";
+ private final FullyQualifiedName fullyQualifiedName;
+ private final DataResource first;
+ private final DataResource second;
+
+ private MergeConflict(
+ FullyQualifiedName fullyQualifiedName, DataResource first, DataResource second) {
+ this.fullyQualifiedName = fullyQualifiedName;
+ this.first = first;
+ this.second = second;
+ }
+
+ public static MergeConflict between(
+ FullyQualifiedName fullyQualifiedName, DataResource first, DataResource second) {
+ return new MergeConflict(fullyQualifiedName, first, second);
+ }
+
+ public String toConflictMessage() {
+ return String.format(CONFLICT_MESSAGE, fullyQualifiedName, first.source(), second.source());
+ }
+
+ public FullyQualifiedName fullyQualifiedName() {
+ return fullyQualifiedName;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this).add("first", first).add("second", second).toString();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof MergeConflict)) {
+ return false;
+ }
+ MergeConflict that = (MergeConflict) other;
+ return Objects.equals(first, that.first) && Objects.equals(second, that.second);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(first, second);
+ }
+}