11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.tools.findbugs.plugin;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.apache.bcel.classfile.Code;
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import edu.umd.cs.findbugs.BugInstance;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import edu.umd.cs.findbugs.BugReporter;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This class detects the synchronized method.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class SynchronizedMethodDetector extends OpcodeStackDetector {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private BugReporter mBugReporter;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public SynchronizedMethodDetector(BugReporter bugReporter) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.mBugReporter = bugReporter;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void visit(Code code) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (getMethod().isSynchronized()) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mBugReporter.reportBug(new BugInstance(this, "CHROMIUM_SYNCHRONIZED_METHOD",
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   NORMAL_PRIORITY)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    .addClassAndMethod(this)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    .addSourceLine(this));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        super.visit(code);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void sawOpcode(int arg0) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38