Skip to content

Instantly share code, notes, and snippets.

@smarter
Created March 18, 2016 21:39
Show Gist options
  • Select an option

  • Save smarter/d7d9e2b7b2378269233f to your computer and use it in GitHub Desktop.

Select an option

Save smarter/d7d9e2b7b2378269233f to your computer and use it in GitHub Desktop.
// usedNames: $anon,<init>,A,Any,B$,HasT,Int,Nothing,Object,T,X$,p,x
// topLevelDependencies: class A,class Any,class HasT,class Int,class Nothing,class Object,module class <empty>,module class B$
// topLevelInheritanceDependencies: class A,class HasT,class Object
trait HasT extends java.lang.this#Object with scala.this#Any {
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
def <init>(): this#HasT
abstract type T>: scala.this#Nothing <: scala.this#Any
}
abstract class A extends java.lang.this#Object with scala.this#Any {
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
final object A.X extends java.lang.this#Object with scala.this#Any { self: A.this#X =>
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
def foo(x: A.this#p#T): A.this#p#T
}
def <init>(): this#A
val p: this#HasT
final lazy val X: A.this#X$
}
final object B extends this#A with java.lang.this#Object with scala.this#Any { self: this#B =>
^inherited^ final object A.X extends java.lang.this#Object with scala.this#Any { self: A.this#X =>
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
def foo(x: A.this#p#T): A.this#p#T
}
^inherited^ final lazy val X: A.this#X$
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
override val p: this#HasT {type T = scala.this#Int}
}
trait HasT { type T }
abstract class A {
val p: HasT
object X {
def foo(x: p.T): p.T = x
}
}
object B extends A {
// compile, change Int to String, compile succeeds but shouldn't
override val p: HasT { type T = Int } = new HasT { type T = Int }
}
// usedNames: <init>,B,Object,Test$,X,foo
// topLevelDependencies: class A,class Object,module class <empty>,module class B$,module class Test$
// topLevelInheritanceDependencies: class Object
final object Test extends java.lang.this#Object with scala.this#Any { self: this#Test =>
^inherited^ def wait(x$0: scala.this#Long, x$1: scala.this#Int): scala.this#Unit
^inherited^ def wait(x$0: scala.this#Long): scala.this#Unit
^inherited^ def wait(): scala.this#Unit
^inherited^ protected def finalize(): scala.this#Unit
^inherited^ def equals(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def ##: scala.this#Int
^inherited^ protected def clone(): java.lang.this#Object
^inherited^ def toString(): java.lang.this#String
^inherited^ def notify(): scala.this#Unit
^inherited^ final def ==(x$0: scala.this#Any): scala.this#Boolean
^inherited^ final def getClass(): java.lang.this#Class
^inherited^ def hashCode(): scala.this#Int
^inherited^ final def eq(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def !=(x$0: scala.this#Any): scala.this#Boolean
^inherited^ def notifyAll(): scala.this#Unit
^inherited^ final def isInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: scala.this#Boolean
^inherited^ final def ne(x$0: java.lang.this#Object): scala.this#Boolean
^inherited^ final def asInstanceOf[ T0 >: scala.this#Nothing <: scala.this#Any]: <T0>
^inherited^ final def synchronized[ T0 >: scala.this#Nothing <: scala.this#Any](x$0: <T0>): <T0>
}
object Test {
B.X.foo(1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment