Many user-facing APIs have a parameter, called additional parameters, which is a Map, for passing additional, arbitrary parameters.
These APIs are often associated with user-facing interfaces, and have static final String constants that name the "keys" for these parameters.
The placement of these static final String constants is not consistent. For example, there are duplicates ( both Resource and AnalysisEngine interfaces define "PARAM_CONFIG_PARAM_SETTINGS" ). It's probably worth checking to see if there are any missing, and if they are defined at the "right level". My guess is that moving these may break some user code; if so, I'd say it isn't worth removing misplaced ones. But I would add missing ones at the "right level", and make all other instances have their definition set to the the "master" (the one defined at the right level), so there's no doubt that duplicates are intended to have the same exact definition.
The right level, I think, in a hierarchy of interface definitions, is the highest point for which the parameter makes sense (but not higher).
A scan of uimaj-core produced these candidates, some of which have multiple definition spots:
PARAM_AGGREGATE_ANALYSIS_ENGINE_NAME = "PARAM_AGGREGATE_ANALYSIS_ENGINE_NAME";
PARAM_AGGREGATE_SOFA_MAPPINGS = "AGGREGATE_SOFA_MAPPINGS";
PARAM_CONFIG_MANAGER = "CONFIG_MANAGER";
PARAM_CONFIG_PARAM_SETTINGS = "CONFIG_PARAM_SETTINGS";
PARAM_EXTERNAL_OVERRIDE_SETTINGS = "EXTERNAL_OVERRIDE_SETTINGS";
PARAM_MBEAN_NAME_PREFIX = "MBEAN_NAME_PREFIX";
PARAM_MBEAN_SERVER = "MBEAN_SERVER";
PARAM_NUM_SIMULTANEOUS_REQUESTS = "NUM_SIMULTANEOUS_REQUESTS";
PARAM_PERFORMANCE_TUNING_SETTINGS = "PERFORMANCE_TUNING_SETTINGS";
PARAM_RELATIVE_PATH_RESOLVER = "RELATIVE_PATH_RESOLVER";
PARAM_RESOURCE_MANAGER = "RESOURCE_MANAGER";
PARAM_RESULT_SPECIFICATION = "RESULT_SPECIFICATION";
PARAM_TIMEOUT_PERIOD = "TIMEOUT_PERIOD";
PARAM_UIMA_CONTEXT = "UIMA_CONTEXT";
PARAM_VERIFICATION_MODE = "VERIFICATION_MODE";