How Android Studio actually knows your code is broken before you even run it

How Android Studio actually knows your code is broken before you even run it

W𝗁𝖾𝗇 𝗒𝗈𝗎 𝗆𝖾𝗌𝗌 𝗎𝗉 𝗌𝗈𝗆𝖾𝗍𝗁𝗂𝗇𝗀 𝗌𝗆𝖺𝗅𝗅 𝗅𝗂𝗄𝖾 𝖺 𝗍𝗒𝗉𝗈 𝗂𝗇 𝖺 𝖿𝗎𝗇𝖼𝗍𝗂𝗈𝗇 𝖼𝖺𝗅𝗅 𝖺𝗇𝖽 𝖠𝗇𝖽𝗋𝗈𝗂𝖽 𝖲𝗍𝗎𝖽𝗂𝗈 𝗍𝗁𝗋𝗈𝗐𝗌 𝗍𝗁𝖺𝗍 𝗋𝖾𝖽 𝗅𝗂𝗇𝖾 𝗎𝗇𝖽𝖾𝗋 𝗂𝗍 𝖻𝖾𝖿𝗈𝗋𝖾 𝗒𝗈𝗎 𝖾𝗏𝖾𝗇 𝗁𝗂𝗍 "𝖱𝗎𝗇"?

I didn’t really get how that worked until I had a task to write a custom lint rule, and one of the team members introduced us to a plugin called PSI Viewer (you can enable it from the JetBrains Plugin Marketplace - https://www.jetbrains.com/help/idea/psi-viewer.html ). It shows you exactly how Android Studio reads your code not as plain text, but as a structured tree.

𝖧𝖾𝗋𝖾’𝗌 𝖺 𝗅𝗂𝗇𝖾 𝗈𝖿 𝖪𝗈𝗍𝗅𝗂𝗇 𝖼𝗈𝖽𝖾:

𝖳𝗈 𝗎𝗌, 𝗍𝗁𝖺𝗍’𝗌 𝗉𝗋𝖾𝗍𝗍𝗒 𝗌𝗍𝗋𝖺𝗂𝗀𝗁𝗍𝖿𝗈𝗋𝗐𝖺𝗋𝖽. 𝖳𝗈 𝗍𝗁𝖾 𝖨𝖣𝖤, 𝗍𝗁𝗂𝗌 𝗂𝗌 𝖺 𝗍𝗋𝖾𝖾. 𝖲𝗈𝗆𝖾𝗍𝗁𝗂𝗇𝗀 𝗅𝗂𝗄𝖾:

𝖯𝗋𝗈𝗉𝖾𝗋𝗍𝗒

├── 𝗏𝖺𝗅

├── 𝗇𝖺𝗆𝖾 

├── =

└── 𝖣𝗈𝗍𝖰𝗎𝖺𝗅𝗂𝖿𝗂𝖾𝖽𝖤𝗑𝗉𝗋𝖾𝗌𝗌𝗂𝗈𝗇

  ├── "𝖢𝗈𝗆𝗉𝗈𝗌𝖾"

  └── 𝖢𝖺𝗅𝗅𝖤𝗑𝗉𝗋𝖾𝗌𝗌𝗂𝗈𝗇

    └── 𝗎𝗉𝗉𝖾𝗋𝖼𝖺𝗌𝖾()

𝖲𝗈 𝗐𝗁𝖺𝗍?

𝖶𝖾𝗅𝗅, 𝗍𝗁𝖺𝗍 𝗍𝗋𝖾𝖾 𝘁𝗵𝗲 𝗣𝗦𝗜 (𝗣𝗿𝗼𝗴𝗿𝗮𝗺 𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗜𝗻𝘁𝗲𝗿𝗳𝗮𝗰𝗲) 𝘁𝗿𝗲𝗲 𝗂𝗌 𝗁𝗈𝗐 𝗍𝗁𝖾 𝖨𝖣𝖤 𝗎𝗇𝖽𝖾𝗋𝗌𝗍𝖺𝗇𝖽𝗌 𝗐𝗁𝖺𝗍 𝖾𝖺𝖼𝗁 𝗉𝗂𝖾𝖼𝖾 𝗈𝖿 𝗒𝗈𝗎𝗋 𝖼𝗈𝖽𝖾 𝗂𝗌 𝗆𝖾𝖺𝗇𝗍 𝗍𝗈 𝖻𝖾. 𝖶𝗁𝖾𝗇 𝗒𝗈𝗎 𝗍𝗒𝗉𝖾:

𝖠𝗇𝖽𝗋𝗈𝗂𝖽 𝖲𝗍𝗎𝖽𝗂𝗈 𝗉𝖺𝗋𝗌𝖾𝗌 𝗍𝗁𝖾 𝗌𝖺𝗆𝖾 𝗌𝗍𝗋𝗎𝖼𝗍𝗎𝗋𝖾 𝖺𝗇𝖽 𝗂𝗇𝗌𝗍𝖺𝗇𝗍𝗅𝗒 𝗌𝖾𝖾𝗌: “𝖧𝖾𝗒, 𝗍𝗁𝗂𝗌 𝖿𝗎𝗇𝖼𝗍𝗂𝗈𝗇 𝖽𝗈𝖾𝗌𝗇’𝗍 𝗍𝖺𝗄𝖾 𝖺𝗇 𝖺𝗋𝗀𝗎𝗆𝖾𝗇𝗍. 𝖲𝗈𝗆𝖾𝗍𝗁𝗂𝗇𝗀’𝗌 𝗈𝖿𝖿.” 𝖠𝗇𝖽 𝗍𝗁𝖺𝗍’𝗌 𝗐𝗁𝖾𝗇 𝗒𝗈𝗎 𝗀𝖾𝗍 𝗍𝗁𝖺𝗍 𝗋𝖾𝖽 𝗅𝗂𝗇𝖾.

𝖭𝗈𝗐 𝗂𝗆𝖺𝗀𝗂𝗇𝖾 𝗒𝗈𝗎 𝗐𝖺𝗇𝗍 𝗍𝗈 𝗐𝗋𝗂𝗍𝖾 𝖺 𝗅𝗂𝗇𝗍 𝗋𝗎𝗅𝖾 𝗍𝗁𝖺𝗍 𝗐𝖺𝗋𝗇𝗌 𝗉𝖾𝗈𝗉𝗅𝖾 𝗇𝗈𝗍 𝗍𝗈 𝗁𝖺𝗋𝖽𝖼𝗈𝖽𝖾 𝖽𝗂𝗆𝖾𝗇𝗌𝗂𝗈𝗇𝗌. 𝖸𝗈𝗎 𝖽𝗈𝗇’𝗍 𝗌𝖼𝖺𝗇 𝗍𝗁𝖾 𝗋𝖺𝗐 𝗍𝖾𝗑𝗍 𝗒𝗈𝗎 𝗐𝖺𝗅𝗄 𝗍𝗁𝖾 𝖯𝖲𝖨 𝗍𝗋𝖾𝖾, 𝖼𝗁𝖾𝖼𝗄 𝗂𝖿 𝗌𝗈𝗆𝖾𝗈𝗇𝖾 𝗂𝗌 𝖼𝖺𝗅𝗅𝗂𝗇𝗀 𝖽𝗉(𝟣𝟨) 𝖽𝗂𝗋𝖾𝖼𝗍𝗅𝗒, 𝖺𝗇𝖽 𝖻𝗈𝗈𝗆: 𝗒𝗈𝗎 𝗍𝗁𝗋𝗈𝗐 𝖺 𝗐𝖺𝗋𝗇𝗂𝗇𝗀.

𝖨𝗍’𝗌 𝗅𝗂𝗄𝖾 𝗁𝖺𝗏𝗂𝗇𝗀 𝖺 𝗆𝖺𝗉 𝗈𝖿 𝗒𝗈𝗎𝗋 𝖼𝗈𝖽𝖾 𝗐𝗁𝖾𝗋𝖾 𝖾𝗏𝖾𝗋𝗒𝗍𝗁𝗂𝗇𝗀 𝗂𝗌 𝗅𝖺𝖻𝖾𝗅𝖾𝖽. 𝖸𝗈𝗎 𝖼𝖺𝗇 𝗃𝗎𝗆𝗉 𝗌𝗍𝗋𝖺𝗂𝗀𝗁𝗍 𝗍𝗈 𝗍𝗁𝖾 𝗌𝗍𝗎𝖿𝖿 𝗒𝗈𝗎 𝖼𝖺𝗋𝖾 𝖺𝖻𝗈𝗎𝗍 — 𝖿𝗎𝗇𝖼𝗍𝗂𝗈𝗇𝗌, 𝗉𝗋𝗈𝗉𝖾𝗋𝗍𝗂𝖾𝗌, 𝖺𝗇𝗇𝗈𝗍𝖺𝗍𝗂𝗈𝗇𝗌, 𝗐𝗁𝖺𝗍𝖾𝗏𝖾𝗋 — 𝗐𝗂𝗍𝗁𝗈𝗎𝗍 𝗀𝖾𝗍𝗍𝗂𝗇𝗀 𝗅𝗈𝗌𝗍 𝗂𝗇 𝗍𝗁𝖾 𝗋𝖾𝗌𝗍.

𝖨𝖿 𝗒𝗈𝗎'𝗋𝖾 𝖼𝗎𝗋𝗂𝗈𝗎𝗌, 𝗍𝗋𝗒 𝗂𝗇𝗌𝗍𝖺𝗅𝗅𝗂𝗇𝗀 𝗍𝗁𝖾 𝖯𝖲𝖨 𝖵𝗂𝖾𝗐𝖾𝗋 𝗉𝗅𝗎𝗀𝗂𝗇 𝖿𝗋𝗈𝗆 𝖩𝖾𝗍𝖡𝗋𝖺𝗂𝗇𝗌. 𝖮𝗉𝖾𝗇 𝖺𝗇𝗒 code 𝖿𝗂𝗅𝖾, 𝖺𝗇𝖽 𝗂𝗍’𝗅𝗅 𝗌𝗁𝗈𝗐 𝗒𝗈𝗎 𝗁𝗈𝗐 𝗍𝗁𝖾 𝖨𝖣𝖤 𝗌𝖾𝖾𝗌 𝗂𝗍. 𝖨𝗍’𝗌 𝗌𝗎𝗉𝖾𝗋 𝗁𝖾𝗅𝗉𝖿𝗎𝗅 𝗂𝖿 𝗒𝗈𝗎 𝖾𝗏𝖾𝗋 𝗐𝖺𝗇𝗍 𝗍𝗈 𝖻𝗎𝗂𝗅𝖽 𝗍𝗈𝗈𝗅𝗌 𝗈𝗋 𝗋𝗎𝗅𝖾𝗌 𝗍𝗁𝖺𝗍 𝗐𝗈𝗋𝗄 𝖽𝗂𝗋𝖾𝖼𝗍𝗅𝗒 𝗐𝗂𝗍𝗁 𝖼𝗈𝖽𝖾 𝗌𝗍𝗋𝗎𝖼𝗍𝗎𝗋𝖾.

𝖳𝗁𝗂𝗌 𝗆𝖺𝖽𝖾 𝗐𝗋𝗂𝗍𝗂𝗇𝗀 𝖼𝗎𝗌𝗍𝗈𝗆 𝗅𝗂𝗇𝗍 𝗋𝗎𝗅𝖾𝗌 𝗐𝖺𝗒 𝗅𝖾𝗌𝗌 𝗂𝗇𝗍𝗂𝗆𝗂𝖽𝖺𝗍𝗂𝗇𝗀. 𝖮𝗇𝖼𝖾 𝗒𝗈𝗎 𝗌𝖾𝖾 𝗁𝗈𝗐 𝗍𝗁𝖾 𝗌𝗍𝗋𝗎𝖼𝗍𝗎𝗋𝖾 𝗐𝗈𝗋𝗄𝗌, 𝗂𝗍’𝗌 𝗃𝗎𝗌𝗍 𝖺 𝗆𝖺𝗍𝗍𝖾𝗋 𝗈𝖿 𝖼𝗁𝖾𝖼𝗄𝗂𝗇𝗀 𝗍𝗁𝖾 𝗋𝗂𝗀𝗁𝗍 𝗇𝗈𝖽𝖾𝗌.

𝖫𝖾𝗍 𝗆𝖾 𝗄𝗇𝗈𝗐 𝗂𝖿 𝗒𝗈𝗎 𝗐𝖺𝗇𝗍 𝗍𝗈 𝗐𝖺𝗅𝗄 𝗍𝗁𝗋𝗈𝗎𝗀𝗁 𝗐𝗋𝗂𝗍𝗂𝗇𝗀 𝗈𝗇𝖾 𝖿𝗋𝗈𝗆 𝗌𝖼𝗋𝖺𝗍𝖼𝗁. 𝖨𝗍'𝗌 𝖺 𝖿𝗎𝗇 𝗋𝖺𝖻𝖻𝗂𝗍 𝗁𝗈𝗅𝖾.

Mahmoud Ahmed

Full stack developer & React & NextJs & laravel & mongodb & mysql | MedTech | AI developer

3mo

That's a really nice explanation, of course I'd love to walk through writing one from scratch

Like
Reply
Ali M AlDirawi

Senior Android Engineer | 7+ yrs in Startup Growth | E-Commerce App Specialist | B2B/B2C Mobile Expert | Built 300K+ user apps

3mo

PSI trees are undervalued. This provides excellent insight into how Android Studio truly understands code! Thank you for sharing this perspective, Qamar!

To view or add a comment, sign in

Explore topics