14645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver/* 24645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * Copyright 2015, Google Inc. 34645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * All rights reserved. 44645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * 54645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * Redistribution and use in source and binary forms, with or without 64645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * modification, are permitted provided that the following conditions are 74645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * met: 84645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * 94645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * * Redistributions of source code must retain the above copyright 104645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * notice, this list of conditions and the following disclaimer. 114645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * * Redistributions in binary form must reproduce the above 124645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * copyright notice, this list of conditions and the following disclaimer 134645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * in the documentation and/or other materials provided with the 144645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * distribution. 154645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * * Neither the name of Google Inc. nor the names of its 164645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * contributors may be used to endorse or promote products derived from 174645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * this software without specific prior written permission. 184645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * 194645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 204645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 214645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 224645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 234645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 244645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 254645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 264645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 274645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 284645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 294645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 304645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver */ 314645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 324645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverpackage org.jf.smalidea.util; 334645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 344645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverimport org.antlr.runtime.CommonToken; 354645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverimport org.jetbrains.annotations.Nullable; 364645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverimport org.jf.smali.smaliFlexLexer; 374645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverimport org.jf.smali.smaliParser; 384645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 394645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverimport java.io.StringReader; 404645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 414645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruverpublic class StringUtils { 424645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 434645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver @Nullable 444645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver public static String parseQuotedString(String str) { 454645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver if (str.charAt(0) != '"') { 464645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver return null; 474645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver } 484645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 494645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver smaliFlexLexer lexer = new smaliFlexLexer(new StringReader(str)); 504645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver lexer.setSuppressErrors(true); 514645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 524645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver CommonToken token = (CommonToken)lexer.nextToken(); 534645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver if (token.getType() != smaliParser.STRING_LITERAL) { 544645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver return null; 554645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver } 564645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 574645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver if (token.getStopIndex() != str.length()-1) { 584645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver return null; 594645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver } 604645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver 614645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver String text = token.getText(); 624645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver return text.substring(1, text.length()-1); 634645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver } 644645cc437d23bc9ca0ab4aeed10c7ff79ad229a3Ben Gruver} 65