   selectOnce: false
 
   @derivesInnerAndA: ->
-    @generateClass("A" + @name, false).extend()
-    @generateClass("Inner" + @name, true).extend()
-
-  @generateClass: (klassName, isInner) ->
+    @generateClass("A" + @name, false)
+    @generateClass("Inner" + @name, true)
+
+  @derivesInnerAndAForAllowForwarding: ->
+    @generateClass("A" + @name + "AllowForwarding", false, true)
+    @generateClass("Inner" + @name + "AllowForwarding", true, true)
+
+  @generateClass: (klassName, inner, allowForwarding) ->
     klass = class extends this
     Object.defineProperty klass, 'name', get: -> klassName
-    klass::inner = isInner
-    klass
+    klass::inner = inner
+    if allowForwarding
+      klass::allowForwarding = true
+    klass.extend()
 
   constructor: ->
-    @constructor::inner = @getName().startsWith('Inner')
     super
     @initialize()
 


    rowRange = @findRowRangeBy(fromRow, predict)
    @getBufferRangeForRowRange(rowRange)
class AIndentation extends Indentation
  @extend()
class InnerIndentation extends Indentation
  @extend()

# Section: Comment
# =========================
class Comment extends TextObject
  @extend(false)
  wise: 'linewise'

  getRange: (selection) ->

      popNextBufferRange()
    else
      range

# NOTE: Function range determination is depending on fold.
class Function extends Fold
  @extend(false)
  @derivesInnerAndA()
  # Some language don't include closing `}` into fold.
  scopeNamesOmittingEndRow: ['source.go', 'source.elixir']

