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;
021:
022: import edu.umd.cs.findbugs.annotations.CheckForNull;
023: import edu.umd.cs.findbugs.internalAnnotations.DottedClassName;
024:
025: /**
026: * Interface for querying nullness annotations on methods, fields,
027: * and parameters.
028: *
029: * @author David Hovemeyer
030: */
031: public interface INullnessAnnotationDatabase {
032:
033: /**
034: * Determine whether given parameter must be non-null.
035: *
036: * @param m a method
037: * @param param parameter (0 == first parameter)
038: * @return true if the parameter must be non-null, false otherwise
039: */
040: public abstract boolean parameterMustBeNonNull(XMethod m, int param);
041:
042: /**
043: * Get a resolved NullnessAnnotation on given XMethod, XField, or XMethodParameter.
044: *
045: * @param o an XMethod, XField, or XMethodParameter
046: * @param getMinimal TODO: what does this mean?
047: * @return resolved NullnessAnnotation
048: */
049: @CheckForNull
050: public abstract NullnessAnnotation getResolvedAnnotation(
051: final Object o, boolean getMinimal);
052:
053: /**
054: * Load "built-in" annotations that might not be evident from the
055: * analyzed/referenced code.
056: */
057: public void loadAuxiliaryAnnotations();
058:
059: // /**
060: // * Add a default nullness annotation to the database.
061: // *
062: // * @param cName class name (FIXME: is this right?)
063: // * @param annotation the default NullnessAnnotation
064: // */
065: // public void addDefaultMethodAnnotation(String cName, NullnessAnnotation annotation);
066:
067: /**
068: * Add a field annotation to the database.
069: *
070: * @param cName dotted class name
071: * @param mName field name
072: * @param mSig field signature
073: * @param isStatic true if field is static, false otherwise
074: * @param annotation NullnessAnnotation to add
075: */
076: public void addFieldAnnotation(@DottedClassName
077: String cName, String mName, String mSig, boolean isStatic,
078: NullnessAnnotation annotation);
079:
080: /**
081: * Add a field annotation to the database.
082: *
083: * @param cName dotted class name
084: * @param mName method name
085: * @param mSig method signature
086: * @param isStatic true if method is static, false otherwise
087: * @param annotation NullnessAnnotation to add
088: */
089: public void addMethodAnnotation(@DottedClassName
090: String cName, String mName, String mSig, boolean isStatic,
091: NullnessAnnotation annotation);
092:
093: /**
094: * Add a method parameter annotation to the database.
095: *
096: * @param cName dotted class name
097: * @param mName method name
098: * @param mSig method signature
099: * @param isStatic true if method is static, false otherwise
100: * @param param parameter (0 == first parameter)
101: * @param annotation the NullnessAnnotation to add
102: */
103: public void addMethodParameterAnnotation(@DottedClassName
104: String cName, String mName, String mSig, boolean isStatic,
105: int param, NullnessAnnotation annotation);
106:
107: /**
108: * Add a default annotation to the database.
109: *
110: * @param target one of AnnotationDatabase.METHOD, AnnotationDatabase.FIELD, AnnotationDatabase.PARAMETER, or AnnotationDatabase.ANY
111: * @param c dotted class name of class default annotation pertains to
112: * @param n the default NullnessAnnotation
113: */
114: public void addDefaultAnnotation(AnnotationDatabase.Target target,
115: @DottedClassName
116: String c, NullnessAnnotation n);
117: }
|