@@ -155,7 +155,7 @@ def define_instance(definition, type_name, subst, define_class_vars:)
155155 member . names . each do |name |
156156 ivar_name = :"@#{ name } "
157157 attr_type = member . type || Types ::Bases ::Any . new ( location : nil )
158-
158+
159159 insert_variable (
160160 type_name ,
161161 definition . instance_variables ,
@@ -574,6 +574,7 @@ def insert_variable(type_name, variables, name:, type:, source:)
574574 declared_in : type_name ,
575575 source : source
576576 )
577+
577578 validate_variable ( variables [ name ] )
578579 end
579580
@@ -584,7 +585,15 @@ def validate_variable(var)
584585 variables = [ ] #: Array[Definition::Variable]
585586 tmp_var = var
586587 while tmp_var
587- variables << tmp_var if tmp_var . source . is_a? ( AST ::Members ::Var )
588+ case tmp_var . source
589+ when AST ::Members ::AttrReader , AST ::Members ::AttrWriter , AST ::Members ::AttrAccessor
590+ # nop
591+ when AST ::Ruby ::Members ::AttrReaderMember , AST ::Ruby ::Members ::AttrWriterMember , AST ::Ruby ::Members ::AttrAccessorMember
592+ # nop
593+ else
594+ variables << tmp_var
595+ end
596+
588597 tmp_var = tmp_var . parent_variable
589598 end
590599
@@ -602,6 +611,10 @@ def validate_variable(var)
602611 if r . source . instance_of? ( AST ::Members ::ClassInstanceVariable ) && l . declared_in == r . declared_in
603612 raise ClassInstanceVariableDuplicationError . new ( type_name : l . declared_in , variable_name : l . source . name , location : l . source . location )
604613 end
614+ when AST ::Ruby ::Members ::InstanceVariableMember
615+ if l . declared_in == r . declared_in
616+ raise InstanceVariableDuplicationError . new ( type_name : l . declared_in , variable_name : l . source . name , location : l . source . location )
617+ end
605618 end
606619 end
607620
0 commit comments