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