@@ -118,7 +118,7 @@ private void createElementInfos(final CMModel<T, C> model) {
118118 .getAllElements ();
119119 for (ElementInfo <T , C > element : elements ) {
120120 final EI ei = (EI ) element ;
121- elementInfos . put (ei , createElementInfo ( ei ) );
121+ getElementInfo (ei );
122122 }
123123 for (ElementInfo <T , C > element : elements ) {
124124 model .addElementInfo (getElementInfo ((EI ) element ));
@@ -131,7 +131,7 @@ private void createEnumLeafInfos(final CMModel<T, C> model) {
131131 for (EnumLeafInfo <T , C > enumLeafInfo : enums ) {
132132 @ SuppressWarnings ("unchecked" )
133133 final ELI eli = (ELI ) enumLeafInfo ;
134- enumLeafInfos . put (eli , createEnumLeafInfo ( eli ) );
134+ getTypeInfo (eli );
135135 }
136136 for (Map .Entry <ELI , MEnumLeafInfo <T , C >> entry : enumLeafInfos
137137 .entrySet ()) {
@@ -148,7 +148,7 @@ private void createBuiltinLeafInfos(final CMModel<T, C> model) {
148148 for (BuiltinLeafInfo <T , C > builtinLeafInfo : builtins ) {
149149 @ SuppressWarnings ("unchecked" )
150150 final BLI bli = (BLI ) builtinLeafInfo ;
151- builtinLeafInfos . put (bli , createBuiltinLeafInfo ( bli ) );
151+ getTypeInfo (bli );
152152 }
153153 for (BuiltinLeafInfo <T , C > builtinLeafInfo : builtins ) {
154154 model .addBuiltinLeafInfo (getTypeInfo ((BLI ) builtinLeafInfo ));
@@ -158,11 +158,10 @@ private void createBuiltinLeafInfos(final CMModel<T, C> model) {
158158 private void createClassInfos (final CMModel <T , C > model ) {
159159 Collection <? extends ClassInfo <T , C >> beans = typeInfoSet .beans ()
160160 .values ();
161-
162161 for (ClassInfo <T , C > classInfo : beans ) {
163162 @ SuppressWarnings ("unchecked" )
164163 final CI ci = (CI ) classInfo ;
165- classInfos . put (ci , createClassInfo ( ci ) );
164+ getTypeInfo (ci );
166165 }
167166 for (Map .Entry <CI , MClassInfo <T , C >> entry : classInfos .entrySet ()) {
168167 populateClassInfo (entry .getKey (), entry .getValue ());
@@ -220,8 +219,14 @@ protected MTypeInfo<T, C> getTypeInfo(TI typeInfo) {
220219 }
221220 }
222221
223- private MBuiltinLeafInfo <T , C > getTypeInfo (BLI typeInfo ) {
224- return builtinLeafInfos .get (typeInfo );
222+ private MBuiltinLeafInfo <T , C > getTypeInfo (BLI info ) {
223+ MBuiltinLeafInfo <T , C > builtinLeafInfo = builtinLeafInfos .get (info );
224+ if (builtinLeafInfo == null )
225+ {
226+ builtinLeafInfo = createBuiltinLeafInfo (info );
227+ builtinLeafInfos .put (info , builtinLeafInfo );
228+ }
229+ return builtinLeafInfo ;
225230 }
226231
227232 private MTypeInfo <T , C > getTypeInfo (EI info ) {
@@ -234,11 +239,22 @@ private MTypeInfo<T, C> getTypeInfo(EI info) {
234239 }
235240
236241 protected MClassInfo <T , C > getTypeInfo (CI info ) {
237- return classInfos .get (info );
242+
243+ MClassInfo <T , C > classInfo = classInfos .get (info );
244+ if (classInfo == null ) {
245+ classInfo = createClassInfo (info );
246+ classInfos .put (info , classInfo );
247+ }
248+ return classInfo ;
238249 }
239250
240251 private MEnumLeafInfo <T , C > getTypeInfo (ELI info ) {
241- return enumLeafInfos .get (info );
252+ MEnumLeafInfo <T , C > enumLeafInfo = enumLeafInfos .get (info );
253+ if (enumLeafInfo == null ) {
254+ enumLeafInfo = createEnumLeafInfo (info );
255+ enumLeafInfos .put (info , enumLeafInfo );
256+ }
257+ return enumLeafInfo ;
242258
243259 }
244260
@@ -254,7 +270,13 @@ private void populateEnumLeafInfo(ELI info, MEnumLeafInfo<T, C> enumLeafInfo) {
254270 }
255271
256272 protected MElementInfo <T , C > getElementInfo (EI info ) {
257- return elementInfos .get (info );
273+ MElementInfo <T , C > elementInfo = elementInfos .get (info );
274+ if (elementInfo == null )
275+ {
276+ elementInfo = createElementInfo (info );
277+ elementInfos .put (info , elementInfo );
278+ }
279+ return elementInfo ;
258280
259281 }
260282
0 commit comments