From 7c91114252b1cfe6bd80e5ed1d8b10ec668da431 Mon Sep 17 00:00:00 2001 From: Michael Gumowski Date: Mon, 29 Jan 2018 09:21:03 +0100 Subject: [PATCH] SONARJAVA-2628 Drop handling of @ParametersAreNonNullByDefault --- .../src/test/resources/guava/squid-S2637.json | 104 ---- .../resources/sonar-server/squid-S2637.json | 481 ------------------ .../java/se/checks/NonNullSetToNullCheck.java | 16 +- .../test/files/se/NonNullSetToNullCheck.java | 18 +- .../annotations/ClassAnnotationsNonNull.java | 4 +- .../annotations/MethodAnnotationsNonNull.java | 4 +- .../PackageAnnotationsNonNull.java | 4 +- 7 files changed, 23 insertions(+), 608 deletions(-) delete mode 100644 its/ruling/src/test/resources/guava/squid-S2637.json delete mode 100644 its/ruling/src/test/resources/sonar-server/squid-S2637.json diff --git a/its/ruling/src/test/resources/guava/squid-S2637.json b/its/ruling/src/test/resources/guava/squid-S2637.json deleted file mode 100644 index ff23e38a275..00000000000 --- a/its/ruling/src/test/resources/guava/squid-S2637.json +++ /dev/null @@ -1,104 +0,0 @@ -{ -'com.google.guava:guava:src/com/google/common/base/Converter.java':[ -156, -166, -], -'com.google.guava:guava:src/com/google/common/base/Joiner.java':[ -133, -177, -215, -], -'com.google.guava:guava:src/com/google/common/base/MoreObjects.java':[ -56, -], -'com.google.guava:guava:src/com/google/common/base/Preconditions.java':[ -146, -199, -310, -353, -], -'com.google.guava:guava:src/com/google/common/cache/LongAdder.java':[ -77, -], -'com.google.guava:guava:src/com/google/common/collect/AbstractBiMap.java':[ -136, -149, -], -'com.google.guava:guava:src/com/google/common/collect/AbstractSortedMultiset.java':[ -111, -111, -], -'com.google.guava:guava:src/com/google/common/collect/AbstractTable.java':[ -39, -44, -70, -92, -], -'com.google.guava:guava:src/com/google/common/collect/FilteredEntryMultimap.java':[ -84, -188, -204, -366, -], -'com.google.guava:guava:src/com/google/common/collect/FilteredKeyListMultimap.java':[ -50, -], -'com.google.guava:guava:src/com/google/common/collect/ForwardingMap.java':[ -289, -], -'com.google.guava:guava:src/com/google/common/collect/ForwardingMultiset.java':[ -114, -], -'com.google.guava:guava:src/com/google/common/collect/ForwardingSortedMap.java':[ -138, -], -'com.google.guava:guava:src/com/google/common/collect/ForwardingSortedSet.java':[ -119, -146, -], -'com.google.guava:guava:src/com/google/common/collect/HashBiMap.java':[ -290, -329, -], -'com.google.guava:guava:src/com/google/common/collect/ImmutableMap.java':[ -601, -], -'com.google.guava:guava:src/com/google/common/collect/ImmutableSetMultimap.java':[ -302, -], -'com.google.guava:guava:src/com/google/common/collect/ImmutableSortedMap.java':[ -510, -], -'com.google.guava:guava:src/com/google/common/collect/RegularImmutableBiMap.java':[ -98, -], -'com.google.guava:guava:src/com/google/common/collect/SortedLists.java':[ -277, -], -'com.google.guava:guava:src/com/google/common/collect/Tables.java':[ -484, -515, -], -'com.google.guava:guava:src/com/google/common/collect/TreeMultiset.java':[ -236, -583, -597, -675, -692, -729, -750, -], -'com.google.guava:guava:src/com/google/common/collect/TreeRangeMap.java':[ -550, -], -'com.google.guava:guava:src/com/google/common/reflect/TypeToken.java':[ -1033, -], -'com.google.guava:guava:src/com/google/common/util/concurrent/AbstractFuture.java':[ -512, -611, -632, -665, -668, -], -} diff --git a/its/ruling/src/test/resources/sonar-server/squid-S2637.json b/its/ruling/src/test/resources/sonar-server/squid-S2637.json deleted file mode 100644 index d9324c10456..00000000000 --- a/its/ruling/src/test/resources/sonar-server/squid-S2637.json +++ /dev/null @@ -1,481 +0,0 @@ -{ -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/ce/queue/CeQueueImpl.java':[ -102, -104, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/app/TomcatContexts.java':[ -62, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/OAuth2CallbackFilter.java':[ -99, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/ActivityAction.java':[ -166, -176, -190, -216, -252, -257, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/SubmitAction.java':[ -101, -106, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/TaskFormatter.java':[ -69, -83, -98, -123, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ComponentFinder.java':[ -113, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ws/AppAction.java':[ -126, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ws/ProjectMeasuresQueryFactory.java':[ -130, -136, -144, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ws/SearchAction.java':[ -147, -148, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java':[ -264, -298, -301, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/api/posttask/ConditionToCondition.java':[ -54, -55, -57, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java':[ -124, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentRootBuilder.java':[ -113, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/duplication/IntegrateCrossProjectDuplications.java':[ -71, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/filemove/FileMoveDetectionStep.java':[ -194, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java':[ -83, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/NewEffortCalculator.java':[ -84, -88, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/measure/BestValueOptimization.java':[ -62, -63, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/measure/MeasureDtoToMeasure.java':[ -42, -44, -46, -48, -120, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/qualitygate/EvaluationResultTextConverterImpl.java':[ -97, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/qualitymodel/RatingSettings.java':[ -126, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/ComputeMeasureVariationsStep.java':[ -154, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/CustomMeasuresCopyStep.java':[ -96, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadCrossProjectDuplicationsRepositoryStep.java':[ -122, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistComponentsStep.java':[ -240, -242, -243, -245, -292, -293, -306, -307, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/debt/DebtRulesXMLImporter.java':[ -166, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/email/ws/SendAction.java':[ -76, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/favorite/FavoriteFinder.java':[ -57, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/favorite/ws/SearchAction.java':[ -90, -90, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssueUpdater.java':[ -58, -59, -71, -72, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java':[ -77, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcher.java':[ -65, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcher.java':[ -62, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/NewIssuesStatistics.java':[ -104, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchAction.java':[ -344, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchResponseFormat.java':[ -173, -270, -272, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchResponseLoader.java':[ -210, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetSeverityAction.java':[ -106, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetTypeAction.java':[ -106, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/custom/ws/CreateAction.java':[ -118, -122, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/custom/ws/SearchAction.java':[ -109, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/custom/ws/UpdateAction.java':[ -93, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/ComponentAction.java':[ -154, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/ComponentDtoToWsComponent.java':[ -61, -64, -67, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java':[ -215, -217, -218, -230, -236, -250, -267, -268, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/ComponentTreeDataLoader.java':[ -189, -263, -265, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/ComponentTreeSort.java':[ -73, -117, -125, -127, -129, -138, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/MetricDtoToWsMetric.java':[ -38, -40, -48, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/SearchAction.java':[ -125, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java':[ -79, -80, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/metric/DefaultMetricFinder.java':[ -101, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/metric/ws/CreateAction.java':[ -108, -173, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/metric/ws/UpdateAction.java':[ -170, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/notification/email/AlertsEmailTemplate.java':[ -58, -59, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/notification/ws/AddAction.java':[ -128, -135, -135, -140, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/notification/ws/ListAction.java':[ -123, -123, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/notification/ws/RemoveAction.java':[ -127, -134, -134, -138, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/organization/ws/CreateAction.java':[ -105, -106, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/organization/ws/SearchMyOrganizationsAction.java':[ -64, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/organization/ws/UpdateAction.java':[ -98, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/GroupPermissionChanger.java':[ -151, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/PermissionWsSupport.java':[ -97, -98, -103, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/SearchProjectPermissionsDataLoader.java':[ -70, -71, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/template/SetDefaultTemplateAction.java':[ -100, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/BackendCleanup.java':[ -116, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/monitoring/SettingsMonitor.java':[ -54, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/plugins/PluginReferentialMetadataConverter.java':[ -64, -65, -66, -67, -68, -69, -70, -71, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/plugins/ServerPluginRepository.java':[ -283, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/CreateAction.java':[ -126, -127, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/GhostsAction.java':[ -115, -116, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/IndexAction.java':[ -125, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/ProvisionedAction.java':[ -106, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/SearchAction.java':[ -143, -144, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/SearchMyProjectsAction.java':[ -93, -94, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/SearchMyProjectsDataLoader.java':[ -88, -88, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java':[ -165, -167, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/QualityGateConditionsUpdater.java':[ -207, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java':[ -99, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/GetByProjectAction.java':[ -81, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/ProjectStatusAction.java':[ -128, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/QualityGateDetailsFormatter.java':[ -78, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/SelectAction.java':[ -110, -111, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java':[ -93, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/QProfileBackuperImpl.java':[ -164, -199, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/RuleActivator.java':[ -254, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/RuleActivatorContextFactory.java':[ -63, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/ws/InheritanceAction.java':[ -105, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java':[ -105, -135, -140, -142, -144, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java':[ -135, -138, -176, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/root/ws/SearchAction.java':[ -86, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java':[ -96, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/RegisterRules.java':[ -229, -232, -282, -286, -423, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/RuleCreator.java':[ -165, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/RuleUpdater.java':[ -216, -303, -305, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/index/RuleIndex.java':[ -202, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/ws/CreateAction.java':[ -170, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/ws/RuleMapper.java':[ -100, -136, -137, -265, -268, -274, -286, -294, -358, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/ws/SearchAction.java':[ -343, -345, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/ws/UpdateAction.java':[ -278, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/setting/ws/ResetAction.java':[ -123, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/setting/ws/ValuesAction.java':[ -127, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/source/ws/ShowAction.java':[ -93, -96, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/startup/RegisterMetrics.java':[ -150, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/test/ws/ListAction.java':[ -166, -170, -173, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ui/ws/ComponentAction.java':[ -191, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/ChangePasswordAction.java':[ -100, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/CreateAction.java':[ -150, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/CurrentAction.java':[ -72, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/GroupsAction.java':[ -133, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/SearchAction.java':[ -117, -125, -125, -185, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/SkipOnboardingTutorialAction.java':[ -59, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/user/ws/UserJsonWriter.java':[ -72, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usergroups/ws/GroupWsSupport.java':[ -131, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usertoken/ws/GenerateAction.java':[ -115, -120, -128, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usertoken/ws/RevokeAction.java':[ -72, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usertoken/ws/SearchAction.java':[ -75, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/util/ClassLoaderUtils.java':[ -95, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/webhook/ws/WebhookDeliveriesAction.java':[ -100, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/webhook/ws/WebhookWsSupport.java':[ -45, -48, -55, -57, -], -'org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ws/JsonWriterUtils.java':[ -41, -], -} diff --git a/java-frontend/src/main/java/org/sonar/java/se/checks/NonNullSetToNullCheck.java b/java-frontend/src/main/java/org/sonar/java/se/checks/NonNullSetToNullCheck.java index a42f3c62129..3bbaf3e47d9 100644 --- a/java-frontend/src/main/java/org/sonar/java/se/checks/NonNullSetToNullCheck.java +++ b/java-frontend/src/main/java/org/sonar/java/se/checks/NonNullSetToNullCheck.java @@ -51,10 +51,7 @@ import org.sonar.plugins.java.api.tree.Tree; import org.sonar.plugins.java.api.tree.VariableTree; -import static org.sonar.java.se.ExplodedGraphWalker.EQUALS_METHODS; -import static org.sonar.java.se.NullableAnnotationUtils.isAnnotatedNullable; import static org.sonar.java.se.NullableAnnotationUtils.nonNullAnnotation; -import static org.sonar.java.se.NullableAnnotationUtils.nonNullAnnotationOnParameters; @Rule(key = "S2637") public class NonNullSetToNullCheck extends SECheck { @@ -212,7 +209,6 @@ public void visitMethodInvocation(MethodInvocationTree syntaxTree) { private void checkNullArguments(Tree syntaxTree, JavaSymbol.MethodJavaSymbol symbol, List argumentValues) { Scope parameters = symbol.getParameters(); - String methodAnnotatedParameterNonNull = nonNullAnnotationOnParameters(symbol); if (parameters != null) { List scopeSymbols = parameters.scopeSymbols(); int parametersToTest = argumentValues.size(); @@ -221,29 +217,21 @@ private void checkNullArguments(Tree syntaxTree, JavaSymbol.MethodJavaSymbol sym parametersToTest = scopeSymbols.size() - 1; } for (int i = 0; i < parametersToTest; i++) { - checkNullArgument(syntaxTree, symbol, scopeSymbols.get(i), argumentValues.get(i), i, methodAnnotatedParameterNonNull); + checkNullArgument(syntaxTree, symbol, scopeSymbols.get(i), argumentValues.get(i), i); } } } - private void checkNullArgument(Tree syntaxTree, JavaSymbol.MethodJavaSymbol symbol, JavaSymbol argumentSymbol, SymbolicValue argumentValue, int index, - @Nullable String methodAnnotatedParameterNonNull) { + private void checkNullArgument(Tree syntaxTree, JavaSymbol.MethodJavaSymbol symbol, JavaSymbol argumentSymbol, SymbolicValue argumentValue, int index) { ObjectConstraint constraint = programState.getConstraint(argumentValue, ObjectConstraint.class); if (constraint != null && constraint.isNull()) { String nonNullAnnotation = nonNullAnnotation(argumentSymbol); if (nonNullAnnotation != null) { String message = "Parameter {0} to this {1} is marked \"{2}\" but null could be passed."; reportIssue(syntaxTree, message, index + 1, (symbol.isConstructor() ? "constructor" : "call"), nonNullAnnotation); - } else if (methodAnnotatedParameterNonNull != null && !parameterIsNullable(symbol, argumentSymbol)) { - String message = "{0} is marked \"{1}\" but parameter {2} could be null."; - reportIssue(syntaxTree, message, (symbol.isConstructor() ? "Constructor" : ("\"" + symbol.name() + "\"")), methodAnnotatedParameterNonNull, index + 1); } } } - - private boolean parameterIsNullable(JavaSymbol.MethodJavaSymbol symbol, JavaSymbol argumentSymbol) { - return isAnnotatedNullable(argumentSymbol) || EQUALS_METHODS.anyMatch(symbol); - } } private class PostStatementVisitor extends AbstractStatementVisitor { diff --git a/java-frontend/src/test/files/se/NonNullSetToNullCheck.java b/java-frontend/src/test/files/se/NonNullSetToNullCheck.java index 6728f8bddc6..61ea0c4d241 100644 --- a/java-frontend/src/test/files/se/NonNullSetToNullCheck.java +++ b/java-frontend/src/test/files/se/NonNullSetToNullCheck.java @@ -1,3 +1,4 @@ +import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.meta.When; @@ -285,8 +286,8 @@ class HandleParametersAreNonnullByDefault { } void foo(Object o) { - foo(null); // Noncompliant {{"foo" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} - new HandleParametersAreNonnullByDefault(null); // Noncompliant {{Constructor is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + foo(null); // Compliant - @ParametersAreNonnullByDefault not handled + new HandleParametersAreNonnullByDefault(null); // Compliant - @ParametersAreNonnullByDefault not handled } void bar(@Nullable Object o) { @@ -302,7 +303,7 @@ public boolean equals(Object obj) { class HandleEclipseParametersNonNull { @NonNullByDefault(DefaultLocation.PARAMETER) void foo(Object o) { - foo(null); // Noncompliant {{"foo" is marked "org.eclipse.jdt.annotation.NonNullByDefault" but parameter 1 could be null.}} + foo(null); // Compliant - @NonNullByDefault not handled } @NonNullByDefault(DefaultLocation.RETURN_TYPE) @@ -310,3 +311,14 @@ Object bar(Object o) { return bar(null); // Compliant } } + +abstract class ExcludedMethods { + @CheckForNull + abstract Object getMyObject(); + + void foo() { + com.google.common.base.Preconditions.checkNotNull(getMyObject()); // Compliant + com.google.common.base.Preconditions.checkNotNull(getMyObject(), "yolo"); // Compliant + com.google.common.base.Preconditions.checkNotNull(getMyObject(), "yolo", new Object(), 2); // Compliant + } +} diff --git a/java-frontend/src/test/files/se/annotations/ClassAnnotationsNonNull.java b/java-frontend/src/test/files/se/annotations/ClassAnnotationsNonNull.java index 7dd183e32ab..b42edd7b3cf 100644 --- a/java-frontend/src/test/files/se/annotations/ClassAnnotationsNonNull.java +++ b/java-frontend/src/test/files/se/annotations/ClassAnnotationsNonNull.java @@ -15,10 +15,10 @@ private void bar(Object... objects) { } void qix(@Nullable Object singleObject, @Nullable Object[] objects) { - bar(singleObject); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(singleObject); if (singleObject != null) {} // Compliant - bar(objects); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(objects); if (objects != null) {} // Noncompliant {{Remove this expression which always evaluates to "true"}} } } diff --git a/java-frontend/src/test/files/se/annotations/MethodAnnotationsNonNull.java b/java-frontend/src/test/files/se/annotations/MethodAnnotationsNonNull.java index 141f769ee64..a72de52ca4d 100644 --- a/java-frontend/src/test/files/se/annotations/MethodAnnotationsNonNull.java +++ b/java-frontend/src/test/files/se/annotations/MethodAnnotationsNonNull.java @@ -18,10 +18,10 @@ private void bar(Object... objects) { @ParametersAreNonnullByDefault void qix(@Nullable Object singleObject, @Nullable Object[] objects) { - bar(singleObject); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(singleObject); if (singleObject != null) {} // Compliant - bar(objects); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(objects); if (objects != null) {} // Noncompliant {{Remove this expression which always evaluates to "true"}} } } diff --git a/java-frontend/src/test/files/se/annotations/PackageAnnotationsNonNull.java b/java-frontend/src/test/files/se/annotations/PackageAnnotationsNonNull.java index 782b5161315..d5473fae7f4 100644 --- a/java-frontend/src/test/files/se/annotations/PackageAnnotationsNonNull.java +++ b/java-frontend/src/test/files/se/annotations/PackageAnnotationsNonNull.java @@ -13,10 +13,10 @@ private void bar(Object... objects) { } void qix(@Nullable Object singleObject, @Nullable Object[] objects) { - bar(singleObject); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(singleObject); if (singleObject != null) {} // Compliant - bar(objects); // Noncompliant {{"bar" is marked "javax.annotation.ParametersAreNonnullByDefault" but parameter 1 could be null.}} + bar(objects); if (objects != null) {} // Noncompliant {{Remove this expression which always evaluates to "true"}} } }