1. /*
  2. * @(#)NameGenerator.java 1.7 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package java.beans;
  8. import java.util.*;
  9. /*
  10. * @version 1.7 01/23/03
  11. * @author Philip Milne
  12. */
  13. class NameGenerator {
  14. private static HashMap valueToName;
  15. private static HashMap instanceCountsByClassName;
  16. static {
  17. init();
  18. }
  19. private static void init() {
  20. valueToName = new IdentityHashtable();
  21. instanceCountsByClassName = new HashMap();
  22. }
  23. static void clear() {
  24. init();
  25. }
  26. private static String unqualifiedClassName(Class type) {
  27. if (type.isArray()) {
  28. return unqualifiedClassName(type.getComponentType())+"Array";
  29. }
  30. String name = type.getName();
  31. return name.substring(name.lastIndexOf('.')+1);
  32. }
  33. static String replace(String s, char out, String in) {
  34. StringBuffer result = new StringBuffer();
  35. for(int i = 0; i < s.length(); i++) {
  36. if (s.charAt(i) != out) {
  37. result.append(s.charAt(i));
  38. }
  39. else {
  40. result.append(in);
  41. }
  42. }
  43. return result.toString();
  44. }
  45. static String instanceName(Object instance) {
  46. if (instance == null) {
  47. return "null";
  48. }
  49. if (instance instanceof Class) {
  50. return unqualifiedClassName((Class)instance);
  51. }
  52. else {
  53. String result = (String)valueToName.get(instance);
  54. if (result != null) {
  55. return result;
  56. }
  57. Class type = instance.getClass();
  58. String unqualifiedClassName = unqualifiedClassName(type);
  59. Object size = instanceCountsByClassName.get(unqualifiedClassName);
  60. int instanceNumber = (size == null) ? 0 : ((Integer)size).intValue() + 1;
  61. instanceCountsByClassName.put(unqualifiedClassName, new Integer(instanceNumber));
  62. result = unqualifiedClassName + instanceNumber;
  63. valueToName.put(instance, result);
  64. return result;
  65. }
  66. }
  67. }