diff --git a/lib/rubocop/cop/style/redundant_self.rb b/lib/rubocop/cop/style/redundant_self.rb
index <HASH>..<HASH> 100644
--- a/lib/rubocop/cop/style/redundant_self.rb
+++ b/lib/rubocop/cop/style/redundant_self.rb
@@ -93,12 +93,10 @@ module RuboCop
 
         def on_send(node)
           receiver, method_name, *_args = *node
-          return unless receiver && receiver.type == :self
-          return if operator?(method_name) ||
-                    keyword?(method_name) ||
-                    constant_name?(method_name) ||
-                    node.asgn_method_call? ||
-                    @allowed_send_nodes.include?(node) ||
+          return unless receiver && receiver.self_type?
+          return unless regular_method_call?(node)
+
+          return if @allowed_send_nodes.include?(node) ||
                     @local_variables.include?(method_name)
 
           add_offense(node, :expression)
@@ -114,6 +112,15 @@ module RuboCop
 
         private
 
+        def regular_method_call?(node)
+          _receiver, method_name, *_args = *node
+
+          !(operator?(method_name) ||
+            keyword?(method_name) ||
+            constant_name?(method_name) ||
+            node.asgn_method_call?)
+        end
+
         def on_argument(node)
           name, = *node
           @local_variables << name
Reduce complexity in RedundantSelf

Extract `regular_method_call?` from `on_send`.