|
@@ -105,18 +105,21 @@ public class Token<T extends TokenIdentifier> implements Writable {
|
|
return identifier;
|
|
return identifier;
|
|
}
|
|
}
|
|
|
|
|
|
- private static synchronized Class<? extends TokenIdentifier>
|
|
|
|
|
|
+ private static Class<? extends TokenIdentifier>
|
|
getClassForIdentifier(Text kind) {
|
|
getClassForIdentifier(Text kind) {
|
|
- if (tokenKindMap == null) {
|
|
|
|
- tokenKindMap = Maps.newHashMap();
|
|
|
|
- for (TokenIdentifier id : ServiceLoader.load(TokenIdentifier.class)) {
|
|
|
|
- tokenKindMap.put(id.getKind(), id.getClass());
|
|
|
|
|
|
+ Class<? extends TokenIdentifier> cls = null;
|
|
|
|
+ synchronized (Token.class) {
|
|
|
|
+ if (tokenKindMap == null) {
|
|
|
|
+ tokenKindMap = Maps.newHashMap();
|
|
|
|
+ for (TokenIdentifier id : ServiceLoader.load(TokenIdentifier.class)) {
|
|
|
|
+ tokenKindMap.put(id.getKind(), id.getClass());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ cls = tokenKindMap.get(kind);
|
|
}
|
|
}
|
|
- Class<? extends TokenIdentifier> cls = tokenKindMap.get(kind);
|
|
|
|
if (cls == null) {
|
|
if (cls == null) {
|
|
LOG.warn("Cannot find class for token kind " + kind);
|
|
LOG.warn("Cannot find class for token kind " + kind);
|
|
- return null;
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
return cls;
|
|
return cls;
|
|
}
|
|
}
|