@@ -122,21 +122,17 @@ def class_alias?(name)
122122 end
123123 end
124124
125- def class_entry ( type_name )
126- case
127- when ( class_entry = class_decls [ type_name ] ) . is_a? ( ClassEntry )
128- class_entry
129- when ( class_alias = class_alias_decls [ type_name ] ) . is_a? ( ClassAliasEntry )
130- class_alias
125+ def class_entry ( type_name , normalized : false )
126+ case entry = constant_entry ( type_name , normalized : normalized || false )
127+ when ClassEntry , ClassAliasEntry
128+ entry
131129 end
132130 end
133131
134- def module_entry ( type_name )
135- case
136- when ( module_entry = class_decls [ type_name ] ) . is_a? ( ModuleEntry )
137- module_entry
138- when ( module_alias = class_alias_decls [ type_name ] ) . is_a? ( ModuleAliasEntry )
139- module_alias
132+ def module_entry ( type_name , normalized : false )
133+ case entry = constant_entry ( type_name , normalized : normalized || false )
134+ when ModuleEntry , ModuleAliasEntry
135+ entry
140136 end
141137 end
142138
@@ -152,26 +148,40 @@ def normalized_class_entry(type_name)
152148 end
153149
154150 def normalized_module_entry ( type_name )
155- if name = normalize_module_name? ( type_name )
156- case entry = module_entry ( name )
157- when ModuleEntry , nil
158- entry
159- when ModuleAliasEntry
160- raise
161- end
162- end
151+ module_entry ( type_name , normalized : true )
163152 end
164153
165- def module_class_entry ( type_name )
166- class_entry ( type_name ) || module_entry ( type_name )
154+ def module_class_entry ( type_name , normalized : false )
155+ entry = constant_entry ( type_name , normalized : normalized || false )
156+ if entry . is_a? ( ConstantEntry )
157+ nil
158+ else
159+ entry
160+ end
167161 end
168162
169163 def normalized_module_class_entry ( type_name )
170- normalized_class_entry ( type_name ) || normalized_module_entry ( type_name )
164+ module_class_entry ( type_name , normalized : true )
171165 end
172166
173- def constant_entry ( type_name )
174- class_entry ( type_name ) || module_entry ( type_name ) || constant_decls [ type_name ]
167+ def constant_entry ( type_name , normalized : false )
168+ if normalized
169+ if normalized_name = normalize_module_name? ( type_name )
170+ class_decls . fetch ( normalized_name , nil )
171+ else
172+ # The type_name may be declared with constant declaration
173+ unless type_name . namespace . empty?
174+ parent = type_name . namespace . to_type_name
175+ normalized_parent = normalize_module_name? ( parent ) or return
176+ constant_name = TypeName . new ( name : type_name . name , namespace : normalized_parent . to_namespace )
177+ constant_decls . fetch ( constant_name , nil )
178+ end
179+ end
180+ else
181+ class_decls . fetch ( type_name , nil ) ||
182+ class_alias_decls . fetch ( type_name , nil ) ||
183+ constant_decls . fetch ( type_name , nil )
184+ end
175185 end
176186
177187 def normalize_type_name? ( name )
@@ -206,6 +216,10 @@ def normalize_type_name!(name)
206216 end
207217 end
208218
219+ def normalize_type_name ( name )
220+ normalize_type_name? ( name ) || name
221+ end
222+
209223 def normalized_type_name? ( type_name )
210224 case
211225 when type_name . interface?
@@ -220,53 +234,44 @@ def normalized_type_name?(type_name)
220234 end
221235
222236 def normalized_type_name! ( name )
223- normalized_type_name? ( name ) or raise "Normalized type name is expected but given `#{ name } `, which is normalized to ` #{ normalize_type_name? ( name ) } ` "
237+ normalized_type_name? ( name ) or raise "Normalized type name is expected but given `#{ name } `"
224238 name
225239 end
226240
227- def normalize_type_name ( name )
228- normalize_type_name? ( name ) || name
229- end
230-
231- def normalize_module_name ( name )
232- normalize_module_name? ( name ) or name
233- end
234-
235241 def normalize_module_name? ( name )
236242 raise "Class/module name is expected: #{ name } " unless name . class?
237243 name = name . absolute! unless name . absolute?
238244
239- if @normalize_module_name_cache . key? ( name )
240- return @normalize_module_name_cache [ name ]
245+ original_name = name
246+
247+ if @normalize_module_name_cache . key? ( original_name )
248+ return @normalize_module_name_cache [ original_name ]
241249 end
242250
243- unless name . namespace . empty?
244- parent = name . namespace . to_type_name
245- if normalized_parent = normalize_module_name? ( parent )
246- type_name = TypeName . new ( namespace : normalized_parent . to_namespace , name : name . name )
247- else
248- @normalize_module_name_cache [ name ] = nil
249- return
251+ if alias_entry = class_alias_decls . fetch ( name , nil )
252+ unless alias_entry . decl . old_name . absolute?
253+ # Having relative old_name means the type name resolution was failed.
254+ # Run TypeNameResolver for failure reason
255+ resolver = Resolver ::TypeNameResolver . build ( self )
256+ name = resolver . resolve_namespace ( name , context : nil )
257+ @normalize_module_name_cache [ original_name ] = name
258+ return name
250259 end
251- else
252- type_name = name
253- end
254260
255- @normalize_module_name_cache [ name ] = false
261+ name = alias_entry . decl . old_name
262+ end
256263
257- entry = constant_entry ( type_name )
264+ if class_decls . key? ( name )
265+ @normalize_module_name_cache [ original_name ] = name
266+ end
267+ end
258268
259- normalized_type_name =
260- case entry
261- when ClassEntry , ModuleEntry
262- type_name
263- when ClassAliasEntry , ModuleAliasEntry
264- normalize_module_name? ( entry . decl . old_name )
265- else
266- nil
267- end
269+ def normalize_module_name ( name )
270+ normalize_module_name? ( name ) || name
271+ end
268272
269- @normalize_module_name_cache [ name ] = normalized_type_name
273+ def normalize_module_name! ( name )
274+ normalize_module_name? ( name ) or raise "Module name `#{ name } ` cannot be normalized"
270275 end
271276
272277 def insert_rbs_decl ( decl , context :, namespace :)
@@ -515,7 +520,7 @@ def resolve_signature(resolver, table, dirs, decls, only: nil)
515520 end
516521
517522 def resolve_type_names ( only : nil )
518- resolver = Resolver ::TypeNameResolver . new ( self )
523+ resolver = Resolver ::TypeNameResolver . build ( self )
519524 env = Environment . new
520525
521526 table = UseMap ::Table . new ( )
0 commit comments