• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
3  *             of Java bytecode.
4  *
5  * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * 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.util;
22 
23 import java.util.*;
24 
25 
26 /**
27  * This class provides some utility methods for working with
28  * <code>java.util.List</code> objects.
29  *
30  * @author Eric Lafortune
31  */
32 public class ListUtil
33 {
34     /**
35      * Creates a comma-separated String from the given List of String objects.
36      */
commaSeparatedString(List list)37     public static String commaSeparatedString(List list)
38     {
39         if (list == null)
40         {
41             return null;
42         }
43 
44         StringBuffer buffer = new StringBuffer();
45 
46         for (int index = 0; index < list.size(); index++)
47         {
48             if (index > 0)
49             {
50                 buffer.append(',');
51             }
52 
53             buffer.append(quotedString((String)list.get(index)));
54         }
55 
56         return buffer.toString();
57     }
58 
59 
60     /**
61      * Creates a List of String objects from the given comma-separated String.
62      */
commaSeparatedList(String string)63     public static List commaSeparatedList(String string)
64     {
65         if (string == null)
66         {
67             return null;
68         }
69 
70         List list = new ArrayList();
71         int index = 0;
72         while ((index = skipWhitespace(string, index)) < string.length())
73         {
74             int nextIndex;
75 
76             // Do we have an opening quote?
77             if (string.charAt(index) == '\'')
78             {
79                 // Parse a quoted string.
80                 nextIndex = string.indexOf('\'', index + 1);
81                 if (nextIndex < 0)
82                 {
83                     nextIndex = string.length();
84                 }
85 
86                 list.add(string.substring(index + 1, nextIndex));
87             }
88             else
89             {
90                 // Parse a non-quoted string.
91                 nextIndex = string.indexOf(',', index);
92                 if (nextIndex < 0)
93                 {
94                     nextIndex = string.length();
95                 }
96 
97                 String substring = string.substring(index, nextIndex).trim();
98                 if (substring.length() > 0)
99                 {
100                     list.add(substring);
101                 }
102             }
103 
104             index = nextIndex + 1;
105         }
106 
107         return list;
108     }
109 
110 
111     /**
112      * Skips any whitespace characters.
113      */
skipWhitespace(String string, int index)114     private static int skipWhitespace(String string, int index)
115     {
116         while (index < string.length() &&
117                Character.isWhitespace(string.charAt(index)))
118         {
119             index++;
120         }
121         return index;
122     }
123 
124 
125     /**
126      * Returns a quoted version of the given string, if necessary.
127      */
quotedString(String string)128     private static String quotedString(String string)
129     {
130         return string.length()     == 0 ||
131                string.indexOf(' ') >= 0 ||
132                string.indexOf('@') >= 0 ||
133                string.indexOf('{') >= 0 ||
134                string.indexOf('}') >= 0 ||
135                string.indexOf('(') >= 0 ||
136                string.indexOf(')') >= 0 ||
137                string.indexOf(':') >= 0 ||
138                string.indexOf(';') >= 0 ||
139                string.indexOf(',') >= 0  ? ("'" + string + "'") :
140                                            (      string      );
141     }
142 
143 
main(String[] args)144     public static void main(String[] args)
145     {
146         if (args.length == 1)
147         {
148             System.out.println("Input string: ["+args[0]+"]");
149 
150             List list = commaSeparatedList(args[0]);
151 
152             System.out.println("Resulting list:");
153             for (int index = 0; index < list.size(); index++)
154             {
155                 System.out.println("["+list.get(index)+"]");
156             }
157         }
158         else
159         {
160             List list = Arrays.asList(args);
161 
162             System.out.println("Input list:");
163             for (int index = 0; index < list.size(); index++)
164             {
165                 System.out.println("["+list.get(index)+"]");
166             }
167 
168             String string = commaSeparatedString(list);
169 
170             System.out.println("Resulting string: ["+string+"]");
171         }
172     }
173 }
174