Мертвый магазин в список объектов - как решить? - PullRequest
1 голос
/ 06 марта 2020

В приведенной ниже строке № 5, Анализ сонарного кода, показывающий проблему «Мертвое хранилище для списка событий в», Как решить эту проблему с помощью моего кода?

Анализ сонарного кода говорит: Эта инструкция присваивает значение локальной переменной, но это значение не читается и не используется в какой-либо последующей инструкции. Часто это указывает на ошибку, поскольку вычисленное значение никогда не используется. Обратите внимание, что компилятор Sun javac часто генерирует мертвые хранилища для конечных локальных переменных. Поскольку SpotBugs является инструментом на основе байт-кода, не существует простого способа устранить эти ложные срабатывания.


@GetMapping(path = Constants.GET_REPORT, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Map> getReport(@PathVariable(required = false) String keyword) {
        HashMap<Object, Object> sitesMap = new LinkedHashMap<>(); 
        try {
            List<EventV1> myList = new ArrayList<EventV1>();  // <<------------problem here  (Dead store to myList in..)
            if (keyword != null && !keyword.equalsIgnoreCase("null")) {// search of the keyword
                myList = eventService.getBySearch(keyword);
            } else {
                myList = eventService.getSomething();
            }
            if (myList != null && myList.size() > 0) {
                LOGGER.info("-size of the all events" + myList.size());
                sitesMap.put(Constants.SUCCESS, true);
                sitesMap.put(Constants.SIZE, myList.size());
                sitesMap.put("mylist", myList); 
                return new ResponseEntity<Map>(sitesMap, HttpStatus.OK);
            } else {
                sitesMap.put(Constants.SUCCESS, false);
                sitesMap.put("size", 0);
                sitesMap.put("mylist", null); 
                return new ResponseEntity<Map>(sitesMap, HttpStatus.NO_CONTENT);
            }
        } catch (Exception exc) { 
            throw new ResponseStatusException(HttpStatus.EXPECTATION_FAILED, REGISTER_FAIL_MSG, exc);
        }
    }

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы можете присвоить myList ноль во время объявления. Присвоение ему new ArrayList<EventV1>() бесполезно, так как оно в любом случае берет результат из вызова метода: eventService.getBySearch(keyword) или eventService.getSomething(). Вы в основном назначили некоторую память для new ArrayList<EventV1>(), но сразу же разыменовали ее, тратя тем самым некоторую ценную память.

0 голосов
/ 06 марта 2020

Это потому, что вы создали ненужный ArrayList объект. Просто замените:

List<EventV1> myList = new ArrayList<EventV1>();
                       ^^^^^^^^^^^^^^^^^^^^^^^^
if (keyword != null && !keyword.equalsIgnoreCase("null")) {
    myList = eventService.getBySearch(keyword);
} else {
    myList = eventService.getSomething();
}

на

List<EventV1> myList;

if (keyword != null && !keyword.equalsIgnoreCase("null")) {
    myList = eventService.getBySearch(keyword);
} else {
    myList = eventService.getSomething();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...