Package-level declarations
Types
A dangling file module that holds its file outright.
The one service a core environment is missing before PSI can be written. Every mutation routes through ChangeUtil.prepareAndRunChangeAction → PomManager.getModel(project).runTransaction(...), and a core project has none: the real PomModelImpl lives in platform/core-impl, which the embedded compiler does not carry, and nothing in the compiler registers one because the compiler only ever reads PSI.
Properties
Jar-url separator: archive path before it, entry path after, so a trailing one asks for the archive's root. Inlined rather than read off URLUtil — two divergent copies of that class are on the classpath and only one declares the constant, so which node compiles decides whether the reference resolves.
Spliced in at the caret so unfinished source parses. Any identifier real code would never write does the job; this is IntelliJ's own spelling, so whatever special-cases it still recognizes ours. Copied rather than referenced: CompletionUtilCore lives in the IDE's completion infrastructure, which neither the embedded compiler nor the Analysis API brings along.
FirUnusedExpressionChecker's warnings. The return-value checker's are left alone: it follows more edges.
Functions
file's diagnostics, less the unused-value warnings on the body's last value: an eval runs the body as a lambda, whose last value is its result, where analysis keeps the initializer, which discards it. Like collectDiagnostics, this reports no syntax errors; see SnippetParser.parsePsi.
The expressions that take e's use, by FirUnusedCheckerBase's rules: a block passes it to its last statement, parentheses to their content, an exhaustive if or when to each branch, a try to its block and each catch. Whatever is not modelled here only keeps a warning, never drops one.