public Flowable<CodeNode> searchInSkippedClasses(final String searchStr, final boolean caseInsensitive) {
return Flowable.create(emitter -> {
LOG.debug("Skipped code search started: {} ...", searchStr);
for (JavaClass javaClass : skippedClasses) {
String code = javaClass.getCode();
int pos = 0;
while (pos != -1) {
pos = searchNext(emitter, searchStr, javaClass, code, pos, caseInsensitive);
if (emitter.isCancelled()) {
LOG.debug("Skipped Code search canceled: {}", searchStr);
return;
}
}
if (!Utils.isFreeMemoryAvailable()) {
LOG.warn("Skipped code search stopped due to memory limit: {}", Utils.memoryInfo());
emitter.onComplete();
return;
}
}
LOG.debug("Skipped code search complete: {}, memory usage: {}", searchStr, Utils.memoryInfo());
emitter.onComplete();
}, BackpressureStrategy.LATEST);
}