Fortify не распознает лямбду

Мертвый код: неиспользуемый метод

Fortify определяет лямбда-методы как неиспользуемые. Например: у меня есть следующий метод: getCountryCode, несмотря на то, что он используется во многих местах, fortify сообщает о нем как о неиспользуемом методе.

private List<String> getCountryCodeAsList(Map<Long, String> countryData, List<String> nationalityRestriction) {
    return nationalityRestriction.parallelStream().filter(r -> !org.apache.commons.lang3.StringUtils.isBlank(r))
            .map(r -> getCountryCode(countryData, r)).collect(Collectors.toList());
}

private String getCountryCode(Map<Long, String> countryData, String r) {
    return !org.apache.commons.lang3.StringUtils.isBlank(r) ? countryData.get(Long.parseLong(r)): null;
}

Как решить эту проблему? Любые указатели?


person Minisha    schedule 03.12.2018    source источник
comment
Могу ли я узнать, почему за него проголосовали. Укажите причину, прежде чем голосовать против, это помогает человеку понять проблему с вопросом.   -  person Minisha    schedule 03.12.2018
comment
если вы не можете назвать причину, перестаньте давать голоса, это вообще не имеет никакого смысла...   -  person Minisha    schedule 03.12.2018
comment
Не уверен, что делает fortify, но чтобы уточнить вопрос, какой метод не используется -getCountryCodeAsList или getCountryCode?   -  person Naman    schedule 03.12.2018
comment
getCountryCode помечен как неиспользуемый   -  person Minisha    schedule 03.12.2018
comment
может быть fortify не работает с java-8? может быть поднять вопрос к ним? то, как вы показали этот код, явно используется   -  person Eugene    schedule 03.12.2018
comment
@Eugene, в этом случае это может быть проблема, аналогичная проблеме JaCoCo, когда Java 8 была новой. Но, возможно, стоит отметить, что в примере с этим вопросом в тесте isBlank(r) есть избыточность, что приводит к тому, что путь кода никогда не используется (альтернатива возврата null в getCountryCode).   -  person Holger    schedule 03.12.2018


Ответы (1)


В настоящее время Fortify SCA поддерживает только лямбда-выражения в подмножестве языков, которые он может сканировать и которые используют лямбда-выражения. Для этого в Fortify SCA реализован новый встроенный анализатор, который они называют анализатором высшего порядка, но он будет работать только со следующими языками: JavaScript, Python, Ruby и Swift.

Итак, краткий ответ на ваш вопрос заключается в том, что вы ничего не сможете сделать, пока Fortify не реализует поддержку лямбда-выражений Java в своем анализаторе высшего порядка.

Раздел из документации руководства пользователя Fortify SCA 18.20

person wtfacoconut    schedule 13.01.2019