From 4883cfd1e2232b87b38b398b0456f09e9f11738a Mon Sep 17 00:00:00 2001 From: Rollczi Date: Fri, 6 Jan 2023 18:36:22 +0100 Subject: [PATCH] Release 2.7.0 --- build.gradle.kts | 4 +- settings.gradle.kts | 2 +- .../intellijplugin/InspectionToolUtil.java | 23 ++++++ .../legacy/annotation/AnnotationMapper.java | 12 +-- .../LegacyAnnotationInspectionTool.java | 5 -- .../annoation/AnnotationValidator.java | 5 +- .../annoation/AttributeValidator.java | 9 ++- .../validation/annoation/AttributeValue.java | 29 +++++++ .../ReplaceWithValidValueQuickFix.java | 52 +++++++++++++ .../ValidationAnnotationInspectionTool.java | 76 +++++++++++++++++-- .../CommandNameValidUtils.java | 31 +------- .../ExecuteValidationInspection.java | 12 +-- .../MoreThanMinusOneQuickFix.java | 18 +++++ .../RouteValidationInspection.java | 4 +- .../implementations/StringQuickFix.java | 24 ++++++ .../ExecuteValidation.html | 34 +++++++++ .../inspectionDescriptions/LegacySection.html | 21 +++++ .../RouteValidation.html | 36 +++++++++ 18 files changed, 335 insertions(+), 62 deletions(-) create mode 100644 src/main/java/dev/rollczi/litecommands/intellijplugin/InspectionToolUtil.java create mode 100644 src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValue.java create mode 100644 src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ReplaceWithValidValueQuickFix.java create mode 100644 src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/MoreThanMinusOneQuickFix.java create mode 100644 src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/StringQuickFix.java create mode 100644 src/main/resources/inspectionDescriptions/ExecuteValidation.html create mode 100644 src/main/resources/inspectionDescriptions/LegacySection.html create mode 100644 src/main/resources/inspectionDescriptions/RouteValidation.html diff --git a/build.gradle.kts b/build.gradle.kts index b2103dd..feb9afe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,8 +3,8 @@ plugins { id("org.jetbrains.intellij") version "1.11.0" } -group = "dev.rollczi.litecommands.intellijplugin" -version = "1.0-SNAPSHOT" +group = "dev.rollczi" +version = "2.7.0-SNAPSHOT" repositories { mavenCentral() diff --git a/settings.gradle.kts b/settings.gradle.kts index f345c2d..5f0a088 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1 @@ -rootProject.name = "LiteCommandsIntelliJPlugin" \ No newline at end of file +rootProject.name = "LiteCommands-IntelliJPlugin" \ No newline at end of file diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/InspectionToolUtil.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/InspectionToolUtil.java new file mode 100644 index 0000000..6b7d96e --- /dev/null +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/InspectionToolUtil.java @@ -0,0 +1,23 @@ +package dev.rollczi.litecommands.intellijplugin; + +import com.intellij.codeInspection.LocalInspectionTool; + +public final class InspectionToolUtil { + + private static final String FILE_DESCRIPTION_EXCLUDE_END_NAME = "Inspection"; + private static final String FILE_DESCRIPTION_EXTENSION = ".html"; + + private InspectionToolUtil() { + } + + public static String getDescriptionFileName(Class inspectionToolClass) { + String className = inspectionToolClass.getSimpleName(); + + if (className.endsWith(FILE_DESCRIPTION_EXCLUDE_END_NAME)) { + className = className.substring(0, className.length() - FILE_DESCRIPTION_EXCLUDE_END_NAME.length()); + } + + return className + FILE_DESCRIPTION_EXTENSION; + } + +} diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/AnnotationMapper.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/AnnotationMapper.java index c8897db..c1f610c 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/AnnotationMapper.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/AnnotationMapper.java @@ -1,15 +1,15 @@ package dev.rollczi.litecommands.intellijplugin.legacy.annotation; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; public final class AnnotationMapper { private final String legacyName; private final String modernName; - private final Set attributes; + private final List attributes; - private AnnotationMapper(String legacyName, String modernName, Set attributes) { + private AnnotationMapper(String legacyName, String modernName, List attributes) { this.legacyName = legacyName; this.modernName = modernName; this.attributes = attributes; @@ -43,7 +43,7 @@ private String toShortName(String name) { return name.substring(name.lastIndexOf('.') + 1); } - public Set getAttributes() { + public List getAttributes() { return this.attributes; } @@ -55,7 +55,7 @@ public static class Builder { private String legacyName; private String modernName; - private final Set attributes = new HashSet<>(); + private final List attributes = new ArrayList<>(); public Builder legacyName(String legacyName) { this.legacyName = legacyName; diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/LegacyAnnotationInspectionTool.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/LegacyAnnotationInspectionTool.java index 6d490bf..579ea73 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/LegacyAnnotationInspectionTool.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/legacy/annotation/LegacyAnnotationInspectionTool.java @@ -25,11 +25,6 @@ protected LegacyAnnotationInspectionTool(AnnotationMapper mapper) { return "LiteCommands"; } - @Override - public @NotNull String getShortName() { - return "Legacy" + this.mapper.legacyName() + "Annotation"; - } - @Override public boolean isEnabledByDefault() { return true; diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AnnotationValidator.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AnnotationValidator.java index 8d37abc..e5f143b 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AnnotationValidator.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AnnotationValidator.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; import java.util.function.Predicate; +import java.util.function.UnaryOperator; public final class AnnotationValidator { @@ -46,8 +47,8 @@ public Builder name(String name) { return this; } - public Builder attribute(String modern, AttributeType type, Predicate validator) { - this.attributeValidators.add(new AttributeValidator(modern, type, validator)); + public Builder attribute(String modern, AttributeType type, Predicate validator, UnaryOperator quickFix) { + this.attributeValidators.add(new AttributeValidator(modern, type, validator, quickFix)); return this; } diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValidator.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValidator.java index 88a9000..9241d9e 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValidator.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValidator.java @@ -3,17 +3,20 @@ import dev.rollczi.litecommands.intellijplugin.legacy.annotation.AttributeType; import java.util.function.Predicate; +import java.util.function.UnaryOperator; public class AttributeValidator { private final String name; private final AttributeType type; private final Predicate validator; + private final UnaryOperator quickFix; - public AttributeValidator(String name, AttributeType type, Predicate validator) { + public AttributeValidator(String name, AttributeType type, Predicate validator, UnaryOperator quickFix) { this.name = name; this.type = type; this.validator = validator; + this.quickFix = quickFix; } public String name() { @@ -28,4 +31,8 @@ public boolean validate(String value) { return this.validator.test(value); } + public String quickFix(String value) { + return this.quickFix.apply(value); + } + } diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValue.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValue.java new file mode 100644 index 0000000..55f4868 --- /dev/null +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/AttributeValue.java @@ -0,0 +1,29 @@ +package dev.rollczi.litecommands.intellijplugin.validation.annoation; + +import com.intellij.psi.PsiElement; + +class AttributeValue { + + private final String text; + private final String rawText; + private final PsiElement element; + + AttributeValue(String text, String rawText, PsiElement element) { + this.text = text; + this.rawText = rawText; + this.element = element; + } + + public String text() { + return this.text; + } + + public String rawText() { + return this.rawText; + } + + public PsiElement element() { + return this.element; + } + +} diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ReplaceWithValidValueQuickFix.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ReplaceWithValidValueQuickFix.java new file mode 100644 index 0000000..0484ca5 --- /dev/null +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ReplaceWithValidValueQuickFix.java @@ -0,0 +1,52 @@ +package dev.rollczi.litecommands.intellijplugin.validation.annoation; + +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.codeInspection.util.IntentionFamilyName; +import com.intellij.openapi.project.Project; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiAnnotation; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; + +class ReplaceWithValidValueQuickFix implements LocalQuickFix { + + private final PsiAnnotation patternAnnotation; + private final AttributeValidator validator; + private final AttributeValue value; + + public ReplaceWithValidValueQuickFix(PsiAnnotation patternAnnotation, AttributeValidator validator, AttributeValue value) { + this.patternAnnotation = patternAnnotation; + this.validator = validator; + this.value = value; + } + + @Override + public @IntentionFamilyName @NotNull String getFamilyName() { + String quickFix = this.validator.quickFix(this.value.rawText()); + + if (quickFix.startsWith("\"") && quickFix.endsWith("\"")) { + quickFix = quickFix.substring(1, quickFix.length() - 1); + } + + return "Replace with '" + quickFix + "'"; + } + + @Override + public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { + String quickFix = this.validator.quickFix(this.value.rawText()); + PsiElement old = this.value.element(); + String annotationText = this.patternAnnotation.getText(); + + int start = old.getTextRange().getStartOffset() - this.patternAnnotation.getTextRange().getStartOffset(); + int end = old.getTextRange().getEndOffset() - this.patternAnnotation.getTextRange().getStartOffset(); + + String newAnnotationText = annotationText.substring(0, start) + quickFix + annotationText.substring(end); + + this.patternAnnotation.replace(JavaPsiFacade.getElementFactory(project).createAnnotationFromText( + newAnnotationText, + this.patternAnnotation + )); + } + +} diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ValidationAnnotationInspectionTool.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ValidationAnnotationInspectionTool.java index 2f92b30..06fe20b 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ValidationAnnotationInspectionTool.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/ValidationAnnotationInspectionTool.java @@ -3,11 +3,21 @@ import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.JavaElementVisitor; +import com.intellij.psi.JavaTokenType; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiAnnotationMemberValue; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiJavaToken; +import com.intellij.psi.PsiLiteralExpression; +import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + public abstract class ValidationAnnotationInspectionTool extends AbstractBaseJavaLocalInspectionTool { private static final String DISPLAY_NAME = "Annotation @%s has invalid value"; @@ -28,11 +38,6 @@ protected ValidationAnnotationInspectionTool(AnnotationValidator annotationValid return "LiteCommands"; } - @Override - public @NotNull String getShortName() { - return "Validation" + this.annotationValidator.name() + "Annotation"; - } - @Override public boolean isEnabledByDefault() { return true; @@ -54,14 +59,69 @@ public void visitAnnotation(PsiAnnotation annotation) { continue; } - String value = attribute.getText(); + List values = ValidationAnnotationInspectionTool.this.getValues(attribute); - if (!validator.validate(value)) { - holder.registerProblem(attribute, String.format("%s attribute %s has invalid value '%s'", ValidationAnnotationInspectionTool.this.annotationValidator.annotation(), validator.name(), value)); + for (AttributeValue value : values) { + if (!validator.validate(value.text())) { + holder.registerProblem( + value.element(), + String.format("Attribute '%s' has invalid value %s", validator.name(), value.text()), + new ReplaceWithValidValueQuickFix(annotation, validator, value) + ); + } } } } }; } + private static final Set CHECKED_TOKENS = Set.of( + JavaTokenType.STRING_LITERAL, + JavaTokenType.CHARACTER_LITERAL, + JavaTokenType.INTEGER_LITERAL, + JavaTokenType.LONG_LITERAL, + JavaTokenType.FLOAT_LITERAL, + JavaTokenType.DOUBLE_LITERAL, + JavaTokenType.TRUE_KEYWORD, + JavaTokenType.FALSE_KEYWORD, + JavaTokenType.NULL_KEYWORD, + JavaTokenType.MINUS, + JavaTokenType.PLUS + ); + + private List getValues(PsiElement element) { + List values = new ArrayList<>(); + + for (PsiElement child : element.getChildren()) { + if (child instanceof PsiJavaToken) { + PsiJavaToken token = (PsiJavaToken) child; + IElementType tokenType = token.getTokenType(); + String text = token.getText(); + + if (!CHECKED_TOKENS.contains(tokenType)) { + continue; + } + + if (tokenType == JavaTokenType.STRING_LITERAL || tokenType == JavaTokenType.CHARACTER_LITERAL) { + values.add(new AttributeValue(text.substring(1, text.length() - 1), text, token)); + continue; + } + + if (tokenType == JavaTokenType.MINUS || tokenType == JavaTokenType.PLUS) { + return Collections.singletonList(new AttributeValue(element.getText(), element.getText(), element)); + } + } + + if (child instanceof PsiLiteralExpression) { + values.addAll(this.getValues(child)); + } + } + + if (values.isEmpty()) { + values.add(new AttributeValue(element.getText(), element.getText(), element)); + } + + return values; + } + } diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/CommandNameValidUtils.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/CommandNameValidUtils.java index c4e19cc..9733ec9 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/CommandNameValidUtils.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/CommandNameValidUtils.java @@ -4,37 +4,8 @@ final class CommandNameValidUtils { private CommandNameValidUtils() { } - - - static boolean validateArray(String value) { - if (value.startsWith("{") && value.endsWith("}")) { - value = value.substring(1, value.length() - 1); - } - - value = value.trim(); - - if (value.isEmpty()) { - return true; - } - - String[] values = value.split(","); - - for (String val : values) { - if (!validateString(val)) { - return false; - } - } - - return true; - } - + static boolean validateString(String value) { - value = value.trim(); - - if (value.startsWith("\"") && value.endsWith("\"")) { - value = value.substring(1, value.length() - 1); - } - if (value.isEmpty()) { return false; } diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/ExecuteValidationInspection.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/ExecuteValidationInspection.java index 06f281e..809776e 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/ExecuteValidationInspection.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/ExecuteValidationInspection.java @@ -6,13 +6,15 @@ public class ExecuteValidationInspection extends ValidationAnnotationInspectionTool { + private static final String NUMBER_MORE_OR_EQ_MINUS_ONE_REGEX = "( *[0-9]+ *| *- *1 *)"; + private static final AnnotationValidator ROUTE_VALIDATOR = AnnotationValidator.builder() .name("dev.rollczi.litecommands.command.execute.Execute") - .attribute("route", AttributeType.STRING, CommandNameValidUtils::validateString) - .attribute("aliases", AttributeType.ARRAY, CommandNameValidUtils::validateArray) - .attribute("required", AttributeType.INT, number -> number.matches("[0-9]+|-1")) - .attribute("min", AttributeType.INT, number -> number.matches("[0-9]+|-1")) - .attribute("max", AttributeType.INT, number -> number.matches("[0-9]+|-1")) + .attribute("route", AttributeType.STRING, CommandNameValidUtils::validateString, new StringQuickFix()) + .attribute("aliases", AttributeType.ARRAY, CommandNameValidUtils::validateString, new StringQuickFix()) + .attribute("required", AttributeType.INT, number -> number.matches(NUMBER_MORE_OR_EQ_MINUS_ONE_REGEX), new MoreThanMinusOneQuickFix()) + .attribute("min", AttributeType.INT, number -> number.matches(NUMBER_MORE_OR_EQ_MINUS_ONE_REGEX), new MoreThanMinusOneQuickFix()) + .attribute("max", AttributeType.INT, number -> number.matches(NUMBER_MORE_OR_EQ_MINUS_ONE_REGEX), new MoreThanMinusOneQuickFix()) .build(); public ExecuteValidationInspection() { diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/MoreThanMinusOneQuickFix.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/MoreThanMinusOneQuickFix.java new file mode 100644 index 0000000..e32fcd2 --- /dev/null +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/MoreThanMinusOneQuickFix.java @@ -0,0 +1,18 @@ +package dev.rollczi.litecommands.intellijplugin.validation.annoation.implementations; + +import java.util.function.UnaryOperator; + +class MoreThanMinusOneQuickFix implements UnaryOperator { + + @Override + public String apply(String rawValue) { + rawValue = rawValue.trim(); + + if (rawValue.startsWith("-")) { + return "-1"; + } + + return rawValue; + } + +} diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/RouteValidationInspection.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/RouteValidationInspection.java index 87f5733..0e851ec 100644 --- a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/RouteValidationInspection.java +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/RouteValidationInspection.java @@ -9,8 +9,8 @@ public class RouteValidationInspection extends ValidationAnnotationInspectionToo // TODO context private static final AnnotationValidator ROUTE_VALIDATOR = AnnotationValidator.builder() .name("dev.rollczi.litecommands.command.route.Route") - .attribute("name", AttributeType.STRING, CommandNameValidUtils::validateString) - .attribute("aliases", AttributeType.ARRAY, CommandNameValidUtils::validateArray) + .attribute("name", AttributeType.STRING, CommandNameValidUtils::validateString, new StringQuickFix()) + .attribute("aliases", AttributeType.ARRAY, CommandNameValidUtils::validateString, new StringQuickFix()) .build(); public RouteValidationInspection() { diff --git a/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/StringQuickFix.java b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/StringQuickFix.java new file mode 100644 index 0000000..e80e868 --- /dev/null +++ b/src/main/java/dev/rollczi/litecommands/intellijplugin/validation/annoation/implementations/StringQuickFix.java @@ -0,0 +1,24 @@ +package dev.rollczi.litecommands.intellijplugin.validation.annoation.implementations; + +import java.util.function.UnaryOperator; + +class StringQuickFix implements UnaryOperator { + + @Override + public String apply(String rawValue) { + if (rawValue.startsWith("\"") && rawValue.endsWith("\"")) { + rawValue = rawValue.substring(1, rawValue.length() - 1); + } + + String value = rawValue + .replaceAll(" +", " ") + .trim(); + + if (value.isEmpty()) { + value = "xyz"; + } + + return "\"" + value + "\""; + } + +} diff --git a/src/main/resources/inspectionDescriptions/ExecuteValidation.html b/src/main/resources/inspectionDescriptions/ExecuteValidation.html new file mode 100644 index 0000000..750d326 --- /dev/null +++ b/src/main/resources/inspectionDescriptions/ExecuteValidation.html @@ -0,0 +1,34 @@ + + +Invalid usage of @Execute annotation. +

+ Reports when attributes route or aliases are invalid. + For example, when route or aliases are defined, but string is empty. +

+

+ Examples of valid values: +

+ +
    +
  • @Execute(route = "add")
  • +
  • @Execute(route = "add user")
  • +
  • @Execute(route = "add user", aliases = "add u")
  • +
  • @Execute(route = "add user", aliases = { "add u", "sub -u" })
  • +
  • @Execute(route = "add user parent")
  • +
+ +

+ Examples of invalid values: +

+
    +
  • @Execute(route = "")
  • +
  • @Execute(route = "add", aliases = "")
  • +
  • @Execute(route = "add ")
  • +
  • @Execute(route = " add")
  • +
  • @Execute(route = " add ")
  • +
  • @Execute(route = "add", aliases = " ")
  • +
  • @Execute(route = " ", aliases = "add")
  • +
  • @Execute(route = "add user")
  • +
+ + \ No newline at end of file diff --git a/src/main/resources/inspectionDescriptions/LegacySection.html b/src/main/resources/inspectionDescriptions/LegacySection.html new file mode 100644 index 0000000..721a953 --- /dev/null +++ b/src/main/resources/inspectionDescriptions/LegacySection.html @@ -0,0 +1,21 @@ + + +Used annotation @Section is deprecated and should be replaced with @Route +

+ Reports all usages of @Section annotation in the project. +

+
+

+ Replace: +

+

+ @Section(route = "name", aliases = { "other", "more" }) +

+

+ to: +

+

+ @Route(name = "name", aliases = { "other", "more" }) +

+ + \ No newline at end of file diff --git a/src/main/resources/inspectionDescriptions/RouteValidation.html b/src/main/resources/inspectionDescriptions/RouteValidation.html new file mode 100644 index 0000000..d26381c --- /dev/null +++ b/src/main/resources/inspectionDescriptions/RouteValidation.html @@ -0,0 +1,36 @@ + + +Invalid usage of @Route annotation. +

+ Reports when attributes name or aliases are invalid. + For example, when name or aliases are defined, but string is empty. +

+ +

+ Examples of valid values: +

+ +
    +
  • @Route(name = "add")
  • +
  • @Route(name = "add user")
  • +
  • @Route(name = "add user", aliases = "add u")
  • +
  • @Route(name = "add user", aliases = { "add u", "sub -u" })
  • +
  • @Route(name = "add user parent")
  • +
+ +

+ Examples of invalid values: +

+ +
    +
  • @Route(name = "")
  • +
  • @Route(name = "add", aliases = "")
  • +
  • @Route(name = "add ")
  • +
  • @Route(name = " add")
  • +
  • @Route(name = " add ")
  • +
  • @Route(name = "add", aliases = " ")
  • +
  • @Route(name = " ", aliases = "add")
  • +
  • @Route(name = "add user")
  • +
+ + \ No newline at end of file