@@ -58,10 +58,13 @@ object ClosureCleaner extends Logging {
58
58
private def getOuterClasses (obj : AnyRef ): List [Class [_]] = {
59
59
for (f <- obj.getClass.getDeclaredFields if f.getName == " $outer" ) {
60
60
f.setAccessible(true )
61
- if (isClosure(f.getType)) {
62
- return f.getType :: getOuterClasses(f.get(obj))
63
- } else {
64
- return f.getType :: Nil // Stop at the first $outer that is not a closure
61
+ val outer = f.get(obj)
62
+ if (outer != null ) {
63
+ if (isClosure(f.getType)) {
64
+ return f.getType :: getOuterClasses(f.get(obj))
65
+ } else {
66
+ return f.getType :: Nil // Stop at the first $outer that is not a closure
67
+ }
65
68
}
66
69
}
67
70
Nil
@@ -71,10 +74,13 @@ object ClosureCleaner extends Logging {
71
74
private def getOuterObjects (obj : AnyRef ): List [AnyRef ] = {
72
75
for (f <- obj.getClass.getDeclaredFields if f.getName == " $outer" ) {
73
76
f.setAccessible(true )
74
- if (isClosure(f.getType)) {
75
- return f.get(obj) :: getOuterObjects(f.get(obj))
76
- } else {
77
- return f.get(obj) :: Nil // Stop at the first $outer that is not a closure
77
+ val outer = f.get(obj)
78
+ if (outer != null ) {
79
+ if (isClosure(f.getType)) {
80
+ return f.get(obj) :: getOuterObjects(f.get(obj))
81
+ } else {
82
+ return f.get(obj) :: Nil // Stop at the first $outer that is not a closure
83
+ }
78
84
}
79
85
}
80
86
Nil
@@ -167,11 +173,15 @@ object ClosureCleaner extends Logging {
167
173
func : AnyRef ,
168
174
checkSerializable : Boolean ,
169
175
cleanTransitively : Boolean ,
170
- accessedFields : Map [Class [_], Set [String ]]) {
176
+ accessedFields : Map [Class [_], Set [String ]]): Unit = {
171
177
172
178
// TODO: clean all inner closures first. This requires us to find the inner objects.
173
179
// TODO: cache outerClasses / innerClasses / accessedFields
174
180
181
+ if (func == null ) {
182
+ return
183
+ }
184
+
175
185
logDebug(s " +++ Cleaning closure $func ( ${func.getClass.getName}}) +++ " )
176
186
177
187
// A list of classes that represents closures enclosed in the given one
0 commit comments