/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.editor.codefolding;
import org.eclipse.jface.text.Position;
import org.eclipse.ui.texteditor.SimpleMarkerAnnotation;
/**
* This class bundles the marker annotation and a related position.
*/
public class MarkerAnnotationAndPosition {
public final SimpleMarkerAnnotation markerAnnotation;
/**
* May be null!
*/
public final Position position;
public MarkerAnnotationAndPosition(SimpleMarkerAnnotation markerAnnotation, Position position) {
this.markerAnnotation = markerAnnotation;
this.position = position;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((markerAnnotation == null) ? 0 : markerAnnotation.getText().hashCode());
return result;
}
/**
* Note that the equals and hashCode only work in the marker annotation, not in the position (because we want
* to make unique based on the marker and not on its position when analyzing a line).
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof MarkerAnnotationAndPosition)) {
return false;
}
MarkerAnnotationAndPosition other = (MarkerAnnotationAndPosition) obj;
if (markerAnnotation == null) {
if (other.markerAnnotation != null) {
return false;
}
//if here, markerAnnotation == other.markerAnnotation == null
return true;
} else if (other.markerAnnotation == null) {
return false;
}
String text = this.markerAnnotation.getText();
String otherText = other.markerAnnotation.getText();
if (text == null) {
if (otherText != null) {
return false;
}
//if here, text == otherText == null
} else if (!text.equals(otherText)) {
return false;
}
return this.markerAnnotation.getType().equals(other.markerAnnotation.getType());
}
}