/* * Copyright (c) 2016-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package build_systems.threadsafety; import javax.annotation.concurrent.ThreadSafe; @ThreadSafe class DeDup { Integer field; Integer fielda, fieldb; /* Only want one rather than two reports */ void two_fields() { foo(); } private void foo() { fielda = 88; fieldb = 99; } /*Only the first write should be reported*/ void two_writes() { field = 22; field = 84; } /*Only the first read should be reported*/ void two_reads() { // parallel reads are OK Integer local; local = field; local = field + 1; } /*Both accesses should be reported*/ void write_read() { // parallel reads are OK Integer local; field = 87; local = field; } /*Should only report the first write, which happens to be interprocedural*/ void twoWritesOneInCaller() { writeToField(); field = 22; } /*Should not report directly as provate method*/ private void writeToField() { field = 33; } Integer colocated_read, colocated_write; /*Should only report colocated write, not read, from readandwrite()*/ void colocated_read_write() { read_and_write(); } /*Should report*/ void separate_write_to_colocated_read() { colocated_read = 88; } private void read_and_write() { Integer x = colocated_read; colocated_write = 99; } }