diff --git a/infer/tests/build_systems/buck_cross_module/Makefile b/infer/tests/build_systems/buck_cross_module/Makefile new file mode 100644 index 000000000..6ce68895e --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/Makefile @@ -0,0 +1,31 @@ +# Copyright (c) 2017 - present Facebook, Inc. +# All rights reserved. +# +# This source code is licensed under the BSD style license found in the +# LICENSE file in the root directory of this source tree. An additional grant +# of patent rights can be found in the PATENTS file in the same directory. + +TESTS_DIR = ../.. +ROOT_DIR = $(TESTS_DIR)/../.. + +ANALYZER = infer +BUCK_TARGET = //infer/tests/build_systems/buck_cross_module/module2:module2 +INFERPRINT_OPTIONS = --project-root $(ROOT_DIR) --issues-tests +CLEAN_EXTRA = $(ROOT_DIR)/buck-out + +include $(TESTS_DIR)/java.make +include $(TESTS_DIR)/infer.make + +$(OBJECTS): $(JAVA_SOURCE_FILES) + $(QUIET)cd $(ROOT_DIR) && \ + $(call silent_on_success,Compiling Buck cross module test tests,\ + INFER_BIN=$(INFER_BIN) NO_BUCKD=1 \ + $(BUCK) build --no-cache $(BUCK_TARGET)) + +infer-out/report.json: $(JAVA_DEPS) $(JAVA_SOURCE_FILES) + $(QUIET)cd $(ROOT_DIR) && \ + $(REMOVE_DIR) buck-out && \ + $(call silent_on_success,Testing Buck Java cross module integration,\ + INFER_BIN=$(INFER_BIN) NO_BUCKD=1 \ + $(INFER_BIN) -a $(ANALYZER) --results-dir $(CURDIR)/infer-out -- \ + $(BUCK) build --no-cache $(BUCK_TARGET)) diff --git a/infer/tests/build_systems/buck_cross_module/issues.exp b/infer/tests/build_systems/buck_cross_module/issues.exp new file mode 100644 index 000000000..61d4601d5 --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/issues.exp @@ -0,0 +1,2 @@ +infer/tests/build_systems/buck_cross_module/module2/Class2.java, void Class2.crossModuleNPE1(), 1, NULL_DEREFERENCE, [start of procedure crossModuleNPE1(),start of procedure returnsNull(),return from a call to String Class1.returnsNull()] +infer/tests/build_systems/buck_cross_module/module2/Class2.java, void Class2.crossModuleNPE2(Class1), 1, NULL_DEREFERENCE, [start of procedure crossModuleNPE2(...)] diff --git a/infer/tests/build_systems/buck_cross_module/module1/BUCK b/infer/tests/build_systems/buck_cross_module/module1/BUCK new file mode 100644 index 000000000..7009d9de4 --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/module1/BUCK @@ -0,0 +1,10 @@ +java_library( + name='module1', + srcs=['Class1.java'], + deps=[ + '//infer/tests/build_systems/genrule/annotations:annotations', + ], + visibility=[ + 'PUBLIC' + ], +) diff --git a/infer/tests/build_systems/buck_cross_module/module1/Class1.java b/infer/tests/build_systems/buck_cross_module/module1/Class1.java new file mode 100644 index 000000000..169182cb4 --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/module1/Class1.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +package crossmodule.module1; + +import genrule.annotations.Nullable; + +public class Class1 { + + public static String returnsNull() { + return null; + } + + @Nullable public Object nullableField; + +} diff --git a/infer/tests/build_systems/buck_cross_module/module2/BUCK b/infer/tests/build_systems/buck_cross_module/module2/BUCK new file mode 100644 index 000000000..44a247b05 --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/module2/BUCK @@ -0,0 +1,7 @@ +java_library( + name='module2', + srcs=['Class2.java'], + deps=[ + '//infer/tests/build_systems/buck_cross_module/module1:module1' + ] +) diff --git a/infer/tests/build_systems/buck_cross_module/module2/Class2.java b/infer/tests/build_systems/buck_cross_module/module2/Class2.java new file mode 100644 index 000000000..6e0de9cb5 --- /dev/null +++ b/infer/tests/build_systems/buck_cross_module/module2/Class2.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2017 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +package crossmodule.module2; + +import crossmodule.module1.Class1; + +public class Class2 { + + void crossModuleNPE1() { + Class1.returnsNull().toString(); + } + + void crossModuleNPE2(Class1 c) { + c.nullableField.toString(); + } + +}