01: package org.conform.mdl;
02:
03: import java.util.*;
04:
05: class NameGenerator {
06:
07: private static HashMap valueToName;
08: private static HashMap instanceCountsByClassName;
09:
10: static {
11: init();
12: }
13:
14: private static void init() {
15: valueToName = new IdentityHashtable();
16: instanceCountsByClassName = new HashMap();
17: }
18:
19: static void clear() {
20: init();
21: }
22:
23: private static String unqualifiedClassName(Class type) {
24: if (type.isArray()) {
25: return unqualifiedClassName(type.getComponentType())
26: + "Array";
27: }
28: String name = type.getName();
29: return name.substring(name.lastIndexOf('.') + 1);
30: }
31:
32: static String replace(String s, char out, String in) {
33: StringBuffer result = new StringBuffer();
34: for (int i = 0; i < s.length(); i++) {
35: if (s.charAt(i) != out) {
36: result.append(s.charAt(i));
37: } else {
38: result.append(in);
39: }
40: }
41: return result.toString();
42: }
43:
44: static String instanceName(Object instance) {
45: if (instance == null) {
46: return "null";
47: }
48: if (instance instanceof Class) {
49: return unqualifiedClassName((Class) instance);
50: } else {
51: String result = (String) valueToName.get(instance);
52: if (result != null) {
53: return result;
54: }
55: Class type = instance.getClass();
56: String unqualifiedClassName = unqualifiedClassName(type);
57: Object size = instanceCountsByClassName
58: .get(unqualifiedClassName);
59: int instanceNumber = (size == null) ? 0 : ((Integer) size)
60: .intValue() + 1;
61: instanceCountsByClassName.put(unqualifiedClassName,
62: new Integer(instanceNumber));
63: result = unqualifiedClassName + instanceNumber;
64: valueToName.put(instance, result);
65: return result;
66: }
67: }
68: }
|