// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "virtual_bodies.h"

// Shouldn't warn about method usage in the implementation file.
class VirtualMethodsInImplementation {
 public:
  virtual void MethodIsAbstract() = 0;
  virtual void MethodHasNoArguments();
  virtual void MethodHasEmptyDefaultImpl() {}
  virtual bool ComplainAboutThis() { return true; }
};

// Stubs to fill in the abstract method
class ConcreteVirtualMethodsInHeaders : public VirtualMethodsInHeaders {
 public:
  virtual void MethodIsAbstract() override {}
};

class ConcreteVirtualMethodsInImplementation
    : public VirtualMethodsInImplementation {
 public:
  virtual void MethodIsAbstract() override {}
};

// Fill in the implementations
void VirtualMethodsInHeaders::MethodHasNoArguments() {
}
void WarnOnMissingVirtual::MethodHasNoArguments() {
}
void VirtualMethodsInImplementation::MethodHasNoArguments() {
}

int main() {
  ConcreteVirtualMethodsInHeaders one;
  ConcreteVirtualMethodsInImplementation two;
}
