Deadlocks would depend on transactions not on static code.
There is no concept of a 'BEGIN TRANSACTION' statement in Oracle, so a static analyzer has no way of knowing what the start point of a transaction is.
Hypothetically, an analyzer could be written such that if it was given a starting SQL or PL/SQL statement, it could track all the potential execution paths and determine which tables were subjected to update/delete/insert/merge statements in what order.
Then you could 'compare' two (or more) results of that and determine if there are any where tables are manipulated in a different order (eg TAB_A then TAB_B in one and TAB_B then TAB_A in another).
I suspect that would throw up a lot of false positives.
In Oracle, selects do not lock (except SELECT...FOR UPDATE). As such, deadlocks only occur on data updates and only when two concurrent transactions are trying to update the same rows.