01: /*
02: * ProGuard -- shrinking, optimization, obfuscation, and preverification
03: * of Java bytecode.
04: *
05: * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
06: *
07: * This program is free software; you can redistribute it and/or modify it
08: * under the terms of the GNU General Public License as published by the Free
09: * Software Foundation; either version 2 of the License, or (at your option)
10: * any later version.
11: *
12: * This program 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 General Public License for
15: * more details.
16: *
17: * You should have received a copy of the GNU General Public License along
18: * with this program; if not, write to the Free Software Foundation, Inc.,
19: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20: */
21: package proguard.classfile.visitor;
22:
23: import proguard.classfile.*;
24: import proguard.classfile.util.SimplifiedVisitor;
25:
26: /**
27: * This <code>MemberVisitor</code> delegates its visits to methods to
28: * another given <code>MemberVisitor</code>, but only when the visited
29: * method may have implementations.
30: *
31: * @see Clazz#mayHaveImplementations(Method)
32: * @author Eric Lafortune
33: */
34: public class MethodImplementationFilter extends SimplifiedVisitor
35: implements MemberVisitor {
36: private final MemberVisitor memberVisitor;
37:
38: /**
39: * Creates a new MethodImplementationFilter.
40: * @param memberVisitor the <code>MemberVisitor</code> to which
41: * visits will be delegated.
42: */
43: public MethodImplementationFilter(MemberVisitor memberVisitor) {
44: this .memberVisitor = memberVisitor;
45: }
46:
47: // Implementations for MemberVisitor.
48:
49: public void visitProgramMethod(ProgramClass programClass,
50: ProgramMethod programMethod) {
51: if (programClass.mayHaveImplementations(programMethod)) {
52: memberVisitor.visitProgramMethod(programClass,
53: programMethod);
54: }
55: }
56:
57: public void visitLibraryMethod(LibraryClass libraryClass,
58: LibraryMethod libraryMethod) {
59: if (libraryClass.mayHaveImplementations(libraryMethod)) {
60: memberVisitor.visitLibraryMethod(libraryClass,
61: libraryMethod);
62: }
63: }
64: }
|