The first thing we do on a connection is check to see if the DBA_ views are available. We do this because in most cases they're faster - much faster - than getting info from ALL_ views, because there's no privilege check done - it just shows everything.
I just created a user called LIMITED_PRIVS, with RESOURCE and CONNECT.
I then created a procedure in a SQL Worksheet.
I then opened the procedure in the procedure editor.
View > Log > Statements shows me this query being used to pull up the code.
WITH src AS (SELECT ROWNUM,LINE,TEXT,origin_con_id FROM SYS.ALL_SOURCE
WHERE TYPE = :TYPE AND OWNER = :OWNER AND NAME = :NAME)
SELECT text FROM src, (SELECT max(origin_con_id) max_orig FROM src)
WHERE origin_con_id = max_orig
ORDER BY LINE
If you see SQLDev using DBA_ views, it's because at connect time, your user was able to resolve and use the DBA_ views.
PL/SQL Developer has such an option "Use DBA views if available" preference (Tools > Preferences > Options tab page),