summaryrefslogblamecommitdiff
path: root/src/library/scala/Proxy.scala
blob: f79b01bf83896d5d0f249a05109b7a5c07c7cb9d (plain) (tree)
1
2
3
4
5
6
7
8
9

                                                                          
                                                                          
                                                                          

                                                                          

                                                                          
             
 
                                                                   
                                                                   
                                    
       


                                     

                                                                      
                                                                    



                            
             
               






                                                           
                                               
 







                                                                             
/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2002-2011, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://www.scala-lang.org/           **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

package scala

/** This class implements a simple proxy that forwards all calls to
 *  the public, non-final methods defined in class `Any` to another
 *  object self.  Those methods are:
 *  {{{
 *    def hashCode(): Int
 *    def equals(other: Any): Boolean
 *    def toString(): String
 *  }}}
 *  '''Note:''' forwarding methods in this way will most likely create
 *  an asymmetric equals method, which is not generally recommended.
 *
 *  @author  Matthias Zenger
 *  @version 1.0, 26/04/2004
 */
trait Proxy {
  def self: Any

  override def hashCode: Int = self.hashCode
  override def equals(that: Any): Boolean = that match {
    case null       => false
    case x: Equals  => (x canEqual self) && (x equals self)
    case x          => (x equals self)
  }
  override def toString: String = self.toString
}

object Proxy {
  /** A proxy which exposes the type it is proxying for via a type parameter.
   */
  trait Typed[T] extends Proxy {
    def self: T
  }
}