12f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com/* 22f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * [The "BSD licence"] 32f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * Copyright (c) 2011 Ben Gruver 42f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * All rights reserved. 52f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 62f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * Redistribution and use in source and binary forms, with or without 72f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * modification, are permitted provided that the following conditions 82f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * are met: 92f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 1. Redistributions of source code must retain the above copyright 102f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * notice, this list of conditions and the following disclaimer. 112f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 2. Redistributions in binary form must reproduce the above copyright 122f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * notice, this list of conditions and the following disclaimer in the 132f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * documentation and/or other materials provided with the distribution. 142f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 3. The name of the author may not be used to endorse or promote products 152f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * derived from this software without specific prior written permission. 162f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * 172f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 182f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 192f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 202f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 212f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 222f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 262f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com */ 282f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 292f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.compackage org.jf.baksmali.Adaptors; 302f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 312b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverimport org.jf.dexlib2.ReferenceType; 322b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverimport org.jf.dexlib2.util.SyntheticAccessorResolver; 332b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverimport org.jf.util.ExceptionWithContext; 342f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport org.jf.util.IndentingWriter; 352f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 362f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.comimport java.io.IOException; 372f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 382b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverpublic class SyntheticAccessCommentMethodItem extends MethodItem { 392b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver private final SyntheticAccessorResolver.AccessedMember accessedMember; 402f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 412b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver public SyntheticAccessCommentMethodItem(SyntheticAccessorResolver.AccessedMember accessedMember, int codeAddress) { 422f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com super(codeAddress); 432f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com this.accessedMember = accessedMember; 442f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com } 452f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 462f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com public double getSortOrder() { 472f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com //just before the pre-instruction register information, if any 482f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com return 99.8; 492f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com } 502f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com 512f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com public boolean writeTo(IndentingWriter writer) throws IOException { 522b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("# "); 532b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver switch (accessedMember.accessedMemberType) { 542b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.METHOD: 552b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("invokes: "); 562b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 572b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.GETTER: 582b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("getter for: "); 592b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 602b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.SETTER: 612b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("setter for: "); 622b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 632b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.PREFIX_INCREMENT: 642b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("++operator for: "); 652b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 662b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.POSTFIX_INCREMENT: 672b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("operator++ for: "); 682b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 692b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.PREFIX_DECREMENT: 702b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("--operator for: "); 712b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 722b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.POSTFIX_DECREMENT: 732b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("operator-- for: "); 742b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 752b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.ADD_ASSIGNMENT: 762b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("+= operator for: "); 772b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 782b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.SUB_ASSIGNMENT: 792b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("-= operator for: "); 802b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 812b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.MUL_ASSIGNMENT: 822b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("*= operator for: "); 832b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 842b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.DIV_ASSIGNMENT: 852b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("/= operator for: "); 862b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 872b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.REM_ASSIGNMENT: 882b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("%= operator for: "); 892b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 902b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.AND_ASSIGNMENT: 912b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("&= operator for: "); 922b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 932b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.OR_ASSIGNMENT: 942b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("|= operator for: "); 952b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 962b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.XOR_ASSIGNMENT: 972b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("^= operator for: "); 982b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 992b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.SHL_ASSIGNMENT: 1002b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write("<<= operator for: "); 1012b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 1022b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.SHR_ASSIGNMENT: 1032b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write(">>= operator for: "); 1042b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 1052b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver case SyntheticAccessorResolver.USHR_ASSIGNMENT: 1062b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver writer.write(">>>= operator for: "); 1072b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver break; 1082b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver default: 1092b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver throw new ExceptionWithContext("Unknown access type: %d", accessedMember.accessedMemberType); 1102b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 1112b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1122b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver int referenceType; 11392a9aa2aa5292ef861211961816fac00e63080d7Ben Gruver if (accessedMember.accessedMemberType == SyntheticAccessorResolver.METHOD) { 1142b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver referenceType = ReferenceType.METHOD; 1152f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com } else { 1162b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver referenceType = ReferenceType.FIELD; 1172f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com } 1182b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver ReferenceFormatter.writeReference(writer, referenceType, accessedMember.accessedMember); 1192f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com return true; 1202f376953b4c96542f200724727e4dac74dd27425jesusfreke@jesusfreke.com } 1212b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 122