annotate org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.d @ 105:bbe49769ec18

...
author Frank Benoit <benoit@tionex.de>
date Sun, 08 Nov 2009 12:42:30 +0100
parents 8594250b1d1c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2005, 2008 IBM Corporation and others.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM - Initial API and implementation
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 *******************************************************************************/
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
11 // Port to the D programming language:
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
12 // Frank Benoit <benoit@tionex.de>
87
8594250b1d1c make it all again compile
Frank Benoit <benoit@tionex.de>
parents: 83
diff changeset
13 module org.eclipse.osgi.util.NLS;
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import java.lang.all;
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
17
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
18 import java.io.IOException;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
19 import java.io.InputStream;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
20 import java.lang.reflect.Field;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
21 import java.lang.reflect.Modifier;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
22 import java.security.AccessController;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
23 import java.security.PrivilegedAction;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
24 import java.util.ArrayList;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
25 import java.util.HashMap;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
26 import java.util.Locale;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
27 import java.util.Map;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
28 import java.util.Properties;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
29
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
30 import org.eclipse.osgi.framework.debug_.Debug;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
31 import org.eclipse.osgi.framework.log.FrameworkLog;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
32 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 /**
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * Common superclass for all message bundle classes. Provides convenience
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * methods for manipulating messages.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * <p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * The <code>#bind</code> methods perform string substitution and should be considered a
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * convenience and <em>not</em> a full substitute replacement for <code>MessageFormat#format</code>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * method calls.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * </p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * <p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * Text appearing within curly braces in the given message, will be interpreted
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * as a numeric index to the corresponding substitution object in the given array. Calling
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * the <code>#bind</code> methods with text that does not map to an integer will result in an
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * {@link IllegalArgumentException}.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * </p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * Text appearing within single quotes is treated as a literal. A single quote is escaped by
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * a preceeding single quote.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * </p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * <p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * Clients who wish to use the full substitution power of the <code>MessageFormat</code> class should
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * call that class directly and not use these <code>#bind</code> methods.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * </p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * <p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * Clients may subclass this type.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * </p>
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 *
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * @since 3.1
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 */
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 public abstract class NLS {
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
64 private static final Object[] EMPTY_ARGS = null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
65 private static final String EXTENSION = ".properties"; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
66 private static String[] nlSuffixes;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
67 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
68 * NOTE do not change the name of this field; it is set by the Framework using reflection
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
69 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
70 private static FrameworkLog frameworkLog;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
71
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
72 static final int SEVERITY_ERROR = 0x04;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
73 static final int SEVERITY_WARNING = 0x02;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
74 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
75 * This object is assigned to the value of a field map to indicate
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
76 * that a translated message has already been assigned to that field.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
77 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
78 static final Object ASSIGNED = new Object();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
79
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
80 /**
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
81 * Creates a new NLS instance.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
82 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
83 protected this() {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
84 super();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
85 }
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /**
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * Bind the given message's substitution locations with the given string value.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 *
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @param message the message to be manipulated
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * @param binding the object to be inserted into the message
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * @return the manipulated String
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 */
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 public static String bind(String message, Object binding) {
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
96 return internalBind(message, null, String.valueOf(binding), null);
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 }
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 /**
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * Bind the given message's substitution locations with the given string values.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 *
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * @param message the message to be manipulated
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * @param binding1 An object to be inserted into the message
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * @param binding2 A second object to be inserted into the message
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * @return the manipulated String
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 */
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 public static String bind(String message, Object binding1, Object binding2) {
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
109 return internalBind(message, null, String.valueOf(binding1), String.valueOf(binding2));
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 }
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 /**
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * Bind the given message's substitution locations with the given string values.
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 *
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * @param message the message to be manipulated
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * @param bindings An array of objects to be inserted into the message
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * @return the manipulated String
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 */
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 public static String bind(String message, Object[] bindings) {
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
121 return internalBind(message, bindings, null, null);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
122 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
123
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
124 /**
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
125 * Initialize the given class with the values from the specified message bundle.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
126 *
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
127 * @param bundleName fully qualified path of the class name
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
128 * @param clazz the class where the constants will exist
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
129 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
130 public static void initializeMessages(/+FIXFINAL+/ String bundleName, /+FIXFINAL+/ Class clazz) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
131 if (System.getSecurityManager() is null) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
132 load(bundleName, clazz);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
133 return;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
134 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
135 AccessController.doPrivileged(new class() PrivilegedAction {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
136 public Object run() {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
137 load(bundleName, clazz);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
138 return null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
139 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
140 });
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 }
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
142
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
143 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
144 * Perform the string substitution on the given message with the specified args.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
145 * See the class comment for exact details.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
146 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
147 private static String internalBind(String message, Object[] args, String argZero, String argOne) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
148 if (message is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
149 return "No message available."; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
150 if (args is null || args.length_ is 0)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
151 args = EMPTY_ARGS;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
152
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
153 int length_ = message.length();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
154 //estimate correct size of string buffer to avoid growth
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
155 int bufLen = length_ + (args.length_ * 5);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
156 if (argZero !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
157 bufLen += argZero.length() - 3;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
158 if (argOne !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
159 bufLen += argOne.length() - 3;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
160 StringBuffer buffer = new StringBuffer(bufLen < 0 ? 0 : bufLen);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
161 for (int i = 0; i < length_; i++) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
162 char c = message.charAt(i);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
163 switch (c) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
164 case '{' :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
165 int index = message.indexOf('}', i);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
166 // if we don't have a matching closing brace then...
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
167 if (index is -1) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
168 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
169 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
170 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
171 i++;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
172 if (i >= length_) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
173 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
174 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
175 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
176 // look for a substitution
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
177 int number = -1;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
178 try {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
179 number = Integer.parseInt(message.substring(i, index));
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
180 } catch (NumberFormatException e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
181 throw new IllegalArgumentException();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
182 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
183 if (number is 0 && argZero !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
184 buffer.append(argZero);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
185 else if (number is 1 && argOne !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
186 buffer.append(argOne);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
187 else {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
188 if (number >= args.length_ || number < 0) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
189 buffer.append("<missing argument>"); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
190 i = index;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
191 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
192 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
193 buffer.append(args[number]);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
194 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
195 i = index;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
196 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
197 case '\'' :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
198 // if a single quote is the last char on the line then skip it
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
199 int nextIndex = i + 1;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
200 if (nextIndex >= length_) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
201 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
202 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
203 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
204 char next = message.charAt(nextIndex);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
205 // if the next char is another single quote then write out one
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
206 if (next is '\'') {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
207 i++;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
208 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
209 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
210 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
211 // otherwise we want to read until we get to the next single quote
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
212 index = message.indexOf('\'', nextIndex);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
213 // if there are no more in the string, then skip it
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
214 if (index is -1) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
215 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
216 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
217 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
218 // otherwise write out the chars inside the quotes
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
219 buffer.append(message.substring(nextIndex, index));
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
220 i = index;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
221 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
222 default :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
223 buffer.append(c);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
224 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
225 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
226 return buffer.toString();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
227 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
228
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
229 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
230 * Build an array of property files to search. The returned array contains
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
231 * the property fields in order from most specific to most generic.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
232 * So, in the FR_fr locale, it will return file_fr_FR.properties, then
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
233 * file_fr.properties, and finally file.properties.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
234 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
235 private static String[] buildVariants(String root) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
236 if (nlSuffixes is null) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
237 //build list of suffixes for loading resource bundles
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
238 String nl = Locale.getDefault().toString();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
239 ArrayList result = new ArrayList(4);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
240 int lastSeparator;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
241 while (true) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
242 result.add('_' + nl + EXTENSION);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
243 lastSeparator = nl.lastIndexOf('_');
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
244 if (lastSeparator is -1)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
245 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
246 nl = nl.substring(0, lastSeparator);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
247 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
248 //add the empty suffix last (most general)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
249 result.add(EXTENSION);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
250 nlSuffixes = stringcast( result.toArray)(new String[result.size()]);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
251 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
252 root = root.replace('.', '/');
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
253 String[] variants = new String[nlSuffixes.length_];
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
254 for (int i = 0; i < variants.length_; i++)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
255 variants[i] = root + nlSuffixes[i];
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
256 return variants;
12
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 }
bc29606a740c Added dwt-addons in original directory structure of eclipse.org
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258
105
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
259 private static void computeMissingMessages(String bundleName, Class clazz, Map fieldMap, Field[] fieldArray, bool isAccessible) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
260 // iterate over the fields in the class to make sure that there aren't any empty ones
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
261 final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
262 final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
263 final int numFields = fieldArray.length_;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
264 for (int i = 0; i < numFields; i++) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
265 Field field = fieldArray[i];
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
266 if ((field.getModifiers() & MOD_MASK) !is MOD_EXPECTED)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
267 continue;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
268 //if the field has a a value assigned, there is nothing to do
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
269 if (fieldMap.get(field.getName()) is ASSIGNED)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
270 continue;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
271 try {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
272 // Set a value for this empty field. We should never get an exception here because
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
273 // we know we have a public static non-final field. If we do get an exception, silently
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
274 // log it and continue. This means that the field will (most likely) be un-initialized and
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
275 // will fail later in the code and if so then we will see both the NPE and this error.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
276 String value = "NLS missing message: " + field.getName() + " in_: " + bundleName; //$NON-NLS-1$ //$NON-NLS-2$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
277 if (Debug.DEBUG_MESSAGE_BUNDLES)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
278 System.out_.println(value);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
279 log(SEVERITY_WARNING, value, null);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
280 if (!isAccessible)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
281 field.setAccessible(true);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
282 field.set(null, value);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
283 } catch (Exception e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
284 log(SEVERITY_ERROR, "Error setting the missing message value for: " + field.getName(), e); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
285 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
286 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
287 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
288
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
289 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
290 * Load the given resource bundle using the specified class loader.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
291 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
292 static void load(/+FIXFINAL+/ String bundleName, Class clazz) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
293 long start = System.currentTimeMillis();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
294 final Field[] fieldArray = clazz.getDeclaredFields();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
295 ClassLoader loader = clazz.getClassLoader();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
296
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
297 bool isAccessible = (clazz.getModifiers() & Modifier.PUBLIC) !is 0;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
298
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
299 //build a map of field names to Field objects
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
300 final int len = fieldArray.length_;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
301 Map fields = new HashMap(len * 2);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
302 for (int i = 0; i < len; i++)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
303 fields.put(fieldArray[i].getName(), fieldArray[i]);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
304
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
305 // search the variants from most specific to most general, since
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
306 // the MessagesProperties.put method will mark assigned fields
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
307 // to prevent them from being assigned twice
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
308 final String[] variants = buildVariants(bundleName);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
309 for (int i = 0; i < variants.length_; i++) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
310 // loader==null if we're launched off the Java boot classpath
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
311 final InputStream input = loader is null ? ClassLoader.getSystemResourceAsStream(variants[i]) : loader.getResourceAsStream(variants[i]);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
312 if (input is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
313 continue;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
314 try {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
315 final MessagesProperties properties = new MessagesProperties(fields, bundleName, isAccessible);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
316 properties.load(input);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
317 } catch (IOException e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
318 log(SEVERITY_ERROR, "Error loading " + variants[i], e); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
319 } finally {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
320 if (input !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
321 try {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
322 input.close();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
323 } catch (IOException e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
324 // ignore
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
325 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
326 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
327 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
328 computeMissingMessages(bundleName, clazz, fields, fieldArray, isAccessible);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
329 if (Debug.DEBUG_MESSAGE_BUNDLES)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
330 System.out_.println("Time to load message bundle: " + bundleName + " was " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
331 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
332
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
333 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
334 * The method adds a log entry based on the error message and exception.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
335 * The output is written to the System.err.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
336 *
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
337 * This method is only expected to be called if there is a problem in
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
338 * the NLS mechanism. As a result, translation facility is not available
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
339 * here and messages coming out of this log are generally not translated.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
340 *
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
341 * @param severity - severity of the message (SEVERITY_ERROR or SEVERITY_WARNING)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
342 * @param message - message to log
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
343 * @param e - exception to log
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
344 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
345 static void log(int severity, String message, Exception e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
346 if (frameworkLog !is null) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
347 frameworkLog.log(new FrameworkLogEntry("org.eclipse.osgi", severity, 1, message, 0, e, null)); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
348 return;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
349 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
350 String statusMsg;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
351 switch (severity) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
352 case SEVERITY_ERROR :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
353 statusMsg = "Error: "; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
354 break;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
355 case SEVERITY_WARNING :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
356 // intentionally fall through:
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
357 default :
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
358 statusMsg = "Warning: "; //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
359 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
360 if (message !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
361 statusMsg += message;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
362 if (e !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
363 statusMsg += ": " + e.getMessage(); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
364 System.err.println(statusMsg);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
365 if (e !is null)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
366 e.printStackTrace();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
367 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
368
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
369 /*
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
370 * Class which sub-classes java.util.Properties and uses the #put method
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
371 * to set field values rather than storing the values in the table.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
372 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
373 private static class MessagesProperties : Properties {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
374
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
375 private static final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
376 private static final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
377 private static final long serialVersionUID = 1L;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
378
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
379 private final String bundleName;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
380 private final Map fields;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
381 private final bool isAccessible;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
382
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
383 public this(Map fieldMap, String bundleName, bool isAccessible) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
384 super();
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
385 this.fields = fieldMap;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
386 this.bundleName = bundleName;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
387 this.isAccessible = isAccessible;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
388 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
389
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
390 /* (non-Javadoc)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
391 * @see java.util.Hashtable#put(java.lang.Object, java.lang.Object)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
392 */
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
393 public synchronized Object put(Object key, Object value) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
394 Object fieldObject = fields.put(key, ASSIGNED);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
395 // if already assigned, there is nothing to do
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
396 if (fieldObject is ASSIGNED)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
397 return null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
398 if (fieldObject is null) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
399 final String msg = "NLS unused message: " + key + " in_: " + bundleName;//$NON-NLS-1$ //$NON-NLS-2$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
400 if (Debug.DEBUG_MESSAGE_BUNDLES)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
401 System.out_.println(msg);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
402 log(SEVERITY_WARNING, msg, null);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
403 return null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
404 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
405 final Field field = cast(Field) fieldObject;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
406 //can only set value of public static non-final fields
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
407 if ((field.getModifiers() & MOD_MASK) !is MOD_EXPECTED)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
408 return null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
409 try {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
410 // Check to see if we are allowed to modify the field. If we aren't (for instance
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
411 // if the class is not public) then change the accessible attribute of the field
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
412 // before trying to set the value.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
413 if (!isAccessible)
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
414 field.setAccessible(true);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
415 // Set the value into the field. We should never get an exception here because
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
416 // we know we have a public static non-final field. If we do get an exception, silently
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
417 // log it and continue. This means that the field will (most likely) be un-initialized and
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
418 // will fail later in the code and if so then we will see both the NPE and this error.
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
419 field.set(null, value);
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
420 } catch (Exception e) {
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
421 log(SEVERITY_ERROR, "Exception setting field value.", e); //$NON-NLS-1$
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
422 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
423 return null;
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
424 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
425 }
Frank Benoit <benoit@tionex.de>
parents: 87
diff changeset
426 }