Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 

Final Array & Anonymous Class

Generic Constructors

Capture Conversion Idiom

Overloaded Methods Sharing Single Type

Covariant Arrays

Rethrown Exception 

JTL

  X

X

X

 ?

X

X

BBQ

X

X

X

?

X

X

SOUL

 

 

 

 

 

 

JQuery

X

X

X

X (*1)

X

X

.QL (*2)

?

?

?


?

Jackpot

 

 

 

 

 

 

PMD

X

X

X

X

X

X

...

  •  no working Eclipse plugin found. (authors emailed)
  • argument list pattern (sec 2.2) public _ (_, String, *) : any public method that accept a String as its second argument and returns any type
  • quantifiers: no, all, exists...
  • anonymous class
  • pattern naming (integral := byte | short | int | long)
  • variable binding
  • no structural matching of AST (deemed difficult because uses class files) (so can't look match on a loop for example or find all local variables in method)
  • Wiki Markup
    read\[F\]/write\[F\] predicates to indicate whether a method reads/write to a field. Nice feature: write\[_\] tells whether method writes to a field at all. How do we do this recursively? All methods within the method are not writing to fields...
  • no support for generics (according to documentation)

Use case 1 not possible because no support for local variable decl. Use case 2 & 3 not possible because no support for generics/wildcards (due to bytecode source). Use 4 not possible because no support for statements & types of expressions. Use case 6 not possible because no control flow support.

BBQ

  • doesn't detect local inner classes (local & anonymous). Only inner classes (doesn't differentiate): class in all classes
  • no access to local variable declared in methods
  • no support for generics.
  • no support for constructors (considered as method init) 
  • no AST structural matching. (e.g loops ...)
  • no variable binding/unification
  • set operators (union, intersection)
  • support for read/write of fields references

Similar reasons to JTL.

Wiki Markup
*{+}SOUL \[authors replying on Tuesday\]+*

...

Similar reasons to JTL.

Wiki Markup
*+.QL \[authors emailed\]+*

  • New version stores every AST node unit in DB
  • has notion of aggregates (count, sum, max, min, avg)
  • ".QL: Object-Oriented Queries made Easy"

Very expressive. Though sql statements may not scale for control flow matching. (direct ast pattern matching is clearer for some use cases)

Wiki Markup
*{+}Jackpot \[emailed Jan from Netbeans\]+*

...

No variable binding support which restricts a lot of the analysis. 

Taxonomy

  • Model: Relational vs Tree
  • control flow statements 
  • variable binding & cross reference
  • types information of AST nodes + type constraints (subtype relations)
  • set operators
  • generics / wildcards
  • read/write references
  • anonymous class
  • aggregates (grouping results)
  • pattern matching? (i.e JTL style for argument list, SOUL like for AST matching)
  • universal quantifiers (forall, exists, no)
  • querying style

...