@@ -319,17 +319,6 @@ private class ActiveRecordInstanceMethodCall extends DataFlow::CallNode {
319319 * Provides modeling relating to the `ActiveRecord::Persistence` module.
320320 */
321321private module Persistence {
322- /**
323- * A call to a method that may modify or create a model object and write it to
324- * the database. Examples include `create`, `insert`, and `update`.
325- */
326- abstract private class ModifyAndSaveCall extends DataFlow:: CallNode , PersistentWriteAccess:: Range {
327- /**
328- * Gets the ActiveRecord model class to which this call applies.
329- */
330- abstract ActiveRecordModelClass getClass ( ) ;
331- }
332-
333322 /**
334323 * Holds if there is a hash literal argument to `call` at `argIndex`
335324 * containing a KV pair with value `value`.
@@ -355,7 +344,7 @@ private module Persistence {
355344 }
356345
357346 /** A call to e.g. `User.create(name: "foo")` */
358- private class CreateLikeCall extends ModifyAndSaveCall {
347+ private class CreateLikeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
359348 private ActiveRecordModelClass modelCls ;
360349
361350 CreateLikeCall ( ) {
@@ -372,12 +361,10 @@ private module Persistence {
372361 hashArgumentWithValue ( this , 0 , result ) or
373362 keywordArgumentWithValue ( this , result )
374363 }
375-
376- override ActiveRecordModelClass getClass ( ) { result = modelCls }
377364 }
378365
379366 /** A call to e.g. `User.update(1, name: "foo")` */
380- private class UpdateLikeClassMethodCall extends ModifyAndSaveCall {
367+ private class UpdateLikeClassMethodCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
381368 private ActiveRecordModelClass modelCls ;
382369
383370 UpdateLikeClassMethodCall ( ) {
@@ -403,12 +390,10 @@ private module Persistence {
403390 )
404391 )
405392 }
406-
407- override ActiveRecordModelClass getClass ( ) { result = modelCls }
408393 }
409394
410395 /** A call to e.g. `User.insert_all([{name: "foo"}, {name: "bar"}])` */
411- private class InsertAllLikeCall extends ModifyAndSaveCall {
396+ private class InsertAllLikeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
412397 private ExprNodes:: ArrayLiteralCfgNode arr ;
413398 private ActiveRecordModelClass modelCls ;
414399
@@ -427,12 +412,10 @@ private module Persistence {
427412 result .asExpr ( ) = pair .getValue ( )
428413 )
429414 }
430-
431- override ActiveRecordModelClass getClass ( ) { result = modelCls }
432415 }
433416
434417 /** A call to e.g. `user.update(name: "foo")` */
435- private class UpdateLikeInstanceMethodCall extends ModifyAndSaveCall ,
418+ private class UpdateLikeInstanceMethodCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range ,
436419 ActiveRecordInstanceMethodCall {
437420 UpdateLikeInstanceMethodCall ( ) {
438421 this .getMethodName ( ) = [ "update" , "update!" , "update_attributes" , "update_attributes!" ]
@@ -445,20 +428,16 @@ private module Persistence {
445428 // keyword arg
446429 keywordArgumentWithValue ( this , result )
447430 }
448-
449- override ActiveRecordModelClass getClass ( ) { result = this .getInstance ( ) .getClass ( ) }
450431 }
451432
452433 /** A call to e.g. `user.update_attribute(name, "foo")` */
453- private class UpdateAttributeCall extends ModifyAndSaveCall , ActiveRecordInstanceMethodCall {
434+ private class UpdateAttributeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range , ActiveRecordInstanceMethodCall {
454435 UpdateAttributeCall ( ) { this .getMethodName ( ) = "update_attribute" }
455436
456437 override DataFlow:: Node getValue ( ) {
457438 // e.g. `foo.update_attribute(key, value)`
458439 result = this .getArgument ( 1 )
459440 }
460-
461- override ActiveRecordModelClass getClass ( ) { result = this .getInstance ( ) .getClass ( ) }
462441 }
463442
464443 /**
0 commit comments