001: /*
002: * FindBugs - Find Bugs in Java programs
003: * Copyright (C) 2003-2007 University of Maryland
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package edu.umd.cs.findbugs.ba.jsr305;
021:
022: import javax.annotation.meta.When;
023:
024: import edu.umd.cs.findbugs.ba.Location;
025: import edu.umd.cs.findbugs.ba.vna.ValueNumber;
026:
027: /**
028: * Information about a source or sink in
029: * the type qualifier dataflow analysis.
030: *
031: * @author David Hovemeyer
032: */
033: public class SourceSinkInfo implements Comparable<SourceSinkInfo> {
034: private final SourceSinkType type;
035: private final Location location;
036: private final ValueNumber vn;
037: private final When when;
038: private int parameter;
039: private int local;
040:
041: /**
042: * Constructor.
043: *
044: * @param type type of the source or sink
045: * @param location Location of the source or sink
046: * @param vn the ValueNumber of the annotated value
047: * @param when the When value used (explicitly or implicitly) to annotate this
048: * source or sink
049: */
050: public SourceSinkInfo(SourceSinkType type, Location location,
051: ValueNumber vn, When when) {
052: this .type = type;
053: this .location = location;
054: this .vn = vn;
055: this .when = when;
056: }
057:
058: /**
059: * @return Returns the type.
060: */
061: public SourceSinkType getType() {
062: return type;
063: }
064:
065: /**
066: * @return Returns the location.
067: */
068: public Location getLocation() {
069: return location;
070: }
071:
072: /**
073: * @return Returns the ValueNumber.
074: */
075: public ValueNumber getValueNumber() {
076: return vn;
077: }
078:
079: /**
080: * @return Returns the when.
081: */
082: public When getWhen() {
083: return when;
084: }
085:
086: /**
087: * @param parameter The parameter to set.
088: */
089: public void setParameter(int parameter) {
090: this .parameter = parameter;
091: }
092:
093: /**
094: * @param parameter The parameter to set.
095: * @param local The local to set.
096: */
097: public void setParameterAndLocal(int parameter, int local) {
098: this .parameter = parameter;
099: this .local = local;
100: }
101:
102: /**
103: * @return Returns the parameter.
104: */
105: public int getParameter() {
106: return parameter;
107: }
108:
109: /**
110: * @return Returns the local.
111: */
112: public int getLocal() {
113: return local;
114: }
115:
116: /* (non-Javadoc)
117: * @see java.lang.Comparable#compareTo(java.lang.Object)
118: */
119: public int compareTo(SourceSinkInfo o) {
120: return this .location.compareTo(o.location);
121: }
122:
123: /* (non-Javadoc)
124: * @see java.lang.Object#hashCode()
125: */
126: @Override
127: public int hashCode() {
128: return location.hashCode();
129: }
130:
131: /* (non-Javadoc)
132: * @see java.lang.Object#equals(java.lang.Object)
133: */
134: @Override
135: public boolean equals(Object obj) {
136: if (obj == null || obj.getClass() != this .getClass()) {
137: return false;
138: }
139: SourceSinkInfo other = (SourceSinkInfo) obj;
140: return this .type.equals(other.type) && this .vn.equals(other.vn)
141: && this .location.equals(other.location);
142: }
143:
144: /* (non-Javadoc)
145: * @see java.lang.Object#toString()
146: */
147: @Override
148: public String toString() {
149: return type.toString() + "@" + location.toCompactString()
150: + "[vn=" + vn.getNumber() + ",when=" + when + "]";
151: }
152: }
|