Bug 572429: [Model] Add support for source configurations to
BasicSourceModelStamp

Change-Id: I01141daa996006d8941f0e796ae5c57caa74ad09
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/BasicSourceModelStamp.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/BasicSourceModelStamp.java
index 66f0601..4b17405 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/BasicSourceModelStamp.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/BasicSourceModelStamp.java
@@ -14,8 +14,13 @@
 
 package org.eclipse.statet.ltk.model.core.impl;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.lang.ObjectUtils.ToStringBuilder;
 
 import org.eclipse.statet.ltk.core.SourceModelStamp;
 
@@ -26,9 +31,18 @@
 	
 	private final long sourceStamp;
 	
+	private final ImList<Object> sourceConfigs;
+	
+	
+	public BasicSourceModelStamp(final long sourceStamp,
+			final ImList<Object> sourceConfigs) {
+		this.sourceStamp= sourceStamp;
+		this.sourceConfigs= nonNullAssert(sourceConfigs);
+	}
 	
 	public BasicSourceModelStamp(final long sourceStamp) {
 		this.sourceStamp= sourceStamp;
+		this.sourceConfigs= ImCollections.emptyList();
 	}
 	
 	
@@ -40,14 +54,28 @@
 	
 	@Override
 	public int hashCode() {
-		return (int) (this.sourceStamp ^ (this.sourceStamp >>> 32));
+		int h= (int)(this.sourceStamp ^ (this.sourceStamp >>> 32));
+		h= 31 * h + this.sourceConfigs.hashCode();
+		return h;
 	}
 	
 	@Override
-	public boolean equals(final @Nullable Object other) {
-		return (other instanceof SourceModelStamp
-				&& getClass() == other.getClass()
-				&& this.sourceStamp == ((SourceModelStamp)other).getContentStamp() );
+	public boolean equals(final @Nullable Object obj) {
+		if (obj instanceof BasicSourceModelStamp
+				&& getClass() == obj.getClass() ) {
+			final var other= (BasicSourceModelStamp)obj;
+			return (this.sourceStamp == other.sourceStamp
+					&& this.sourceConfigs.equals(other.sourceConfigs) );
+		}
+		return false;
+	}
+	
+	@Override
+	public String toString() {
+		final var sb= new ToStringBuilder(BasicSourceModelStamp.class);
+		sb.append(' ', this.sourceStamp);
+		sb.addProp("sourceConfigs", this.sourceConfigs); //$NON-NLS-1$
+		return sb.toString();
 	}
 	
 }