From c872aa389989de6c6022e5953883ac8e831cf67c Mon Sep 17 00:00:00 2001 From: relivio Date: Wed, 21 May 2025 14:02:44 +0200 Subject: [PATCH 1/6] GCI91 - Create rule 'Use filter before sort' in java context - V.E.R.T. --- .../java/checks/UseFilterBeforeSort.java | 21 +++++++++ .../creedengo/java/JavaCheckRegistrar.java | 3 +- .../java/checks/UseFilterBeforeSort.java | 43 +++++++++++++++++++ .../creedengo/java/creedengo_way_profile.json | 1 + src/test/files/UseFilterBeforeSort.java | 35 +++++++++++++++ .../java/checks/UseFilterBeforeSortTest.java | 14 ++++++ 6 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java create mode 100644 src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java create mode 100644 src/test/files/UseFilterBeforeSort.java create mode 100644 src/test/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSortTest.java diff --git a/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java new file mode 100644 index 00000000..ca930f67 --- /dev/null +++ b/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -0,0 +1,21 @@ +package org.greencodeinitiative.creedengo.java.checks; + +import java.util.List; +import java.util.stream.Collectors; + +class UseFilterBeforeSort { + UseFilterBeforeSort() { + } + + public void manipulateStream(final List list) { + list.stream() // Noncompliant {{Use 'filter' before 'sorted' for better efficiency.}} + .sorted() + .filter(s -> s.startsWith("A")) + .collect(Collectors.toList()); + + list.stream() // Compliant {{Use 'filter' before 'sorted' for better efficiency.}} + .filter(s -> s.startsWith("A")) + .sorted() + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/org/greencodeinitiative/creedengo/java/JavaCheckRegistrar.java b/src/main/java/org/greencodeinitiative/creedengo/java/JavaCheckRegistrar.java index 791f0cef..1f084e39 100644 --- a/src/main/java/org/greencodeinitiative/creedengo/java/JavaCheckRegistrar.java +++ b/src/main/java/org/greencodeinitiative/creedengo/java/JavaCheckRegistrar.java @@ -50,7 +50,8 @@ public class JavaCheckRegistrar implements CheckRegistrar { FreeResourcesOfAutoCloseableInterface.class, AvoidMultipleIfElseStatement.class, UseOptionalOrElseGetVsOrElse.class, - MakeNonReassignedVariablesConstants.class + MakeNonReassignedVariablesConstants.class, + UseFilterBeforeSort.class ); /** diff --git a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java new file mode 100644 index 00000000..2cc4c608 --- /dev/null +++ b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -0,0 +1,43 @@ +package org.greencodeinitiative.creedengo.java.checks; + +import org.sonar.check.Rule; +import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; +import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; +import org.sonar.plugins.java.api.tree.MethodInvocationTree; +import org.sonar.plugins.java.api.tree.Tree; + +import java.util.Arrays; +import java.util.List; + +@Rule(key = "GCI91") +public class UseFilterBeforeSort extends IssuableSubscriptionVisitor { + @Override + public List nodesToVisit() { + return Arrays.asList(Tree.Kind.METHOD_INVOCATION); + } + + @Override + public void visitNode(Tree tree) { + MethodInvocationTree methodInvocation = (MethodInvocationTree) tree; + + // On vérifie si c’est un appel à "sorted" + if (methodInvocation.methodSelect() instanceof MemberSelectExpressionTree) { + MemberSelectExpressionTree sortedSelect = (MemberSelectExpressionTree) methodInvocation.methodSelect(); + String sortedMethod = sortedSelect.identifier().name(); + + if ("sorted".equals(sortedMethod)) { + Tree methodCall = methodInvocation.parent(); + if (methodCall instanceof MemberSelectExpressionTree) { + MemberSelectExpressionTree filterCall = (MemberSelectExpressionTree) methodCall; + String filterMethod = filterCall.identifier().name(); + + if ("filter".equals(filterMethod)) { + // Mauvais ordre détecté : sorted().filter() au lieu de filter().sorted() + reportIssue(methodInvocation, "Use 'filter' before 'sorted' for better efficiency."); + } + } + } + } + } + +} diff --git a/src/main/resources/org/greencodeinitiative/creedengo/java/creedengo_way_profile.json b/src/main/resources/org/greencodeinitiative/creedengo/java/creedengo_way_profile.json index 059bf0f5..33fb1a7e 100644 --- a/src/main/resources/org/greencodeinitiative/creedengo/java/creedengo_way_profile.json +++ b/src/main/resources/org/greencodeinitiative/creedengo/java/creedengo_way_profile.json @@ -18,6 +18,7 @@ "GCI78", "GCI79", "GCI82", + "GCI91", "GCI94" ] } diff --git a/src/test/files/UseFilterBeforeSort.java b/src/test/files/UseFilterBeforeSort.java new file mode 100644 index 00000000..4f8e9f16 --- /dev/null +++ b/src/test/files/UseFilterBeforeSort.java @@ -0,0 +1,35 @@ +/* + * creedengo - Java language - Provides rules to reduce the environmental footprint of your Java programs + * Copyright © 2024 Green Code Initiative (https://green-code-initiative.org/) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.greencodeinitiative.creedengo.java.checks; + +class UseFilterBeforeSort { + UseFilterBeforeSort() { + } + + public void manipulateStream(List list) { + list.stream() // Noncompliant {{Use 'filter' before 'sorted' for better efficiency.}} + .sorted() + .filter(s -> s.startsWith("A")) + .collect(Collectors.toList()); + + list.stream() // Compliant {{Use 'filter' before 'sorted' for better efficiency.}} + .filter(s -> s.startsWith("A")) + .sorted() + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/test/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSortTest.java b/src/test/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSortTest.java new file mode 100644 index 00000000..4d9a53d5 --- /dev/null +++ b/src/test/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSortTest.java @@ -0,0 +1,14 @@ +package org.greencodeinitiative.creedengo.java.checks; + +import org.junit.jupiter.api.Test; +import org.sonar.java.checks.verifier.CheckVerifier; + +public class UseFilterBeforeSortTest { + @Test + void testHasIssues() { + CheckVerifier.newVerifier() + .onFile("src/test/files/UseFilterBeforeSort.java") + .withCheck(new UseFilterBeforeSort()) + .verifyIssues(); + } +} From 60dccd68248438122e46f6645e8f8c86a9720b27 Mon Sep 17 00:00:00 2001 From: relivio Date: Sat, 24 May 2025 15:11:51 +0200 Subject: [PATCH 2/6] GCI91 - Modification of Changelog file and add a new test to verify also if methods aren't chained --- CHANGELOG.md | 2 + .../java/integration/tests/GCIRulesIT.java | 11 +++ .../java/checks/UseFilterBeforeSort.java | 80 +++++++++++++------ src/test/files/UseFilterBeforeSort.java | 6 ++ 4 files changed, 76 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23418684..10be3725 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [GCI91](https://github.com/green-code-initiative/creedengo-java/pull/111) New rule to detect if a sort method is called before a filter in stream + ### Changed - compatibility updates for SonarQube 25.5.0 diff --git a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java index dfd7957c..0a5f2115 100644 --- a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java +++ b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java @@ -548,4 +548,15 @@ void testGCI94() { checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, SEVERITY, TYPE, EFFORT_1MIN); } + @Test + void testGCI91() { + String filePath = "src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java"; + String ruleId = "creedengo-java:GCI91"; + String ruleMsg = "Use 'filter' before 'sorted' for better efficiency."; + int[] startLines = new int[]{25}; + int[] endLines = new int[]{25}; + + checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, SEVERITY, TYPE, EFFORT_5MIN); + } + } diff --git a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java index 2cc4c608..0aca4971 100644 --- a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java +++ b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -2,42 +2,76 @@ import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; -import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; -import org.sonar.plugins.java.api.tree.MethodInvocationTree; -import org.sonar.plugins.java.api.tree.Tree; +import org.sonar.plugins.java.api.tree.*; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; @Rule(key = "GCI91") public class UseFilterBeforeSort extends IssuableSubscriptionVisitor { @Override public List nodesToVisit() { - return Arrays.asList(Tree.Kind.METHOD_INVOCATION); + return Collections.singletonList(Tree.Kind.METHOD_INVOCATION); } @Override public void visitNode(Tree tree) { - MethodInvocationTree methodInvocation = (MethodInvocationTree) tree; - - // On vérifie si c’est un appel à "sorted" - if (methodInvocation.methodSelect() instanceof MemberSelectExpressionTree) { - MemberSelectExpressionTree sortedSelect = (MemberSelectExpressionTree) methodInvocation.methodSelect(); - String sortedMethod = sortedSelect.identifier().name(); - - if ("sorted".equals(sortedMethod)) { - Tree methodCall = methodInvocation.parent(); - if (methodCall instanceof MemberSelectExpressionTree) { - MemberSelectExpressionTree filterCall = (MemberSelectExpressionTree) methodCall; - String filterMethod = filterCall.identifier().name(); - - if ("filter".equals(filterMethod)) { - // Mauvais ordre détecté : sorted().filter() au lieu de filter().sorted() - reportIssue(methodInvocation, "Use 'filter' before 'sorted' for better efficiency."); - } - } + if (tree instanceof MethodInvocationTree) { + MethodInvocationTree mit = (MethodInvocationTree) tree; + + if (!isTerminalOperation(mit)) { + return; // On ignore les appels intermédiaires (filter, sorted, etc.) + } + + List methodChain = extractChainedMethodNames(mit); + + int sortedIndex = methodChain.indexOf("sorted"); + int filterIndex = methodChain.indexOf("filter"); + + if (sortedIndex != -1 && filterIndex != -1 && sortedIndex < filterIndex) { + reportIssue(tree, "Use 'filter' before 'sorted' for better efficiency."); } } } + private List extractChainedMethodNames(MethodInvocationTree terminalInvocation) { + List methodNames = new ArrayList<>(); + ExpressionTree current = terminalInvocation; + + while (current instanceof MethodInvocationTree) { + MethodInvocationTree methodCall = (MethodInvocationTree) current; + ExpressionTree methodSelect = methodCall.methodSelect(); + + if (methodSelect instanceof MemberSelectExpressionTree) { + MemberSelectExpressionTree memberSelect = (MemberSelectExpressionTree) methodSelect; + methodNames.add(memberSelect.identifier().name()); + current = memberSelect.expression(); // remonter à l'appel précédent + } else { + break; + } + } + + Collections.reverse(methodNames); // pour avoir l’ordre stream → ... → collect + return methodNames; + } + + private boolean isTerminalOperation(MethodInvocationTree tree) { + if (!(tree.methodSelect() instanceof MemberSelectExpressionTree)) { + return false; + } + String methodName = ((MemberSelectExpressionTree) tree.methodSelect()).identifier().name(); + // Ajouter ici tous les terminaux connus + return "collect".equals(methodName) + || "forEach".equals(methodName) + || "reduce".equals(methodName) + || "count".equals(methodName) + || "toArray".equals(methodName) + || "anyMatch".equals(methodName) + || "allMatch".equals(methodName) + || "noneMatch".equals(methodName) + || "findFirst".equals(methodName) + || "findAny".equals(methodName); + } + } diff --git a/src/test/files/UseFilterBeforeSort.java b/src/test/files/UseFilterBeforeSort.java index 4f8e9f16..4f11e22b 100644 --- a/src/test/files/UseFilterBeforeSort.java +++ b/src/test/files/UseFilterBeforeSort.java @@ -27,6 +27,12 @@ public void manipulateStream(List list) { .filter(s -> s.startsWith("A")) .collect(Collectors.toList()); + list.stream() // Noncompliant {{Use 'filter' before 'sorted' for better efficiency.}} + .sorted() + .otherMethod() + .filter(s -> s.startsWith("A")) + .collect(Collectors.toList()); + list.stream() // Compliant {{Use 'filter' before 'sorted' for better efficiency.}} .filter(s -> s.startsWith("A")) .sorted() From 2f4bf3f92029a8a44f394bc44ba6c7fede525471 Mon Sep 17 00:00:00 2001 From: relivio Date: Fri, 4 Jul 2025 22:53:51 +0200 Subject: [PATCH 3/6] GCI91 - Put comments in english and add the third test in integration test project --- pom.xml | 6 +++++- .../creedengo/java/checks/UseFilterBeforeSort.java | 6 ++++++ .../creedengo/java/checks/UseFilterBeforeSort.java | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index ae43a190..7fb850f0 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 1.8 - 2.2.2 + main-SNAPSHOT https://repo1.maven.org/maven2 @@ -231,6 +231,10 @@ org.apache.maven.plugins maven-compiler-plugin 3.13.0 + + 16 + 16 + org.apache.maven.plugins diff --git a/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java index ca930f67..18b9c321 100644 --- a/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java +++ b/src/it/test-projects/creedengo-java-plugin-test-project/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -13,6 +13,12 @@ public void manipulateStream(final List list) { .filter(s -> s.startsWith("A")) .collect(Collectors.toList()); + list.stream() // Noncompliant {{Use 'filter' before 'sorted' for better efficiency.}} + .sorted() + .map(element -> element.toString()) + .filter(s -> s.startsWith("A")) + .collect(Collectors.toList()); + list.stream() // Compliant {{Use 'filter' before 'sorted' for better efficiency.}} .filter(s -> s.startsWith("A")) .sorted() diff --git a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java index 0aca4971..c74b3b0c 100644 --- a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java +++ b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -21,7 +21,7 @@ public void visitNode(Tree tree) { MethodInvocationTree mit = (MethodInvocationTree) tree; if (!isTerminalOperation(mit)) { - return; // On ignore les appels intermédiaires (filter, sorted, etc.) + return; // Ignoring intermediate steps (filter, sorted, etc.) } List methodChain = extractChainedMethodNames(mit); @@ -46,7 +46,7 @@ private List extractChainedMethodNames(MethodInvocationTree terminalInvo if (methodSelect instanceof MemberSelectExpressionTree) { MemberSelectExpressionTree memberSelect = (MemberSelectExpressionTree) methodSelect; methodNames.add(memberSelect.identifier().name()); - current = memberSelect.expression(); // remonter à l'appel précédent + current = memberSelect.expression(); // Go to the previous method } else { break; } From bc4386d601818f2efc7efbb706863588e5883116 Mon Sep 17 00:00:00 2001 From: relivio Date: Mon, 4 Aug 2025 14:36:17 +0200 Subject: [PATCH 4/6] GCI91 - Correction from Copilot code review (Comment in french, not all compliant test, necessary imports) --- pom.xml | 2 +- .../creedengo/java/integration/tests/GCIRulesIT.java | 4 ++-- .../creedengo/java/checks/UseFilterBeforeSort.java | 2 +- src/test/files/UseFilterBeforeSort.java | 3 +++ 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 7fb850f0..014b03b9 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 1.8 - main-SNAPSHOT + 2.2.3 https://repo1.maven.org/maven2 diff --git a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java index d4db86b6..e41145c4 100644 --- a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java +++ b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java @@ -553,8 +553,8 @@ void testGCI91() { String filePath = "src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java"; String ruleId = "creedengo-java:GCI91"; String ruleMsg = "Use 'filter' before 'sorted' for better efficiency."; - int[] startLines = new int[]{25}; - int[] endLines = new int[]{25}; + int[] startLines = new int[]{25,30}; + int[] endLines = new int[]{25, 30}; checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, SEVERITY, TYPE, EFFORT_5MIN); } diff --git a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java index c74b3b0c..8b6b04fe 100644 --- a/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java +++ b/src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java @@ -52,7 +52,7 @@ private List extractChainedMethodNames(MethodInvocationTree terminalInvo } } - Collections.reverse(methodNames); // pour avoir l’ordre stream → ... → collect + Collections.reverse(methodNames); // Reverse to get right order in collection like stream → ... → collect return methodNames; } diff --git a/src/test/files/UseFilterBeforeSort.java b/src/test/files/UseFilterBeforeSort.java index 4f11e22b..1b5712ce 100644 --- a/src/test/files/UseFilterBeforeSort.java +++ b/src/test/files/UseFilterBeforeSort.java @@ -17,6 +17,9 @@ */ package org.greencodeinitiative.creedengo.java.checks; +import java.util.List; +import java.util.stream.Collectors; + class UseFilterBeforeSort { UseFilterBeforeSort() { } From fdca436cf86e2b8322939781766890f61df800d2 Mon Sep 17 00:00:00 2001 From: relivio Date: Mon, 4 Aug 2025 15:58:10 +0200 Subject: [PATCH 5/6] GCI91 - Correction integration test --- .../creedengo/java/integration/tests/GCIRulesIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java index c22dfe6f..3dbd1a56 100644 --- a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java +++ b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java @@ -553,8 +553,8 @@ void testGCI91() { String filePath = "src/main/java/org/greencodeinitiative/creedengo/java/checks/UseFilterBeforeSort.java"; String ruleId = "creedengo-java:GCI91"; String ruleMsg = "Use 'filter' before 'sorted' for better efficiency."; - int[] startLines = new int[]{25,30}; - int[] endLines = new int[]{25, 30}; + int[] startLines = new int[]{11,16}; + int[] endLines = new int[]{14, 20}; checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, SEVERITY, TYPE, EFFORT_5MIN); } From a70224e44a5eb3f99dc554d3510327297136b936 Mon Sep 17 00:00:00 2001 From: relivio Date: Mon, 4 Aug 2025 16:23:44 +0200 Subject: [PATCH 6/6] GCI91 - Use MAJOR severity - To check --- .../creedengo/java/integration/tests/GCIRulesIT.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java index 3dbd1a56..064272ab 100644 --- a/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java +++ b/src/it/java/org/greencodeinitiative/creedengo/java/integration/tests/GCIRulesIT.java @@ -1,6 +1,7 @@ package org.greencodeinitiative.creedengo.java.integration.tests; import org.junit.jupiter.api.Test; +import org.sonarqube.ws.Common; import org.sonarqube.ws.Issues; import org.sonarqube.ws.Measures; @@ -556,7 +557,7 @@ void testGCI91() { int[] startLines = new int[]{11,16}; int[] endLines = new int[]{14, 20}; - checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, SEVERITY, TYPE, EFFORT_5MIN); + checkIssuesForFile(filePath, ruleId, ruleMsg, startLines, endLines, Common.Severity.MAJOR, TYPE, EFFORT_5MIN); } }