@@ -223,21 +223,17 @@ def class_alias?(name)
223223 end
224224 end
225225
226- def class_entry ( type_name )
227- case
228- when ( class_entry = class_decls [ type_name ] ) . is_a? ( ClassEntry )
229- class_entry
230- when ( class_alias = class_alias_decls [ type_name ] ) . is_a? ( ClassAliasEntry )
231- class_alias
226+ def class_entry ( type_name , normalized : false )
227+ case entry = constant_entry ( type_name , normalized : normalized || false )
228+ when ClassEntry , ClassAliasEntry
229+ entry
232230 end
233231 end
234232
235- def module_entry ( type_name )
236- case
237- when ( module_entry = class_decls [ type_name ] ) . is_a? ( ModuleEntry )
238- module_entry
239- when ( module_alias = class_alias_decls [ type_name ] ) . is_a? ( ModuleAliasEntry )
240- module_alias
233+ def module_entry ( type_name , normalized : false )
234+ case entry = constant_entry ( type_name , normalized : normalized || false )
235+ when ModuleEntry , ModuleAliasEntry
236+ entry
241237 end
242238 end
243239
@@ -253,26 +249,40 @@ def normalized_class_entry(type_name)
253249 end
254250
255251 def normalized_module_entry ( type_name )
256- if name = normalize_module_name? ( type_name )
257- case entry = module_entry ( name )
258- when ModuleEntry , nil
259- entry
260- when ModuleAliasEntry
261- raise
262- end
263- end
252+ module_entry ( type_name , normalized : true )
264253 end
265254
266- def module_class_entry ( type_name )
267- class_entry ( type_name ) || module_entry ( type_name )
255+ def module_class_entry ( type_name , normalized : false )
256+ entry = constant_entry ( type_name , normalized : normalized || false )
257+ if entry . is_a? ( ConstantEntry )
258+ nil
259+ else
260+ entry
261+ end
268262 end
269263
270264 def normalized_module_class_entry ( type_name )
271- normalized_class_entry ( type_name ) || normalized_module_entry ( type_name )
265+ module_class_entry ( type_name , normalized : true )
272266 end
273267
274- def constant_entry ( type_name )
275- class_entry ( type_name ) || module_entry ( type_name ) || constant_decls [ type_name ]
268+ def constant_entry ( type_name , normalized : false )
269+ if normalized
270+ if normalized_name = normalize_module_name? ( type_name )
271+ class_decls . fetch ( normalized_name , nil )
272+ else
273+ # The type_name may be declared with constant declaration
274+ unless type_name . namespace . empty?
275+ parent = type_name . namespace . to_type_name
276+ normalized_parent = normalize_module_name? ( parent ) or return
277+ constant_name = TypeName . new ( name : type_name . name , namespace : normalized_parent . to_namespace )
278+ constant_decls . fetch ( constant_name , nil )
279+ end
280+ end
281+ else
282+ class_decls . fetch ( type_name , nil ) ||
283+ class_alias_decls . fetch ( type_name , nil ) ||
284+ constant_decls . fetch ( type_name , nil )
285+ end
276286 end
277287
278288 def normalize_type_name? ( name )
@@ -307,6 +317,10 @@ def normalize_type_name!(name)
307317 end
308318 end
309319
320+ def normalize_type_name ( name )
321+ normalize_type_name? ( name ) || name
322+ end
323+
310324 def normalized_type_name? ( type_name )
311325 case
312326 when type_name . interface?
@@ -321,53 +335,44 @@ def normalized_type_name?(type_name)
321335 end
322336
323337 def normalized_type_name! ( name )
324- normalized_type_name? ( name ) or raise "Normalized type name is expected but given `#{ name } `, which is normalized to ` #{ normalize_type_name? ( name ) } ` "
338+ normalized_type_name? ( name ) or raise "Normalized type name is expected but given `#{ name } `"
325339 name
326340 end
327341
328- def normalize_type_name ( name )
329- normalize_type_name? ( name ) || name
330- end
331-
332- def normalize_module_name ( name )
333- normalize_module_name? ( name ) or name
334- end
335-
336342 def normalize_module_name? ( name )
337343 raise "Class/module name is expected: #{ name } " unless name . class?
338344 name = name . absolute! unless name . absolute?
339345
340- if @normalize_module_name_cache . key? ( name )
341- return @normalize_module_name_cache [ name ]
346+ original_name = name
347+
348+ if @normalize_module_name_cache . key? ( original_name )
349+ return @normalize_module_name_cache [ original_name ]
342350 end
343351
344- unless name . namespace . empty?
345- parent = name . namespace . to_type_name
346- if normalized_parent = normalize_module_name? ( parent )
347- type_name = TypeName . new ( namespace : normalized_parent . to_namespace , name : name . name )
348- else
349- @normalize_module_name_cache [ name ] = nil
350- return
352+ if alias_entry = class_alias_decls . fetch ( name , nil )
353+ unless alias_entry . decl . old_name . absolute?
354+ # Having relative old_name means the type name resolution was failed.
355+ # Run TypeNameResolver for failure reason
356+ resolver = Resolver ::TypeNameResolver . build ( self )
357+ name = resolver . resolve_namespace ( name , context : nil )
358+ @normalize_module_name_cache [ original_name ] = name
359+ return name
351360 end
352- else
353- type_name = name
354- end
355361
356- @normalize_module_name_cache [ name ] = false
362+ name = alias_entry . decl . old_name
363+ end
357364
358- entry = constant_entry ( type_name )
365+ if class_decls . key? ( name )
366+ @normalize_module_name_cache [ original_name ] = name
367+ end
368+ end
359369
360- normalized_type_name =
361- case entry
362- when ClassEntry , ModuleEntry
363- type_name
364- when ClassAliasEntry , ModuleAliasEntry
365- normalize_module_name? ( entry . decl . old_name )
366- else
367- nil
368- end
370+ def normalize_module_name ( name )
371+ normalize_module_name? ( name ) || name
372+ end
369373
370- @normalize_module_name_cache [ name ] = normalized_type_name
374+ def normalize_module_name! ( name )
375+ normalize_module_name? ( name ) or raise "Module name `#{ name } ` cannot be normalized"
371376 end
372377
373378 def insert_decl ( decl , outer :, namespace :)
@@ -509,7 +514,7 @@ def resolve_signature(resolver, table, dirs, decls, only: nil)
509514 end
510515
511516 def resolve_type_names ( only : nil )
512- resolver = Resolver ::TypeNameResolver . new ( self )
517+ resolver = Resolver ::TypeNameResolver . build ( self )
513518 env = Environment . new
514519
515520 table = UseMap ::Table . new ( )
0 commit comments