@@ -81,6 +81,9 @@ Author: Daniel Kroening, kroening@kroening.com
81
81
" loaded.\n " \
82
82
" --context-include i only analyze code matching specification i that\n " /* NOLINT(*) */ \
83
83
" --context-exclude e does not match specification e.\n " \
84
+ " All other methods are excluded, i.e. we load their\n " /* NOLINT(*) */ \
85
+ " signatures and meta-information, but not their\n " /* NOLINT(*) */ \
86
+ " bodies.\n " \
84
87
" A specification is any prefix of a package, class\n " /* NOLINT(*) */ \
85
88
" or method name, e.g. \" org.cprover.\" or\n " /* NOLINT(*) */ \
86
89
" \" org.cprover.MyClass.\" or\n " \
@@ -296,7 +299,13 @@ class java_bytecode_languaget:public languaget
296
299
// / IDs of such objects to symbols that store their values.
297
300
std::unordered_map<std::string, object_creation_referencet> references;
298
301
299
- // / If set, method bodies are only elaborated if they pass the filter
302
+ // / If set, method bodies are only elaborated if they pass the filter.
303
+ // / Methods that do not pass the filter are "excluded": their symbols will
304
+ // / include all the meta-information that is available from the bytecode
305
+ // / (parameter types, return type, accessibility etc.) but the value of the
306
+ // / symbol (corresponding to the body of the method) will be replaced with the
307
+ // / same kind of "return nondet null or instance of return type" body that we
308
+ // / use for stubbed methods. The original method body will never be loaded.
300
309
optionalt<prefix_filtert> method_context;
301
310
};
302
311
0 commit comments