@@ -148,6 +148,9 @@ func (act *actionHandle) analyze(ctx context.Context) ([]*source.Error, interfac
148148 if ! ok {
149149 return nil , nil , errors .Errorf ("unexpected type for %s:%s" , act .pkg .ID (), act .analyzer .Name )
150150 }
151+ if data == nil {
152+ return nil , nil , errors .Errorf ("unexpected nil analysis for %s:%s" , act .pkg .ID (), act .analyzer .Name )
153+ }
151154 return data .diagnostics , data .result , data .err
152155}
153156
@@ -160,6 +163,9 @@ func (act *actionHandle) cached() ([]*source.Error, interface{}, error) {
160163 if ! ok {
161164 return nil , nil , errors .Errorf ("unexpected type for %s:%s" , act .pkg .ID (), act .analyzer .Name )
162165 }
166+ if data == nil {
167+ return nil , nil , errors .Errorf ("unexpected nil cached analysis for %s:%s" , act .pkg .ID (), act .analyzer .Name )
168+ }
163169 return data .diagnostics , data .result , data .err
164170}
165171
@@ -213,8 +219,6 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
213219 // Plumb the output values of the dependencies
214220 // into the inputs of this action. Also facts.
215221 inputs := make (map [* analysis.Analyzer ]interface {})
216- objectFacts := make (map [objectFactKey ]analysis.Fact )
217- packageFacts := make (map [packageFactKey ]analysis.Fact )
218222
219223 for depHandle , depData := range deps {
220224 if depHandle .pkg == pkg {
@@ -233,14 +237,14 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
233237 if ! exportedFrom (key .obj , depHandle .pkg .types ) {
234238 continue
235239 }
236- objectFacts [key ] = fact
240+ data . objectFacts [key ] = fact
237241 }
238242 for key , fact := range depData .packageFacts {
239243 // TODO: filter out facts that belong to
240244 // packages not mentioned in the export data
241245 // to prevent side channels.
242246
243- packageFacts [key ] = fact
247+ data . packageFacts [key ] = fact
244248 }
245249 }
246250 }
@@ -271,7 +275,7 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
271275 }
272276 key := objectFactKey {obj , factType (ptr )}
273277
274- if v , ok := objectFacts [key ]; ok {
278+ if v , ok := data . objectFacts [key ]; ok {
275279 reflect .ValueOf (ptr ).Elem ().Set (reflect .ValueOf (v ).Elem ())
276280 return true
277281 }
@@ -283,34 +287,34 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
283287 analyzer , pkg .ID (), obj , fact ))
284288 }
285289 key := objectFactKey {obj , factType (fact )}
286- objectFacts [key ] = fact // clobber any existing entry
290+ data . objectFacts [key ] = fact // clobber any existing entry
287291 },
288292 ImportPackageFact : func (pkg * types.Package , ptr analysis.Fact ) bool {
289293 if pkg == nil {
290294 panic ("nil package" )
291295 }
292296 key := packageFactKey {pkg , factType (ptr )}
293- if v , ok := packageFacts [key ]; ok {
297+ if v , ok := data . packageFacts [key ]; ok {
294298 reflect .ValueOf (ptr ).Elem ().Set (reflect .ValueOf (v ).Elem ())
295299 return true
296300 }
297301 return false
298302 },
299303 ExportPackageFact : func (fact analysis.Fact ) {
300304 key := packageFactKey {pkg .types , factType (fact )}
301- packageFacts [key ] = fact // clobber any existing entry
305+ data . packageFacts [key ] = fact // clobber any existing entry
302306 },
303307 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 ]})
307311 }
308312 return facts
309313 },
310314 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 ]})
314318 }
315319 return facts
316320 },
@@ -341,7 +345,8 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
341345 for _ , diag := range diagnostics {
342346 srcErr , err := sourceError (ctx , fset , pkg , diag )
343347 if err != nil {
344- return nil
348+ data .err = err
349+ return data
345350 }
346351 data .diagnostics = append (data .diagnostics , srcErr )
347352 }
0 commit comments