From 9f19f12a1bc7d893ea04cc15889c3f8bdbf724a1 Mon Sep 17 00:00:00 2001 From: Dulma Churchill Date: Fri, 25 Aug 2017 05:51:44 -0700 Subject: [PATCH] [linters] Fix incorrect assert false in Component linters Reviewed By: ddino Differential Revision: D5706229 fbshipit-source-id: c3bd287 --- infer/src/clang/ComponentKit.ml | 19 +++++++++---------- .../componentkit/MultipleFactoryMethodsTest.h | 3 +++ .../codetoanalyze/objcpp/linters/issues.exp | 10 +++++----- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/infer/src/clang/ComponentKit.ml b/infer/src/clang/ComponentKit.ml index c326379f4..e4a07dbd5 100644 --- a/infer/src/clang/ComponentKit.ml +++ b/infer/src/clang/ComponentKit.ml @@ -253,16 +253,15 @@ let component_with_multiple_factory_methods_advice context an = match attr with Clang_ast_t.UnavailableAttr _ -> true | _ -> false in let is_available_factory_method if_decl (decl: Clang_ast_t.decl) = - let attrs = - match decl with - | ObjCMethodDecl (decl_info, _, _) - -> decl_info.Clang_ast_t.di_attributes - | _ - -> assert false - in - let unavailable_attrs = List.filter ~f:is_unavailable_attr attrs in - let is_available = Int.equal (List.length unavailable_attrs) 0 in - CAst_utils.is_objc_factory_method if_decl decl && is_available + match decl with + | ObjCMethodDecl (decl_info, _, _) + -> let unavailable_attrs = + List.filter ~f:is_unavailable_attr decl_info.Clang_ast_t.di_attributes + in + let is_available = List.is_empty unavailable_attrs in + CAst_utils.is_objc_factory_method if_decl decl && is_available + | _ + -> false in let check_interface if_decl = match if_decl with diff --git a/infer/tests/codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h b/infer/tests/codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h index 6381ac99a..72def06b8 100644 --- a/infer/tests/codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h +++ b/infer/tests/codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h @@ -25,6 +25,9 @@ // Not OK - Using the class name instaed of `instancename` doesn't make this OK @interface BadComponent : CKCompositeComponent + +@property int x; + + (instancetype)newWithObject1:(NSObject*)obj; + (BadComponent*)newWithObject2:(NSObject*)obj; @end diff --git a/infer/tests/codetoanalyze/objcpp/linters/issues.exp b/infer/tests/codetoanalyze/objcpp/linters/issues.exp index 4c0e827b6..67ef07ca1 100644 --- a/infer/tests/codetoanalyze/objcpp/linters/issues.exp +++ b/infer/tests/codetoanalyze/objcpp/linters/issues.exp @@ -7,11 +7,11 @@ codetoanalyze/objcpp/linters/componentkit/InitializerWithSideEffectTest.mm, FooC codetoanalyze/objcpp/linters/componentkit/InitializerWithSideEffectTest.mm, __objc_anonymous_block_______1, 37, COMPONENT_INITIALIZER_WITH_SIDE_EFFECTS, [] codetoanalyze/objcpp/linters/componentkit/InitializerWithSideEffectTest.mm, __objc_anonymous_block_______2, 41, COMPONENT_INITIALIZER_WITH_SIDE_EFFECTS, [] codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 20, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] -codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 29, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] -codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 52, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] -codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 58, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] -codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 59, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] -codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 60, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] +codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 32, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] +codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 55, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] +codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 61, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] +codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 62, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] +codetoanalyze/objcpp/linters/componentkit/MultipleFactoryMethodsTest.h, Linters_dummy_method, 63, COMPONENT_WITH_MULTIPLE_FACTORY_METHODS, [] codetoanalyze/objcpp/linters/componentkit/MutableLocalVariablesTest.mm, BarComponent_new, 90, MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE, [] codetoanalyze/objcpp/linters/componentkit/MutableLocalVariablesTest.mm, BarComponent_new, 92, MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE, [] codetoanalyze/objcpp/linters/componentkit/MutableLocalVariablesTest.mm, BarComponent_new, 111, MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE, []