/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.text.read.recognizer;
import java.util.ArrayList;
import java.util.List;
import org.rf.ide.core.testdata.model.RobotVersion;
import org.rf.ide.core.testdata.text.read.IRobotTokenType;
import org.rf.ide.core.testdata.text.read.VersionAvailabilityInfo;
import org.rf.ide.core.testdata.text.read.VersionAvailabilityInfo.VersionAvailabilityInfoBuilder;
import com.google.common.collect.ArrayListMultimap;
public enum RobotTokenType implements IRobotTokenType {
/**
*/
UNKNOWN(TableType.NOT_STRICTLY_BELONGS),
/**
*/
EMPTY_CELL(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation(" \\ ").build()),
/**
*/
VARIABLE_USAGE(TableType.NOT_STRICTLY_BELONGS),
/**
*/
ASSIGNMENT(TableType.NOT_STRICTLY_BELONGS, VersionAvailabilityInfoBuilder.create().addRepresentation("=").build()),
/**
*/
PRETTY_ALIGN_SPACE(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation(" ").build()),
/**
*/
USER_OWN_TABLE_HEADER(TableType.NOT_STRICTLY_BELONGS),
/**
*/
SETTINGS_TABLE_HEADER(
TableType.SETTINGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("Setting").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Settings").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Metadata").deprecatedFrom("3.0").build()),
/**
*/
VARIABLES_TABLE_HEADER(
TableType.VARIABLES,
VersionAvailabilityInfoBuilder.create().addRepresentation("Variable").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Variables").build()),
/**
*/
TEST_CASES_TABLE_HEADER(
TableType.TEST_CASES,
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Case").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Cases").build()),
/**
*/
KEYWORDS_TABLE_HEADER(
TableType.KEYWORDS,
VersionAvailabilityInfoBuilder.create().addRepresentation("Keyword").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Keywords").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("User Keyword").deprecatedFrom("3.0").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("User Keywords").build()),
/**
*/
TABLE_HEADER_COLUMN(TableType.NOT_STRICTLY_BELONGS),
/**
*/
START_HASH_COMMENT(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("#").build()),
/**
*/
COMMENT_CONTINUE(TableType.NOT_STRICTLY_BELONGS),
/**
*/
PREVIOUS_LINE_CONTINUE(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("...").build()),
/**
*/
SETTING_LIBRARY_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Library").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Library:").build()),
/**
*/
SETTING_UNKNOWN(TableType.SETTINGS, true),
/**
*/
SETTING_UNKNOWN_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_LIBRARY_NAME(TableType.SETTINGS),
/**
*/
SETTING_LIBRARY_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_LIBRARY_ALIAS(
TableType.SETTINGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("WITH NAME").build()),
/**
*/
SETTING_LIBRARY_ALIAS_VALUE(TableType.SETTINGS),
/**
*/
SETTING_VARIABLES_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Variables").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Variables:").build()),
/**
*/
SETTING_VARIABLES_FILE_NAME(TableType.SETTINGS),
/**
*/
SETTING_VARIABLES_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_RESOURCE_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Resource").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Resource:").build()),
/**
*/
SETTING_RESOURCE_FILE_NAME(TableType.SETTINGS),
/**
*/
SETTING_RESOURCE_UNWANTED_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_DOCUMENTATION_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Documentation").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Documentation:").build(),
VersionAvailabilityInfoBuilder.create().deprecatedFrom("3.0").addRepresentation("Document").build(),
VersionAvailabilityInfoBuilder.create().deprecatedFrom("3.0").addRepresentation("Document:").build()),
/**
*/
SETTING_DOCUMENTATION_TEXT(TableType.SETTINGS),
/**
*/
SETTING_METADATA_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Metadata").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Metadata:").build(),
VersionAvailabilityInfoBuilder.create().deprecatedFrom("3.0").addRepresentation("Meta").build(),
VersionAvailabilityInfoBuilder.create().deprecatedFrom("3.0").addRepresentation("Meta:").build()),
/**
*/
SETTING_METADATA_KEY(TableType.SETTINGS),
/**
*/
SETTING_METADATA_VALUE(TableType.SETTINGS),
/**
*/
SETTING_SUITE_SETUP_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Suite Setup").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Suite Setup:").build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Suite Precondition")
.deprecatedFrom("3.0")
.build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Suite Precondition:")
.deprecatedFrom("3.0")
.build()),
/**
*/
SETTING_SUITE_SETUP_KEYWORD_NAME(TableType.SETTINGS),
/**
*/
SETTING_SUITE_SETUP_KEYWORD_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_SUITE_TEARDOWN_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Suite Teardown").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Suite Teardown:").build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Suite Postcondition")
.deprecatedFrom("3.0")
.build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Suite Postcondition:")
.deprecatedFrom("3.0")
.build()),
/**
*/
SETTING_SUITE_TEARDOWN_KEYWORD_NAME(TableType.SETTINGS),
/**
*/
SETTING_SUITE_TEARDOWN_KEYWORD_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_FORCE_TAGS_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Force Tags").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Force Tags:").build()),
/**
*/
SETTING_FORCE_TAG(TableType.SETTINGS),
/**
*/
SETTING_DEFAULT_TAGS_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Default Tags").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Default Tags:").build()),
/**
*/
SETTING_DEFAULT_TAG(TableType.SETTINGS),
/**
*/
SETTING_TEST_SETUP_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Setup").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Setup:").build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Test Precondition")
.deprecatedFrom("3.0")
.build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Test Precondition:")
.deprecatedFrom("3.0")
.build()),
/**
*
*/
SETTING_TEST_SETUP_KEYWORD_NAME(TableType.SETTINGS),
/**
*
*/
SETTING_TEST_SETUP_KEYWORD_ARGUMENT(TableType.SETTINGS),
/**
*
*/
SETTING_TEST_TEARDOWN_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Teardown").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Teardown:").build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Test Postcondition")
.deprecatedFrom("3.0")
.build(),
VersionAvailabilityInfoBuilder.create()
.addRepresentation("Test Postcondition:")
.deprecatedFrom("3.0")
.build()),
/**
*/
SETTING_TEST_TEARDOWN_KEYWORD_NAME(TableType.SETTINGS),
/**
*/
SETTING_TEST_TEARDOWN_KEYWORD_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_TEST_TEMPLATE_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Template").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Template:").build()),
/**
*/
SETTING_TEST_TEMPLATE_KEYWORD_NAME(TableType.SETTINGS),
/**
*/
SETTING_TEST_TEMPLATE_KEYWORD_UNWANTED_ARGUMENT(TableType.SETTINGS),
/**
*/
SETTING_TEST_TIMEOUT_DECLARATION(
TableType.SETTINGS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Timeout").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("Test Timeout:").build()),
/**
*/
SETTING_TEST_TIMEOUT_VALUE(TableType.SETTINGS),
/**
*/
SETTING_TEST_TIMEOUT_MESSAGE(TableType.SETTINGS),
/**
*/
VARIABLES_WRONG_DEFINED(TableType.VARIABLES, true),
/**
*/
VARIABLES_SCALAR_DECLARATION(TableType.VARIABLES, true),
/**
*/
VARIABLES_SCALAR_AS_LIST_DECLARATION(TableType.VARIABLES, true),
/**
*/
VARIABLES_LIST_DECLARATION(TableType.VARIABLES, true),
/**
*/
VARIABLES_DICTIONARY_DECLARATION(
TableType.VARIABLES,
true,
VersionAvailabilityInfoBuilder.create().availableFrom("2.9").build()),
/**
*/
VARIABLES_ENVIRONMENT_DECLARATION(TableType.VARIABLES, true),
/**
*/
VARIABLES_UNKNOWN_DECLARATION(TableType.VARIABLES, true),
/**
*/
VARIABLES_VARIABLE_VALUE(TableType.VARIABLES),
/**
*/
VARIABLES_DICTIONARY_KEY(TableType.VARIABLES, VersionAvailabilityInfoBuilder.create().availableFrom("2.9").build()),
/**
*/
VARIABLES_DICTIONARY_VALUE(
TableType.VARIABLES,
VersionAvailabilityInfoBuilder.create().availableFrom("2.9").build()),
/**
*/
TEST_CASE_SETTING_UNKNOWN_DECLARATION(TableType.TEST_CASES, true),
/**
*/
TEST_CASE_SETTING_UNKNOWN_ARGUMENTS(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_DOCUMENTATION(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Documentation]").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("[Document]").deprecatedFrom("3.0").build()),
/**
*/
TEST_CASE_SETTING_DOCUMENTATION_TEXT(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TAGS_DECLARATION(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Tags]").build()),
/**
*/
TEST_CASE_SETTING_TAGS(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_SETUP(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Setup]").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("[Precondition]").deprecatedFrom("3.0").build()),
/**
*/
TEST_CASE_SETTING_SETUP_KEYWORD_NAME(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_SETUP_KEYWORD_ARGUMENT(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TEARDOWN(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Teardown]").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("[Postcondition]").deprecatedFrom("3.0").build()),
/**
*/
TEST_CASE_SETTING_TEARDOWN_KEYWORD_NAME(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TEARDOWN_KEYWORD_ARGUMENT(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TEMPLATE(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Template]").build()),
/**
*/
TEST_CASE_SETTING_TEMPLATE_KEYWORD_NAME(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TEMPLATE_KEYWORD_UNWANTED_ARGUMENT(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TIMEOUT(
TableType.TEST_CASES,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Timeout]").build()),
/**
*/
TEST_CASE_SETTING_TIMEOUT_VALUE(TableType.TEST_CASES),
/**
*/
TEST_CASE_SETTING_TIMEOUT_MESSAGE(TableType.TEST_CASES),
/**
*/
TEST_CASE_NAME(TableType.TEST_CASES),
/**
*/
TEST_CASE_ACTION_NAME(TableType.TEST_CASES),
/**
*/
TEST_CASE_ACTION_ARGUMENT(TableType.TEST_CASES),
/**
*/
KEYWORD_SETTING_UNKNOWN_DECLARATION(TableType.KEYWORDS, true),
/**
*/
KEYWORD_SETTING_UNKNOWN_ARGUMENTS(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_DOCUMENTATION(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Documentation]").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("[Document]").deprecatedFrom("3.0").build()),
/**
*/
KEYWORD_SETTING_DOCUMENTATION_TEXT(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_TAGS(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Tags]").build()),
/**
*/
KEYWORD_SETTING_TAGS_TAG_NAME(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_ARGUMENTS(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Arguments]").build()),
/**
*/
KEYWORD_SETTING_ARGUMENT(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_RETURN(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Return]").build()),
/**
*/
KEYWORD_SETTING_RETURN_VALUE(TableType.KEYWORDS),
/**
*
*/
KEYWORD_SETTING_TEARDOWN(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Teardown]").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("[Postcondition]").deprecatedFrom("3.0").build()),
/**
*/
KEYWORD_SETTING_TEARDOWN_KEYWORD_NAME(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_TEARDOWN_KEYWORD_ARGUMENT(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_TIMEOUT(
TableType.KEYWORDS,
true,
VersionAvailabilityInfoBuilder.create().addRepresentation("[Timeout]").build()),
/**
*/
KEYWORD_SETTING_TIMEOUT_VALUE(TableType.KEYWORDS),
/**
*/
KEYWORD_SETTING_TIMEOUT_MESSAGE(TableType.KEYWORDS),
/**
*/
KEYWORD_NAME(TableType.KEYWORDS),
/**
*/
KEYWORD_ACTION_NAME(TableType.KEYWORDS),
/**
*/
KEYWORD_ACTION_ARGUMENT(TableType.KEYWORDS),
/**
*/
FOR_TOKEN(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation(": FOR").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation(":FOR").build()),
/**
*/
IN_TOKEN(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("IN").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("IN RANGE").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("IN ENUMERATE").availableFrom("2.9").build(),
VersionAvailabilityInfoBuilder.create().addRepresentation("IN ZIP").availableFrom("2.9").build()),
/**
*/
FOR_CONTINUE_TOKEN(
TableType.NOT_STRICTLY_BELONGS,
VersionAvailabilityInfoBuilder.create().addRepresentation("\\").build()),
FOR_CONTINUE_ARTIFICIAL_TOKEN(TableType.NOT_STRICTLY_BELONGS);
private final List<String> text = new ArrayList<>(0);
private final List<VersionAvailabilityInfo> representation = new ArrayList<>(0);
private final TableType type;
private final boolean settingDeclaration;
private static final ArrayListMultimap<TableType, RobotTokenType> TYPE_TO_TABLE = ArrayListMultimap.create();
static {
final RobotTokenType[] values = RobotTokenType.values();
for (final RobotTokenType type : values) {
TYPE_TO_TABLE.put(type.type, type);
}
}
@Override
public List<String> getRepresentation() {
return text;
}
private RobotTokenType(final TableType type, final VersionAvailabilityInfo... representations) {
this(type, false, representations);
}
private RobotTokenType(final TableType type, final boolean settingDeclaration,
final VersionAvailabilityInfo... representations) {
this.type = type;
this.settingDeclaration = settingDeclaration;
for (final VersionAvailabilityInfo vInfo : representations) {
representation.add(vInfo);
text.add(vInfo.getRepresentation());
}
}
public boolean isSettingDeclaration() {
return settingDeclaration;
}
private enum TableType {
NOT_STRICTLY_BELONGS,
SETTINGS,
VARIABLES,
TEST_CASES,
KEYWORDS;
}
public static boolean isTableHeader(final IRobotTokenType type) {
return (type == SETTINGS_TABLE_HEADER || type == VARIABLES_TABLE_HEADER || type == TEST_CASES_TABLE_HEADER
|| type == KEYWORDS_TABLE_HEADER || type == USER_OWN_TABLE_HEADER);
}
public static List<RobotTokenType> getTypesForSettingsTable() {
return getTypes(TableType.SETTINGS);
}
public static List<RobotTokenType> getTypesForVariablesTable() {
return getTypes(TableType.VARIABLES);
}
public static List<RobotTokenType> getTypesForTestCasesTable() {
return getTypes(TableType.TEST_CASES);
}
public static List<RobotTokenType> getTypesForKeywordsTable() {
return getTypes(TableType.KEYWORDS);
}
public static List<RobotTokenType> getTypesNotStrictlyBelongs() {
return getTypes(TableType.NOT_STRICTLY_BELONGS);
}
private static List<RobotTokenType> getTypes(final TableType type) {
return new ArrayList<>(TYPE_TO_TABLE.get(type));
}
public static RobotTokenType findTypeOfDeclarationForKeywordSettingTable(final String textSettingDeclaration) {
return findTypeOfDeclaration(getTypesForKeywordsTable(), textSettingDeclaration);
}
public static RobotTokenType findTypeOfDeclarationForTestCaseSettingTable(final String textSettingDeclaration) {
return findTypeOfDeclaration(getTypesForTestCasesTable(), textSettingDeclaration);
}
public static RobotTokenType findTypeOfDeclarationForSettingTable(final String textSettingDeclaration) {
return findTypeOfDeclaration(getTypesForSettingsTable(), textSettingDeclaration);
}
private static RobotTokenType findTypeOfDeclaration(final List<RobotTokenType> availableTypes,
final String textSettingDeclaration) {
RobotTokenType found = RobotTokenType.UNKNOWN;
for (final RobotTokenType type : availableTypes) {
if (type.isSettingDeclaration()) {
for (final String representation : type.getRepresentation()) {
if (representation.equalsIgnoreCase(textSettingDeclaration.trim())) {
found = type;
break;
}
}
}
}
return found;
}
@Override
public List<VersionAvailabilityInfo> getVersionAvailabilityInfos() {
return representation;
}
@Override
public VersionAvailabilityInfo findVersionAvailablilityInfo(final String text) {
VersionAvailabilityInfo vaiResult = null;
for (final VersionAvailabilityInfo vInfo : representation) {
if (vInfo.getRepresentation().equalsIgnoreCase(text)) {
vaiResult = vInfo;
break;
}
}
return vaiResult;
}
public VersionAvailabilityInfo getTheMostCorrectOneRepresentation(final RobotVersion robotVersionInstalled) {
VersionAvailabilityInfo vaiInCaseNoMatches = null;
for (final VersionAvailabilityInfo vai : getVersionAvailabilityInfos()) {
if (vai.getRepresentation() == null) {
continue;
}
if ((vai.getAvailableFrom() == null || robotVersionInstalled.isNewerOrEqualTo(vai.getAvailableFrom()))
&& vai.getDepracatedFrom() == null && vai.getRemovedFrom() == null) {
vaiInCaseNoMatches = vai;
break;
} else {
if (vaiInCaseNoMatches == null) {
vaiInCaseNoMatches = vai;
continue;
}
if (vai.getAvailableFrom() == null || robotVersionInstalled.isNewerOrEqualTo(vai.getAvailableFrom())) {
if (vai.getRemovedFrom() == null) {
if (vaiInCaseNoMatches.getDepracatedFrom() != null
&& vai.getDepracatedFrom().isNewerThan(vaiInCaseNoMatches.getDepracatedFrom())) {
vaiInCaseNoMatches = vai;
}
} else {
if (vaiInCaseNoMatches.getRemovedFrom() != null
&& vai.getRemovedFrom().isNewerThan(vaiInCaseNoMatches.getRemovedFrom())) {
vaiInCaseNoMatches = vai;
}
}
}
}
}
return vaiInCaseNoMatches;
}
}