// 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_methods.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;
}
