/* * FindBugs - Find Bugs in Java programs * Copyright (C) 2003-2007 University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs.ba; import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.internalAnnotations.DottedClassName; /** * Interface for querying nullness annotations on methods, fields, * and parameters. * * @author David Hovemeyer */ public interface INullnessAnnotationDatabase { /** * Determine whether given parameter must be non-null. * * @param m a method * @param param parameter (0 == first parameter) * @return true if the parameter must be non-null, false otherwise */ public abstract boolean parameterMustBeNonNull(XMethod m, int param); /** * Get a resolved NullnessAnnotation on given XMethod, XField, or XMethodParameter. * * @param o an XMethod, XField, or XMethodParameter * @param getMinimal TODO: what does this mean? * @return resolved NullnessAnnotation */ @CheckForNull public abstract NullnessAnnotation getResolvedAnnotation(final Object o, boolean getMinimal); /** * Load "built-in" annotations that might not be evident from the * analyzed/referenced code. */ public void loadAuxiliaryAnnotations(); // /** // * Add a default nullness annotation to the database. // * // * @param cName class name (FIXME: is this right?) // * @param annotation the default NullnessAnnotation // */ // public void addDefaultMethodAnnotation(String cName, NullnessAnnotation annotation); /** * Add a field annotation to the database. * * @param cName dotted class name * @param mName field name * @param mSig field signature * @param isStatic true if field is static, false otherwise * @param annotation NullnessAnnotation to add */ public void addFieldAnnotation(@DottedClassName String cName, String mName, String mSig, boolean isStatic, NullnessAnnotation annotation); /** * Add a method annotation to the database. * * @param cName dotted class name * @param mName method name * @param mSig method signature * @param isStatic true if method is static, false otherwise * @param annotation NullnessAnnotation to add */ public void addMethodAnnotation(@DottedClassName String cName, String mName, String mSig, boolean isStatic, NullnessAnnotation annotation); /** * Add a method parameter annotation to the database. * * @param cName dotted class name * @param mName method name * @param mSig method signature * @param isStatic true if method is static, false otherwise * @param param parameter (0 == first parameter) * @param annotation the NullnessAnnotation to add */ public void addMethodParameterAnnotation(@DottedClassName String cName, String mName, String mSig, boolean isStatic, int param, NullnessAnnotation annotation); /** * Add a default annotation to the database. * * @param target one of AnnotationDatabase.METHOD, AnnotationDatabase.FIELD, AnnotationDatabase.PARAMETER, or AnnotationDatabase.ANY * @param c dotted class name of class default annotation pertains to * @param n the default NullnessAnnotation */ public void addDefaultAnnotation(AnnotationDatabase.Target target, @DottedClassName String c, NullnessAnnotation n); }