@@ -148,6 +148,9 @@ func (act *actionHandle) analyze(ctx context.Context) ([]*source.Error, interfac
148
148
if ! ok {
149
149
return nil , nil , errors .Errorf ("unexpected type for %s:%s" , act .pkg .ID (), act .analyzer .Name )
150
150
}
151
+ if data == nil {
152
+ return nil , nil , errors .Errorf ("unexpected nil analysis for %s:%s" , act .pkg .ID (), act .analyzer .Name )
153
+ }
151
154
return data .diagnostics , data .result , data .err
152
155
}
153
156
@@ -160,6 +163,9 @@ func (act *actionHandle) cached() ([]*source.Error, interface{}, error) {
160
163
if ! ok {
161
164
return nil , nil , errors .Errorf ("unexpected type for %s:%s" , act .pkg .ID (), act .analyzer .Name )
162
165
}
166
+ if data == nil {
167
+ return nil , nil , errors .Errorf ("unexpected nil cached analysis for %s:%s" , act .pkg .ID (), act .analyzer .Name )
168
+ }
163
169
return data .diagnostics , data .result , data .err
164
170
}
165
171
@@ -213,8 +219,6 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
213
219
// Plumb the output values of the dependencies
214
220
// into the inputs of this action. Also facts.
215
221
inputs := make (map [* analysis.Analyzer ]interface {})
216
- objectFacts := make (map [objectFactKey ]analysis.Fact )
217
- packageFacts := make (map [packageFactKey ]analysis.Fact )
218
222
219
223
for depHandle , depData := range deps {
220
224
if depHandle .pkg == pkg {
@@ -233,14 +237,14 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
233
237
if ! exportedFrom (key .obj , depHandle .pkg .types ) {
234
238
continue
235
239
}
236
- objectFacts [key ] = fact
240
+ data . objectFacts [key ] = fact
237
241
}
238
242
for key , fact := range depData .packageFacts {
239
243
// TODO: filter out facts that belong to
240
244
// packages not mentioned in the export data
241
245
// to prevent side channels.
242
246
243
- packageFacts [key ] = fact
247
+ data . packageFacts [key ] = fact
244
248
}
245
249
}
246
250
}
@@ -271,7 +275,7 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
271
275
}
272
276
key := objectFactKey {obj , factType (ptr )}
273
277
274
- if v , ok := objectFacts [key ]; ok {
278
+ if v , ok := data . objectFacts [key ]; ok {
275
279
reflect .ValueOf (ptr ).Elem ().Set (reflect .ValueOf (v ).Elem ())
276
280
return true
277
281
}
@@ -283,34 +287,34 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
283
287
analyzer , pkg .ID (), obj , fact ))
284
288
}
285
289
key := objectFactKey {obj , factType (fact )}
286
- objectFacts [key ] = fact // clobber any existing entry
290
+ data . objectFacts [key ] = fact // clobber any existing entry
287
291
},
288
292
ImportPackageFact : func (pkg * types.Package , ptr analysis.Fact ) bool {
289
293
if pkg == nil {
290
294
panic ("nil package" )
291
295
}
292
296
key := packageFactKey {pkg , factType (ptr )}
293
- if v , ok := packageFacts [key ]; ok {
297
+ if v , ok := data . packageFacts [key ]; ok {
294
298
reflect .ValueOf (ptr ).Elem ().Set (reflect .ValueOf (v ).Elem ())
295
299
return true
296
300
}
297
301
return false
298
302
},
299
303
ExportPackageFact : func (fact analysis.Fact ) {
300
304
key := packageFactKey {pkg .types , factType (fact )}
301
- packageFacts [key ] = fact // clobber any existing entry
305
+ data . packageFacts [key ] = fact // clobber any existing entry
302
306
},
303
307
AllObjectFacts : func () []analysis.ObjectFact {
304
- facts := make ([]analysis.ObjectFact , 0 , len (objectFacts ))
305
- for k := range objectFacts {
306
- facts = append (facts , analysis.ObjectFact {Object : k .obj , Fact : objectFacts [k ]})
308
+ facts := make ([]analysis.ObjectFact , 0 , len (data . objectFacts ))
309
+ for k := range data . objectFacts {
310
+ facts = append (facts , analysis.ObjectFact {Object : k .obj , Fact : data . objectFacts [k ]})
307
311
}
308
312
return facts
309
313
},
310
314
AllPackageFacts : func () []analysis.PackageFact {
311
- facts := make ([]analysis.PackageFact , 0 , len (packageFacts ))
312
- for k := range packageFacts {
313
- facts = append (facts , analysis.PackageFact {Package : k .pkg , Fact : packageFacts [k ]})
315
+ facts := make ([]analysis.PackageFact , 0 , len (data . packageFacts ))
316
+ for k := range data . packageFacts {
317
+ facts = append (facts , analysis.PackageFact {Package : k .pkg , Fact : data . packageFacts [k ]})
314
318
}
315
319
return facts
316
320
},
@@ -341,7 +345,8 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
341
345
for _ , diag := range diagnostics {
342
346
srcErr , err := sourceError (ctx , fset , pkg , diag )
343
347
if err != nil {
344
- return nil
348
+ data .err = err
349
+ return data
345
350
}
346
351
data .diagnostics = append (data .diagnostics , srcErr )
347
352
}
0 commit comments