Skip to content

Instantly share code, notes, and snippets.

@rktoomey
Created April 1, 2011 13:09
Show Gist options
  • Save rktoomey/898115 to your computer and use it in GitHub Desktop.
Save rktoomey/898115 to your computer and use it in GitHub Desktop.
Ways to look at a compiled Scala class
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ scalap -cp . "Maud"
package com.novus.salat.test.model
@scala.serializable
case class Maud(swept : scala.Predef.String, out : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product {
val swept : scala.Predef.String = { /* compiled code */ }
val out : scala.Predef.String = { /* compiled code */ }
@com.novus.salat.annotations.raw.Persist
val toSea : scala.Predef.String = { /* compiled code */ }
def copy(swept : scala.Predef.String, out : scala.Predef.String) : com.novus.salat.test.model.Maud = { /* compiled code */ }
override def hashCode() : scala.Int = { /* compiled code */ }
override def toString() : scala.Predef.String = { /* compiled code */ }
override def equals(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
override def productPrefix : java.lang.String = { /* compiled code */ }
override def productArity : scala.Int = { /* compiled code */ }
override def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
override def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
}
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ scalap -cp . "Maud$"
package com.novus.salat.test.model;
final class Maud$ extends scala.runtime.AbstractFunction2 with java.io.Serializable with scala.ScalaObject {
def this(): scala.Unit;
def apply(scala.Any, scala.Any): scala.Any;
def readResolve(): scala.Any;
def apply(java.lang.String, java.lang.String): com.novus.salat.test.model.Maud;
def unapply(com.novus.salat.test.model.Maud): scala.Option;
}
object Maud$ {
final val MODULE$: com.novus.salat.test.model.Maud$;
}
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ javap -classpath . "Maud"
Compiled from "TestModel.scala"
public class com.novus.salat.test.model.Maud extends java.lang.Object implements scala.ScalaObject,scala.Product,java.io.Serializable{
public static final scala.Function1 tupled();
public static final scala.Function1 curry();
public static final scala.Function1 curried();
public scala.collection.Iterator productIterator();
public scala.collection.Iterator productElements();
public java.lang.String copy$default$2();
public java.lang.String copy$default$1();
public java.lang.String swept();
public java.lang.String out();
public java.lang.String toSea();
public com.novus.salat.test.model.Maud copy(java.lang.String, java.lang.String);
public int hashCode();
public java.lang.String toString();
public boolean equals(java.lang.Object);
public java.lang.String productPrefix();
public int productArity();
public java.lang.Object productElement(int);
public boolean canEqual(java.lang.Object);
public com.novus.salat.test.model.Maud(java.lang.String, java.lang.String);
}
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ javap -classpath . "Maud$"
Compiled from "TestModel.scala"
public final class com.novus.salat.test.model.Maud$ extends scala.runtime.AbstractFunction2 implements scala.ScalaObject,java.io.Serializable{
public static final com.novus.salat.test.model.Maud$ MODULE$;
public static {};
public scala.Option unapply(com.novus.salat.test.model.Maud);
public com.novus.salat.test.model.Maud apply(java.lang.String, java.lang.String);
public java.lang.Object readResolve();
public java.lang.Object apply(java.lang.Object, java.lang.Object);
}
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ scalap -classpath . "Maud"
package com.novus.salat.test.model
@scala.serializable
case class Maud(swept : scala.Predef.String, out : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product {
val swept : scala.Predef.String = { /* compiled code */ }
val out : scala.Predef.String = { /* compiled code */ }
val toSea : scala.Predef.String = { /* compiled code */ }
def copy(swept : scala.Predef.String, out : scala.Predef.String) : com.novus.salat.test.model.Maud = { /* compiled code */ }
override def hashCode() : scala.Int = { /* compiled code */ }
override def toString() : scala.Predef.String = { /* compiled code */ }
override def equals(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
override def productPrefix : java.lang.String = { /* compiled code */ }
override def productArity : scala.Int = { /* compiled code */ }
override def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
override def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
}
rose@marzipan:~/workspace/salat/target/scala_2.8.1/test-classes/com/novus/salat/test/model$ scalap -classpath . "Maud$"
package com.novus.salat.test.model;
final class Maud$ extends scala.runtime.AbstractFunction2 with java.io.Serializable with scala.ScalaObject {
def this(): scala.Unit;
def apply(scala.Any, scala.Any): scala.Any;
def readResolve(): scala.Any;
def apply(java.lang.String, java.lang.String): com.novus.salat.test.model.Maud;
def unapply(com.novus.salat.test.model.Maud): scala.Option;
}
object Maud$ {
final val MODULE$: com.novus.salat.test.model.Maud$;
}
260 [Thread-109] INFO com.novus.salat.Context$$anon$1 - PATH: %s
NOT PRIVATE
[INDEX] Name isCaseAccessor isInConstructor
[0] swept true false
[1] out true false
[2] <init> false false
[3] toSea false false
[4] copy false false
[5] copy$default$1 false false
[6] copy$default$2 false false
[7] hashCode false false
[8] toString false false
[9] equals false false
[10] productPrefix false false
[11] productArity false false
[12] productElement false false
[13] canEqual false false
PRIVATE
[INDEX] Name isCaseAccessor isInConstructor
[14] swept true false
[15] out true false
[16] toSea false false
479 [Thread-197] INFO com.novus.salat.test.PersistAnnotationSpec - ScalaSig version 5.0
0: ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None)
1: Maud
2: com.novus.salat.test.model
3: model
4: com.novus.salat.test
5: test
6: com.novus.salat
7: salat
8: com.novus
9: novus
10: com
11: com
12: NoSymbol
13: ClassInfoType(ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List(TypeRefType(ThisType(java.lang),java.lang.Object,List()), TypeRefType(ThisType(scala),scala.ScalaObject,List()), TypeRefType(ThisType(scala),scala.Product,List())))
14: TypeRefType(ThisType(java.lang),java.lang.Object,List())
15: ThisType(java.lang)
16: java.lang
17: lang
18: java
19: java
20: java.lang.Object
21: Object
22: TypeRefType(ThisType(scala),scala.ScalaObject,List())
23: ThisType(scala)
24: scala
25: scala
26: scala.ScalaObject
27: ScalaObject
28: TypeRefType(ThisType(scala),scala.Product,List())
29: scala.Product
30: Product
31: MethodSymbol(swept, owner=0, flags=29400200, info=33 ,None)
32: swept
33: PolyType(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()),List())
34: TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List())
35: SingleType(ThisType(scala),scala.Predef)
36: scala.Predef
37: Predef
38: scala.Predef.String
39: String
40: scala.Predef
41: MethodSymbol(swept , owner=0, flags=21080004, info=34 ,None)
42: swept
43: MethodSymbol(out, owner=0, flags=29400200, info=33 ,None)
44: out
45: MethodSymbol(out , owner=0, flags=21080004, info=34 ,None)
46: out
47: MethodSymbol(<init>, owner=0, flags=200, info=49 ,None)
48: <init>
49: MethodType(TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List()),List(MethodSymbol(swept, owner=47, flags=2000, info=34 ,None), MethodSymbol(out, owner=47, flags=2000, info=34 ,None)))
50: TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List())
51: ThisType(com.novus.salat.test.model)
52: MethodSymbol(swept, owner=47, flags=2000, info=34 ,None)
53: MethodSymbol(out, owner=47, flags=2000, info=34 ,None)
54: MethodSymbol(toSea, owner=0, flags=8400200, info=33 ,None)
55: toSea
56: MethodSymbol(toSea , owner=0, flags=80004, info=34 ,None)
57: toSea
58: AttributeInfo(MethodSymbol(toSea , owner=0, flags=80004, info=34 ,None),AnnotatedType(TypeRefType(ThisType(com.novus.salat.annotations.raw),com.novus.salat.annotations.raw.Persist,List()),List(68)),None,List())
59: AnnotatedType(TypeRefType(ThisType(com.novus.salat.annotations.raw),com.novus.salat.annotations.raw.Persist,List()),List(68))
60: TypeRefType(ThisType(com.novus.salat.annotations.raw),com.novus.salat.annotations.raw.Persist,List())
61: ThisType(com.novus.salat.annotations.raw)
62: com.novus.salat.annotations.raw
63: raw
64: com.novus.salat.annotations
65: annotations
66: com.novus.salat.annotations.raw.Persist
67: Persist
68: AnnotInfo(List(69))
69: TypeRefType(ThisType(scala.annotation.target),scala.annotation.target.field,List())
70: ThisType(scala.annotation.target)
71: scala.annotation.target
72: target
73: scala.annotation
74: annotation
75: scala.annotation.target.field
76: field
77: MethodSymbol(copy, owner=0, flags=200200, info=79 ,None)
78: copy
79: MethodType(TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List()),List(MethodSymbol(swept, owner=77, flags=2002000, info=34 ,None), MethodSymbol(out, owner=77, flags=2002000, info=34 ,None)))
80: MethodSymbol(swept, owner=77, flags=2002000, info=34 ,None)
81: MethodSymbol(out, owner=77, flags=2002000, info=34 ,None)
82: MethodSymbol(copy$default$1, owner=0, flags=2200200, info=84 ,None)
83: copy$default$1
84: PolyType(AnnotatedType(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()),List(86)),List())
85: AnnotatedType(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()),List(86))
86: AnnotInfo(List(87))
87: TypeRefType(ThisType(scala.annotation.unchecked),scala.annotation.unchecked.uncheckedVariance,List())
88: ThisType(scala.annotation.unchecked)
89: scala.annotation.unchecked
90: unchecked
91: scala.annotation.unchecked.uncheckedVariance
92: uncheckedVariance
93: MethodSymbol(copy$default$2, owner=0, flags=2200200, info=84 ,None)
94: copy$default$2
95: MethodSymbol(hashCode, owner=0, flags=40000220, info=97 ,None)
96: hashCode
97: MethodType(TypeRefType(ThisType(scala),scala.Int,List()),List())
98: TypeRefType(ThisType(scala),scala.Int,List())
99: scala.Int
100: Int
101: MethodSymbol(toString, owner=0, flags=40000220, info=103 ,None)
102: toString
103: MethodType(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()),List())
104: MethodSymbol(equals, owner=0, flags=40000220, info=106 ,None)
105: equals
106: MethodType(TypeRefType(ThisType(scala),scala.Boolean,List()),List(MethodSymbol(x$1, owner=104, flags=202000, info=112 ,None)))
107: TypeRefType(ThisType(scala),scala.Boolean,List())
108: scala.Boolean
109: Boolean
110: MethodSymbol(x$1, owner=104, flags=202000, info=112 ,None)
111: x$1
112: TypeRefType(ThisType(scala),scala.Any,List())
113: scala.Any
114: Any
115: MethodSymbol(productPrefix, owner=0, flags=40000220, info=117 ,None)
116: productPrefix
117: PolyType(TypeRefType(ThisType(java.lang),java.lang.String,List()),List())
118: TypeRefType(ThisType(java.lang),java.lang.String,List())
119: java.lang.String
120: MethodSymbol(productArity, owner=0, flags=40000220, info=122 ,None)
121: productArity
122: PolyType(TypeRefType(ThisType(scala),scala.Int,List()),List())
123: MethodSymbol(productElement, owner=0, flags=40000220, info=125 ,None)
124: productElement
125: MethodType(TypeRefType(ThisType(scala),scala.Any,List()),List(MethodSymbol(x$1, owner=123, flags=202000, info=98 ,None)))
126: MethodSymbol(x$1, owner=123, flags=202000, info=98 ,None)
127: MethodSymbol(canEqual, owner=0, flags=40000220, info=129 ,None)
128: canEqual
129: MethodType(TypeRefType(ThisType(scala),scala.Boolean,List()),List(MethodSymbol(x$1, owner=127, flags=202000, info=112 ,None)))
130: MethodSymbol(x$1, owner=127, flags=202000, info=112 ,None)
131: AttributeInfo(ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),TypeRefType(ThisType(scala),scala.serializable,List()),None,List())
132: TypeRefType(ThisType(scala),scala.serializable,List())
133: scala.serializable
134: serializable
135: ObjectSymbol(Maud, owner=com.novus.salat.test.model, flags=200402, info=137 )
136: Maud
137: TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40200402, info=139 ,None),List())
138: ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40200402, info=139 ,None)
139: ClassInfoType(ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40200402, info=139 ,None),List(TypeRefType(ThisType(scala.runtime),scala.runtime.AbstractFunction2,List(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List()))), TypeRefType(ThisType(scala),scala.ScalaObject,List())))
140: TypeRefType(ThisType(scala.runtime),scala.runtime.AbstractFunction2,List(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List())))
141: ThisType(scala.runtime)
142: scala.runtime
143: runtime
144: scala.runtime.AbstractFunction2
145: AbstractFunction2
146: MethodSymbol(<init>, owner=138, flags=200, info=147 ,None)
147: MethodType(TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40200402, info=139 ,None),List()),List())
148: MethodSymbol(apply, owner=138, flags=200240, info=150 ,None)
149: apply
150: MethodType(TypeRefType(ThisType(com.novus.salat.test.model),ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40000040, info=13 ,None),List()),List(MethodSymbol(swept, owner=148, flags=2000, info=34 ,None), MethodSymbol(out, owner=148, flags=2000, info=34 ,None)))
151: MethodSymbol(swept, owner=148, flags=2000, info=34 ,None)
152: MethodSymbol(out, owner=148, flags=2000, info=34 ,None)
153: MethodSymbol(unapply, owner=138, flags=200240, info=155 ,None)
154: unapply
155: MethodType(TypeRefType(ThisType(scala),scala.Option,List(TypeRefType(ThisType(scala),scala.Tuple2,List(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()))))),List(MethodSymbol(x$0, owner=153, flags=2000, info=50 ,None)))
156: TypeRefType(ThisType(scala),scala.Option,List(TypeRefType(ThisType(scala),scala.Tuple2,List(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List())))))
157: scala.Option
158: Option
159: TypeRefType(ThisType(scala),scala.Tuple2,List(TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List()), TypeRefType(SingleType(ThisType(scala),scala.Predef),scala.Predef.String,List())))
160: scala.Tuple2
161: Tuple2
162: MethodSymbol(x$0, owner=153, flags=2000, info=50 ,None)
163: x$0
164: MethodSymbol(readResolve, owner=138, flags=40000208, info=166 ,None)
165: readResolve
166: MethodType(TypeRefType(ThisType(java.lang),java.lang.Object,List()),List())
167: AttributeInfo(ClassSymbol(Maud, owner=com.novus.salat.test.model, flags=40200402, info=139 ,None),TypeRefType(ThisType(scala),scala.serializable,List()),None,List())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment