Home | History | Annotate | Download | only in obfuscate
      1 /*
      2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
      3  *             of Java bytecode.
      4  *
      5  * Copyright (c) 2002-2014 Eric Lafortune (eric (at) 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.obfuscate;
     22 
     23 /**
     24  * This <code>NameFactory</code> generates names that are special, by appending
     25  * a suffix.
     26  *
     27  * @author Eric Lafortune
     28  */
     29 public class SpecialNameFactory implements NameFactory
     30 {
     31     private static final char SPECIAL_SUFFIX = '_';
     32 
     33 
     34     private final NameFactory nameFactory;
     35 
     36 
     37     /**
     38      * Creates a new <code>SpecialNameFactory</code>.
     39      * @param nameFactory the name factory from which original names will be
     40      *                    retrieved.
     41      */
     42     public SpecialNameFactory(NameFactory nameFactory)
     43     {
     44         this.nameFactory = nameFactory;
     45     }
     46 
     47 
     48     // Implementations for NameFactory.
     49 
     50     public void reset()
     51     {
     52         nameFactory.reset();
     53     }
     54 
     55 
     56     public String nextName()
     57     {
     58         return nameFactory.nextName() + SPECIAL_SUFFIX;
     59     }
     60 
     61 
     62     // Small utility methods.
     63 
     64     /**
     65      * Returns whether the given name is special.
     66      */
     67     static boolean isSpecialName(String name)
     68     {
     69         return name != null &&
     70                name.charAt(name.length()-1) == SPECIAL_SUFFIX;
     71     }
     72 
     73 
     74     public static void main(String[] args)
     75     {
     76         SpecialNameFactory factory = new SpecialNameFactory(new SimpleNameFactory());
     77 
     78         for (int counter = 0; counter < 50; counter++)
     79         {
     80             System.out.println("["+factory.nextName()+"]");
     81         }
     82     }
     83 }
     84