KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > proguard > optimize > ConstantMemberFilter


1 /*
2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
3  * of Java bytecode.
4  *
5  * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
6  *
7  * This library is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * Software Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * This library is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15  * for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this library; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */

21 package proguard.optimize;
22
23 import proguard.classfile.*;
24 import proguard.classfile.util.SimplifiedVisitor;
25 import proguard.classfile.visitor.MemberVisitor;
26 import proguard.optimize.evaluation.*;
27 import proguard.evaluation.value.Value;
28
29 /**
30  * This <code>MemberVisitor</code> delegates its visits to program class members
31  * to another given <code>MemberVisitor</code>, but only when the visited
32  * field has been marked as a constant.
33  *
34  * @see StoringInvocationUnit
35  * @author Eric Lafortune
36  */

37 public class ConstantMemberFilter
38 extends SimplifiedVisitor
39 implements MemberVisitor
40 {
41     private MemberVisitor constantMemberVisitor;
42
43
44     /**
45      * Creates a new ConstantMemberFilter.
46      * @param constantMemberVisitor the <code>MemberVisitor</code> to which
47      * visits to constant members will be delegated.
48      */

49     public ConstantMemberFilter(MemberVisitor constantMemberVisitor)
50     {
51         this.constantMemberVisitor = constantMemberVisitor;
52     }
53
54
55     // Implementations for MemberVisitor.
56

57     public void visitProgramField(ProgramClass programClass, ProgramField programField)
58     {
59         Value value = StoringInvocationUnit.getFieldValue(programField);
60         if (value != null &&
61             value.isSpecific())
62         {
63             constantMemberVisitor.visitProgramField(programClass, programField);
64         }
65     }
66
67
68     public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
69     {
70         Value value = StoringInvocationUnit.getMethodReturnValue(programMethod);
71         if (value != null &&
72             value.isSpecific())
73         {
74             constantMemberVisitor.visitProgramMethod(programClass, programMethod);
75         }
76     }
77 }
78
Popular Tags