From e10a78b2bdfc3c6227e07383d69276951de49af3 Mon Sep 17 00:00:00 2001 From: percyashu Date: Fri, 8 May 2020 12:15:49 +0100 Subject: [PATCH] FINERACT-822 Integrating Error Prone --- fineract-provider/build.gradle | 87 +++++++++++++++++++ .../fineract/integrationtests/StaffTest.java | 8 ++ .../integrationtests/common/OfficeDomain.java | 7 +- ...bleInstallmentsDecliningBalanceHelper.java | 3 +- .../VariableInstallmentsFlatHelper.java | 2 +- .../interoperation/util/MathUtil.java | 10 ++- .../floatingrates/data/FloatingRateDTO.java | 2 +- .../data/FloatingRatePeriodData.java | 2 +- ...WritePlatformServiceJpaRepositoryImpl.java | 4 +- 9 files changed, 113 insertions(+), 12 deletions(-) diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle index edc147e1f..1ac1add2b 100644 --- a/fineract-provider/build.gradle +++ b/fineract-provider/build.gradle @@ -47,6 +47,7 @@ buildscript { classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.2.0" classpath "gradle.plugin.com.github.andygoossens:gradle-modernizer-plugin:1.3.0" classpath "gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:2.2.2" + classpath "net.ltgt.gradle:gradle-errorprone-plugin:1.1.1" } } @@ -67,6 +68,7 @@ apply plugin: 'checkstyle' apply plugin: 'com.github.andygoossens.gradle-modernizer-plugin' apply plugin: 'jacoco' apply plugin: "com.gorylenko.gradle-git-properties" +apply plugin: "net.ltgt.errorprone" // apply plugin: 'pmd' dependencyManagement { @@ -278,6 +280,88 @@ configurations { tasks.withType(JavaCompile) { options.compilerArgs += ["-Xlint:unchecked","-Xlint:cast","-Werror"] // TODO FINERACT-959 (gradually) enable -Xlint:all (see "javac -help -X") options.deprecation = true + options.errorprone { + disableWarningsInGeneratedCode = true + //Todo Remove necessary checks from this list + disable("UnusedVariable", + "VariableNameSameAsType", + "InconsistentCapitalization", + "UnnecessaryParentheses", + "ClassCanBeStatic", + "MissingCasesInEnumSwitch", + "CompareToZero", + "OperatorPrecedence", + "MixedMutabilityReturnType", + "SameNameButDifferent", + "EqualsGetClass", + "ReferenceEquality", + "StringSplitter", + "MissingOverride", + "BigDecimalEquals", + "ImmutableEnumChecker", + "EqualsUnsafeCast", + "AssertEqualsArgumentOrderChecker", + "BoxedPrimitiveEquality", + "BadImport", + "UnusedMethod", + "ModifiedButNotUsed", + "ArgumentSelectionDefectChecker", + "JodaPlusMinusLong", + "TypeParameterUnusedInFormals", + "DoubleBraceInitialization", + "UnusedNestedClass", + "UndefinedEquals", + "JdkObsolete", + "OperatorPrecedence", + "NarrowingCompoundAssignment" + ) + //TODO gradually enable these checks + error( "DefaultCharset", +// "ReturnMissingNullable", +// "InconsistentOverloads", +// "MethodCanBeStatic", +// "Var", +// "ConstantField", +// "EmptySetMultibindingContributions", +// "MixedArrayDimensions", +// "MultipleTopLevelClasses", +// "MultiVariableDeclaration", +// "PackageLocation", +// "PrivateConstructorForNoninstantiableModule", +// "RemoveUnusedImports", +// "UnnecessaryStaticImport", +// "UseBinds", +// "WildcardImport", +// "FutureReturnValueIgnored", +// "IntLongMath", +// "FloatCast", +// "ClassNewInstance", +// "ConstructorInvokesOverridable", +// "ThreeLetterTimeZoneID", +// "UnsafeFinalization", +// "MutableMethodReturnType", +// "SynchronizeOnNonFinalField", +// "WaitNotInLoop", +// "SwitchDefault", +// "ReachabilityFenceUsage", +// "BoxedPrimitiveConstructor", +// "InjectOnConstructorOfAbstractClass", +//// "StringSplitter", +// "UnnecessaryDefaultInEnumSwitch", +// "StreamResourceLeak", +//// "InconsistentCapitalization", +// "TruthIncompatibleType", +// "ByteBufferBackingArray", +// "OrphanedFormatString", +// "CatchAndPrintStackTrace", +// "VarTypeName", +// "ObjectToString", +// "AssertThrowsMultipleStatements", +// "FieldCanBeFinal" + ) + } + options.compilerArgs +=["-Xmaxwarns",1500,"-Xmaxerrs",1500] + } apply from: 'dependencies.gradle' @@ -398,6 +482,9 @@ dependencies { tomcat "org.apache.tomcat:tomcat:9.0.34@zip" } +dependencies { + errorprone "com.google.errorprone:error_prone_core:2.3.4" +} cargo { containerId "tomcat9x" diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/StaffTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/StaffTest.java index 47df585ae..f7467ec02 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/StaffTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/StaffTest.java @@ -31,6 +31,7 @@ import org.apache.fineract.integrationtests.common.Utils; import org.apache.fineract.integrationtests.common.organisation.StaffHelper; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; public class StaffTest { @@ -91,6 +92,8 @@ public class StaffTest { StaffHelper.createStaffWithJson(requestSpec, responseSpecForValidationError, new Gson().toJson(map)); } + @Test + @Ignore //TODO FINERACT-1005 public void testStaffCreateMaxNameLength() { final HashMap map = new HashMap<>(); @@ -102,6 +105,7 @@ public class StaffTest { StaffHelper.createStaffWithJson(requestSpec, responseSpec, new Gson().toJson(map)); } + @Test public void testStaffCreateExternalIdValidationError() { final HashMap map = new HashMap<>(); @@ -183,6 +187,8 @@ public class StaffTest { Assert.assertEquals(mobileNo, changes.get("mobileNo")); } + @Test + @Ignore // TODO FINERACT- 1005 public void testStaffUpdateLongExternalIdError() { final HashMap map = new HashMap<>(); map.put("externalId", Utils.randomStringGenerator("EXT", 98)); @@ -190,6 +196,8 @@ public class StaffTest { StaffHelper.updateStaff(requestSpec, responseSpecForValidationError, 1, map); } + @Test + @Ignore // TODO FINERACT- 1005 public void testStaffUpdateWrongActiveState() { final HashMap map = new HashMap<>(); map.put("isActive", "xyz"); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/OfficeDomain.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/OfficeDomain.java index 63647202c..89d907b96 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/OfficeDomain.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/OfficeDomain.java @@ -19,6 +19,7 @@ package org.apache.fineract.integrationtests.common; import com.google.gson.Gson; +import java.util.Arrays; public class OfficeDomain { @@ -127,7 +128,7 @@ public class OfficeDomain { hash += this.externalId.hashCode(); } if (this.openingDate != null) { - hash += this.openingDate.hashCode(); + hash += Arrays.hashCode(this.openingDate); } if (this.hierarchy != null) { hash += this.hierarchy.hashCode(); @@ -151,11 +152,11 @@ public class OfficeDomain { if (this.id == od.getId() && this.name.equals(od.getName()) && this.nameDecorated.equals(od.getName()) && this.externalId.equals(od.getExternalId()) - && this.openingDate.equals(od.getOpeningDate()) + && Arrays.equals(this.openingDate, od.getOpeningDate()) && this.hierarchy.equals(od.getHierarchy())) { return true; } return false; } -} \ No newline at end of file +} diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsDecliningBalanceHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsDecliningBalanceHelper.java index 4ab6249ce..29750d90f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsDecliningBalanceHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsDecliningBalanceHelper.java @@ -284,13 +284,14 @@ public class VariableInstallmentsDecliningBalanceHelper { } return toReturn; } + public static String formatDate(ArrayList list) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, (int) list.get(0)); cal.set(Calendar.MONTH, (int) list.get(1) - 1); cal.set(Calendar.DAY_OF_MONTH, (int) list.get(2)); Date date = cal.getTime(); - DateFormat requiredFormat = new SimpleDateFormat("dd MMMM YYYY"); + DateFormat requiredFormat = new SimpleDateFormat("dd MMMM yyyy"); return requiredFormat.format(date); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsFlatHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsFlatHelper.java index acedbf37f..6ff1b6886 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsFlatHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsFlatHelper.java @@ -209,7 +209,7 @@ public class VariableInstallmentsFlatHelper { cal.set(Calendar.MONTH, (int) list.get(1) - 1); cal.set(Calendar.DAY_OF_MONTH, (int) list.get(2)); Date date = cal.getTime(); - DateFormat requiredFormat = new SimpleDateFormat("dd MMMM YYYY"); + DateFormat requiredFormat = new SimpleDateFormat("dd MMMM yyyy"); return requiredFormat.format(date); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/util/MathUtil.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/util/MathUtil.java index adf64d618..b99f69d63 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/util/MathUtil.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/util/MathUtil.java @@ -88,9 +88,13 @@ public class MathUtil { /** @return calculates minimum of the two values considering null values * @param notNull if true then null parameter is omitted, otherwise returns null */ public static Long min(Long first, Long second, boolean notNull) { - return first == null - ? (notNull ? second : null) - : second == null ? (notNull ? first : null) : Math.min(first, second); + if (first == null){ + return notNull ? second : null; + } + if (second == null) { + return notNull ? first : null; + } + return Math.min(first, second); } /** @return calculates minimum of the values considering null values diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java index 0f50baa28..e62ef0d5d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java @@ -42,7 +42,7 @@ public class FloatingRateDTO { public BigDecimal fetchBaseRate(LocalDate date) { BigDecimal rate = null; for (FloatingRatePeriodData periodData : this.baseLendingRatePeriods) { - final LocalDate periodFromDate = new LocalDate(periodData.getFromDate()); + final LocalDate periodFromDate = periodData.getFromDate(); if (periodFromDate.isBefore(date) || periodFromDate.isEqual(date)) { rate = periodData.getInterestRate(); break; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java index 13eca97b4..e6d2e8982 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java @@ -62,7 +62,7 @@ public class FloatingRatePeriodData implements } public LocalDate getFromDateAsLocalDate() { - return new LocalDate(this.fromDate); + return this.fromDate; } public BigDecimal getInterestRate() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java index 7eb4a63a4..979c07469 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java @@ -1657,7 +1657,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi for (SavingsAccountTransaction transaction : savingsAccount.getTransactions()) { if ((transaction.getTransactionLocalDate().isEqual(transferDate) - && transaction.getTransactionLocalDate().isAfter(new LocalDate(transferDate))) + && transaction.getTransactionLocalDate().isAfter(transferDate)) || transaction.getTransactionLocalDate().isAfter(transferDate)) { throw new GeneralPlatformDomainRuleException(TransferApiConstants.transferClientSavingsException, TransferApiConstants.transferClientSavingsException, new LocalDate(transaction.createdDate()), @@ -1667,4 +1667,4 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } } -} \ No newline at end of file +}