Skip to content

Searching

Danny Thomas edited this page Sep 18, 2026 · 1 revision

Searches include the running JDK without setup and use exact names rather than fuzzy matches. A simple name matches that complete terminal name wherever it is visible. A qualified name selects that exact delimiter-bounded namespace and the symbols beneath it. There is no substring matching, ranking, typo correction, or implicit resolution of partially qualified names. Shell completion can enumerate visible symbols by simple or qualified prefix without changing these search semantics.

Find declarations

A simple name finds every visible symbol whose complete simple name matches:

jist HttpClient
jist isEmpty
jist MAX_VALUE

A qualified name selects an exact package, type, or member prefix:

jist java.net.http
jist java.lang.String
jist java.lang.String.valueOf
jist java.lang.Integer.MAX_VALUE

A package name includes the packages and symbols beneath it. A type name includes the type and its members. A method name includes all overloads. Use new for constructors:

jist java.lang.String.new

Run without a target to enumerate every visible symbol:

jist

A source file or ClassFile can also be inspected directly:

jist path/to/Example.java
jist path/to/Example.class

Search results use literal source signatures when available and fall back to declarations reconstructed from ClassFiles:

$ jist java.lang.String.isEmpty
java.lang.String(String.java:1600):     public boolean isEmpty() {

The name before the colon is the compilation unit that owns the declaration. Source output adds its filename and line number in parentheses. Nested types and their members remain anchored by their top-level compilation unit:

java.util.Map: public abstract interface Entry<K, V> {

Search a project

Provide the same classes, modules, and sources used to compile a project through the corresponding standard Java options:

jist --class-path build/classes:libs/example.jar com.example
jist --source-path src/main/java com.example
jist --module-path build/modules:libs/example.jar --module com.example.app com.example
jist --module-source-path src --module com.example.app com.example
jist --system /path/to/jdk java.lang

Class-path entries belong to the unnamed module. --module selects one or more comma-separated compilation modules. --module-path makes application modules observable, but does not make every module a root. --add-modules adds roots and follows their resolved requires edges:

jist --module-path path/to/modules --add-modules ALL-MODULE-PATH com.example

Visibility starts from the selected compilation modules and reflects --limit-modules, --add-reads, and --add-exports changes to the resolved graph. A class-path entry is visible to a selected named module only when that module reads the unnamed module, for example through --add-reads M=ALL-UNNAMED.

See Project integration for automatically supplying project compilation options.

Find usages

Pass one exact type or member to --usages:

jist --usages com.example.SessionManager.create
jist --usages java.lang.Integer.MAX_VALUE
jist --usages java.lang.String.new

A method name includes all overloads. Method usages include overriding declarations and references resolved to overrides. Each result shows the source line containing the reference:

com.example.LoginService(LoginService.java:74):         return sessionManager.create(userId);

Widen each match to its containing declaration, top-level type, or source file when more context is useful:

jist --usages com.example.SessionManager.create --source definition
jist --usages com.example.SessionManager.create --source type
jist --usages com.example.SessionManager.create --source unit

Zero usages is a successful empty result. When source text is unavailable, the output shows the enclosing symbol and any debug coordinates available from the ClassFile.

Filter symbols

Use -k or --kind to include only particular declaration kinds:

jist -k module java.base
jist -k package java.lang
jist -k type java.lang
jist -k class com.example
jist -k interface java.util
jist -k enum java.time
jist -k record com.example
jist -k annotation java.lang
jist -k method java.lang.String
jist -k field java.lang.Integer

type is the union of classes, interfaces, enums, records, and annotations. Repeat --kind to include more than one kind.

Module declarations come from resolved module descriptors. Packages use package-info.java documentation and annotations when available, and otherwise appear as synthesized package NAME; declarations. Only observable packages appear; missing parent packages are not synthesized.

Default visibility includes public and protected library declarations. Choose another visibility level when needed:

-public       Public declarations
-protected    Public and protected declarations
-package      Public, protected, and package declarations
-private      All declarations

Clone this wiki locally