KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > clirr > core > internal > AbstractDiffReporter


1 //////////////////////////////////////////////////////////////////////////////
2
// Clirr: compares two versions of a java library for binary compatibility
3
// Copyright (C) 2003 - 2005 Lars Kühne
4
//
5
// This library is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation; either
8
// version 2.1 of the License, or (at your option) any later version.
9
//
10
// This library is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
// Lesser General Public License for more details.
14
//
15
// You should have received a copy of the GNU Lesser General Public
16
// License along with this library; if not, write to the Free Software
17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
//////////////////////////////////////////////////////////////////////////////
19

20 package net.sf.clirr.core.internal;
21
22 import net.sf.clirr.core.ApiDifference;
23 import net.sf.clirr.core.Severity;
24 import net.sf.clirr.core.Message;
25 import net.sf.clirr.core.spi.JavaType;
26 import net.sf.clirr.core.spi.Field;
27 import net.sf.clirr.core.spi.Method;
28 import net.sf.clirr.core.spi.Scope;
29
30 public abstract class AbstractDiffReporter
31 {
32     private static final Message MSG_UNABLE_TO_DETERMINE_CLASS_SCOPE = new Message(9000);
33
34     private ApiDiffDispatcher dispatcher;
35
36     public AbstractDiffReporter(ApiDiffDispatcher dispatcher)
37     {
38         this.dispatcher = dispatcher;
39     }
40
41     protected final ApiDiffDispatcher getApiDiffDispatcher()
42     {
43         return dispatcher;
44     }
45
46     protected final void log(
47         Message msg,
48         Severity severity,
49         String JavaDoc clazz, Method method, Field field,
50         String JavaDoc[] args)
51     {
52         final ApiDifference diff = new ApiDifference(
53             msg, severity, clazz, null, null, args);
54         getApiDiffDispatcher().fireDiff(diff);
55     }
56
57     /**
58      * Determine whether the severity of the problem should be reduced
59      * to INFO because the specified class is package or private accessibility.
60      * Clirr reports changes at level INFO for all private and package
61      * scoped objects.
62      * <p>
63      * Note that the class passed here should always be from the <i>old</i>
64      * class version, because we're checking whether <i>existing</i> code
65      * would have been able to access it (potential compatibility problems)
66      * or not.
67      *
68      * @param clazz is the class the change is being reported about.
69      * @param sev is the severity that should be reported for public/protected
70      * scoped classes.
71      *
72      * @return param sev if the class is public/protected, and Severity.INFO
73      * if the class is package or private scope.
74      */

75     protected final Severity getSeverity(JavaType clazz, Severity sev)
76     {
77         Scope scope = clazz.getEffectiveScope();
78
79         if (scope.isLessVisibleThan(Scope.PROTECTED))
80         {
81             return Severity.INFO;
82         }
83         else
84         {
85             return sev;
86         }
87     }
88
89     /**
90      * Determine whether the severity of the problem should be reduced
91      * to INFO because:
92      * <ul>
93      * <li>the specified method is package or private accessibility, or</li>
94      * <li>the specified method is in a package or private class. </li
95      * </ul>
96      * <p>
97      * Clirr reports changes at level INFO for all private and package
98      * scoped objects.
99      * <p>
100      * Note that the method passed here should always be from the <i>old</i>
101      * class version, because we're checking whether <i>existing</i> code
102      * would have been able to access it (potential compatibility problems)
103      * or not.
104      *
105      * @param clazz is the class containing the method of interest
106      * @param method is the method the change is being reported about.
107      * @param sev is the severity that should be reported for public/protected
108      * scoped methods.
109      *
110      * @return param sev if the method is public/protected, and Severity.INFO
111      * if the method is package or private scope.
112      */

113     protected final Severity getSeverity(JavaType clazz, Method method, Severity sev)
114     {
115         
116         if (!method.getDeclaredScope().isLessVisibleThan(Scope.PROTECTED))
117         {
118             return getSeverity(clazz, sev);
119         }
120         else
121         {
122             return Severity.INFO;
123         }
124     }
125
126     /**
127      * Determine whether the severity of the problem should be reduced
128      * to INFO because:
129      * <ul>
130      * <li>the specified field is package or private accessibility, or</li>
131      * <li>the specified field is in a package or private class. </li>
132      * </ul>
133      * <p>
134      * Clirr reports changes at level INFO for all private and package
135      * scoped objects.
136      * <p>
137      * Note that the field passed here should always be from the <i>old</i>
138      * class version, because we're checking whether <i>existing</i> code
139      * would have been able to access it (potential compatibility problems)
140      * or not.
141      *
142      * @param clazz is the class containing the method of interest
143      * @param field is the field the change is being reported about.
144      * @param sev is the severity that should be reported for public/protected
145      * scoped field.
146      *
147      * @return param sev if the field is public/protected, and Severity.INFO
148      * if the field is package or private scope.
149      */

150     protected final Severity getSeverity(JavaType clazz, Field field, Severity sev)
151     {
152         if (!field.getDeclaredScope().isLessVisibleThan(Scope.PROTECTED))
153         {
154             return getSeverity(clazz, sev);
155         }
156         else
157         {
158             return Severity.INFO;
159         }
160     }
161 }
162
Popular Tags