/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.netbeans.parsing.spi;
import org.antlr.netbeans.editor.text.DocumentSnapshot;
import org.antlr.v4.runtime.misc.ObjectEqualityComparator;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.openide.util.Parameters;
/**
*
* @author Sam Harwell
* @param <T>
*/
public class BaseParserData<T> implements ParserData<T> {
@NonNull
private final ParseContext context;
@NonNull
private final ParserDataDefinition<T> definition;
@NonNull
private final DocumentSnapshot snapshot;
@NullAllowed
private final T data;
public BaseParserData(@NonNull ParseContext context, @NonNull ParserDataDefinition<T> definition, @NonNull DocumentSnapshot snapshot, @NullAllowed T data) {
Parameters.notNull("context", context);
Parameters.notNull("definition", definition);
Parameters.notNull("snapshot", snapshot);
this.context = context;
this.definition = definition;
this.snapshot = snapshot;
this.data = data;
}
@Override
public ParseContext getContext() {
return context;
}
@Override
public ParserDataDefinition<T> getDefinition() {
return definition;
}
@Override
public DocumentSnapshot getSnapshot() {
return snapshot;
}
@Override
public T getData() {
return data;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof BaseParserData<?>)) {
return false;
}
BaseParserData<?> other = (BaseParserData<?>)obj;
return this.definition.equals(other.definition)
&& this.context.equals(other.context)
&& this.snapshot.equals(other.snapshot)
&& ObjectEqualityComparator.INSTANCE.equals(this.data, other.data);
}
@Override
public int hashCode() {
int hash = 5;
hash = 67 * hash + this.context.hashCode();
hash = 67 * hash + this.definition.hashCode();
hash = 67 * hash + this.snapshot.hashCode();
hash = 67 * hash + ObjectEqualityComparator.INSTANCE.hashCode(this.data);
return hash;
}
}