diff --git a/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
new file mode 100644
index 00000000..725a8b15
--- /dev/null
+++ b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
@@ -0,0 +1,62 @@
+ 'Please use \Magento\Framework\View\Layout\Builder::build instead.',
+ 'renderLayout' => 'Please use \Magento\Framework\Controller\ResultInterface::renderResult instead.',
+ '_redirect' => 'Please use \Magento\Backend\Model\View\Result\Redirect::render instead.',
+ '_forward' => 'Please use \Magento\Backend\Model\View\Result\Forward::forward instead.',
+ '_setActiveMenu' => 'Please use \Magento\Backend\Model\View\Result\Page::setActiveMenu instead.',
+ '_addBreadcrumb' => 'Please use \Magento\Backend\Model\View\Result\Page::addBreadcrumb instead.',
+ '_addContent' => 'Please use \Magento\Backend\Model\View\Result\Page::addContent instead.',
+ '_addLeft' => 'Please use \Magento\Backend\Model\View\Result\Page::addLeft instead.',
+ '_addJs' => 'Please use \Magento\Backend\Model\View\Result\Page::addJs instead.',
+ '_moveBlockToContainer' => 'Please use \Magento\Backend\Model\View\Result\Page::moveBlockToContainer instead.',
+ ];
+
+ /**
+ * @inheritdoc
+ */
+ public function register()
+ {
+ return [
+ T_OBJECT_OPERATOR,
+ T_FUNCTION
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function process(File $phpcsFile, $stackPtr)
+ {
+ $tokens = $phpcsFile->getTokens();
+ $stringPos = $phpcsFile->findNext(T_STRING, $stackPtr + 1);
+
+ foreach ($this->obsoleteResponseMethods as $method => $errorMessage) {
+ if ($tokens[$stringPos]['content'] === $method) {
+ $phpcsFile->addWarning(
+ sprintf('%s method is deprecated. %s', $method, $errorMessage),
+ $stackPtr,
+ self::WARNING_CODE_METHOD
+ );
+ }
+ }
+ }
+}
diff --git a/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.inc b/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.inc
new file mode 100644
index 00000000..4e33d0f7
--- /dev/null
+++ b/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.inc
@@ -0,0 +1,39 @@
+_view->loadLayout(['default', 'test'], true, true, false);
+$this->_view->renderLayout();
+
+protected function _addBreadcrumb($label, $title = null, $link = null)
+{
+ $this->getLayout()->getBlock('test')->addLink($label, $title, $link);
+}
+
+$this->editPost = $objectManagerHelper->getObject(
+ TestClass::class,
+ [
+ '_redirect' => $this->redirect,
+ ]
+);
+
+$this->_redirect('test/path');
+
+$this->_forward('grid');
+
+$this->_initAction()->_setActiveMenu(
+ 'Magento_Invitation::report_magento_invitation_order'
+)->_addBreadcrumb(
+ __('Invitation Report by Customers'),
+ __('Invitation Report by Order Conversion Rate')
+)->_addLeft(
+)->_addJs(
+ $this->_view->getLayout()->createBlock(TestBlock::class)->setTemplate('Test::test.phtml')
+);
+
+private function _addContent(AbstractBlock $block)
+{
+ return $this->_moveBlockToContainer($block, 'content');
+}
diff --git a/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.php b/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.php
new file mode 100644
index 00000000..b35d43a1
--- /dev/null
+++ b/Magento2/Tests/Legacy/ObsoleteResponseUnitTest.php
@@ -0,0 +1,40 @@
+ 1,
+ 8 => 1,
+ 10 => 1,
+ 22 => 1,
+ 24 => 1,
+ 26 => 1,
+ 28 => 1,
+ 31 => 1,
+ 32 => 1,
+ 36 => 1,
+ 38 => 1
+ ];
+ }
+}
diff --git a/Magento2/ruleset.xml b/Magento2/ruleset.xml
index 5966203f..cad4c5ef 100644
--- a/Magento2/ruleset.xml
+++ b/Magento2/ruleset.xml
@@ -322,6 +322,10 @@
8
warning
+
+ 8
+ warning
+