1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/*
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *             of Java bytecode.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
59f606f95f03a75961498803e24bee6799a7c0885Ying Wang * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option)
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version.
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details.
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc.,
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.obfuscate;
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/**
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This MappingKeeper delegates all method calls to each MappingProcessor
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * in a given list.
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic class MultiMappingProcessor implements MappingProcessor
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final MappingProcessor[] mappingProcessors;
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Creates a new MultiMappingProcessor.
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * @param mappingProcessors the mapping processors to which method calls
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     *                          will be delegated.
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public MultiMappingProcessor(MappingProcessor[] mappingProcessors)
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        this.mappingProcessors = mappingProcessors;
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Implementations for MappingProcessor.
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean processClassMapping(String className,
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                       String newClassName)
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        boolean result = false;
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        for (int index = 0; index < mappingProcessors.length; index++)
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            result |= mappingProcessors[index].processClassMapping(className,
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                                   newClassName);
56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return result;
59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public void processFieldMapping(String className,
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                    String fieldType,
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                    String fieldName,
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                    String newFieldName)
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        for (int index = 0; index < mappingProcessors.length; index++)
68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            mappingProcessors[index].processFieldMapping(className,
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                         fieldType,
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                         fieldName,
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                         newFieldName);
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public void processMethodMapping(String className,
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     int    firstLineNumber,
79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     int    lastLineNumber,
80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     String methodReturnType,
81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     String methodName,
82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     String methodArguments,
83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                     String newMethodName)
84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        for (int index = 0; index < mappingProcessors.length; index++)
86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            mappingProcessors[index].processMethodMapping(className,
88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          firstLineNumber,
89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          lastLineNumber,
90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          methodReturnType,
91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          methodName,
92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          methodArguments,
93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                          newMethodName);
94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
97