Detector::Java::Cli
Detects Java command-line applications. Gated strictly on CLI-library
imports or unambiguous arg-parser constructs — NOT on bare
main(String[] args) / System.getenv, which every Java app (web
servers included) has.
Constants
NOTE: deliberately no new\s+OptionParser\s*\( alternative here — jopt-simple's
OptionParser is a common, generic class name apps also give their own
options-parsing helpers (e.g. a video/report settings OptionParser). Genuine
jopt-simple usage always requires import joptsimple.* or a joptsimple.
fully-qualified reference, which LIB_IMPORTS already covers — adding a bare
class-name pattern here would mistag unrelated classes as java_cli.
Class methods
The tech name without needing an instance, so the registry can be read off the classes themselves rather than from a parallel list.
Instance methods
Cheap filename-only filter the detector pass uses to skip
detect on files the detector cannot possibly match. The
default true preserves prior behavior (every detector runs on
every file). Override with the same predicate the body of
detect starts with — e.g., filename.ends_with?(".py") for a
Python framework detector — so the detector loop avoids the
detect dispatch on files outside the detector's language.
On large codebases (saleor's 4255 .py files) this lifts ~100
virtual detect calls per file out of the hot loop because
most detectors' inner first-line is exactly this kind of cheap
filename check.