From fd5a6566d0e12540b4ac49b24603bae26666ab94 Mon Sep 17 00:00:00 2001 From: "arkadiusz.adamski" Date: Wed, 24 Mar 2021 16:24:22 +0000 Subject: Fix sonar issues - reduce methods Cognitive Complexity from 19 to the 15 allowed in CommandLineParser - iteration replaced with bulk 'Collection.addAll' call - remove redundant initializers - replace try with try-with-resources Issue-ID: POLICY-3093 Signed-off-by: arkadiusz.adamski Change-Id: Ia727b3145ef8f63bcfc07723191c85e1ec8c923c --- .../apex/auth/clieditor/CommandLineParser.java | 41 ++++++++-------------- 1 file changed, 15 insertions(+), 26 deletions(-) (limited to 'auth/cli-editor/src/main/java') diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java index 05066adb4..c9316cbd2 100644 --- a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java +++ b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CommandLineParser.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 Nordix Foundation. + * Modifications Copyright (C) 2020-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -79,7 +79,7 @@ public class CommandLineParser { private ArrayList mergeQuotes(final ArrayList wordsSplitOnQuotes) { final ArrayList wordsWithQuotesMerged = new ArrayList<>(); - int loopWordIndex = 0; + int loopWordIndex; for (int wordIndex = 0; wordIndex < wordsSplitOnQuotes.size(); wordIndex = loopWordIndex) { loopWordIndex = mergeQuote(wordsSplitOnQuotes, wordsWithQuotesMerged, wordIndex); } @@ -140,9 +140,7 @@ public class CommandLineParser { // Split on equals character final ArrayList splitWords = splitOnChar(word, '='); - for (final String splitWord : splitWords) { - wordsSplitOnEquals.add(splitWord); - } + wordsSplitOnEquals.addAll(splitWords); } return wordsSplitOnEquals; @@ -158,7 +156,7 @@ public class CommandLineParser { private ArrayList mergeEquals(final ArrayList wordsSplitOnEquals) { final ArrayList wordsWithEqualsMerged = new ArrayList<>(); - int loopWordIndex = 0; + int loopWordIndex; for (int wordIndex = 0; wordIndex < wordsSplitOnEquals.size(); wordIndex = loopWordIndex) { loopWordIndex = wordIndex; @@ -315,39 +313,30 @@ public class CommandLineParser { // The first word must be alphanumeric, that is a command if (!commandWords.get(0).matches("^[a-zA-Z0-9]*$")) { throw new CommandLineException( - "first command word is not alphanumeric or is not a command: " + commandWords.get(0)); + "first command word is not alphanumeric or is not a command: " + commandWords.get(0)); } // Now check that we have a sequence of commands at the beginning int currentWordPos = 0; - while (currentWordPos < commandWords.size()) { - if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]*$")) { - currentWordPos++; - } else { + for (; currentWordPos < commandWords.size(); currentWordPos++) { + if (!commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]*$")) { break; } } - while (currentWordPos < commandWords.size()) { - // From now on we should have a sequence of parameters with arguments delimited by a - // single '=' character - if (currentWordPos < commandWords.size() - 1 || logicBlock == null) { - // No logic block - if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]+=[a-zA-Z0-9/\"].*$")) { - currentWordPos++; - } else { - throw new CommandLineException( - "command argument is not properly formed: " + commandWords.get(currentWordPos)); - } - } else { - // Logic block + for (; currentWordPos < commandWords.size(); ++currentWordPos) { + if (currentWordPos == commandWords.size() - 1 && logicBlock != null) { + // for the last command, if the command ends with = and there is a Logic block if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]+=")) { commandWords.set(currentWordPos, commandWords.get(currentWordPos) + logicBlock); - currentWordPos++; } else { throw new CommandLineException( - "command argument is not properly formed: " + commandWords.get(currentWordPos)); + "command argument is not properly formed: " + commandWords.get(currentWordPos)); } + } else if (!commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]+=[a-zA-Z0-9/\"].*$")) { + // Not a last command, or the last command, but there is no logic block - wrong pattern + throw new CommandLineException( + "command argument is not properly formed: " + commandWords.get(currentWordPos)); } } -- cgit 1.2.3-korg