Objects.#ref() on arrays should probably be 'Arrays.equals()' #loc
-array.objects.deep.equals.problem.descriptor=Objects.#ref() on arrays should probably be 'Arrays.deepEquals()' #loc
\ No newline at end of file
+array.objects.deep.equals.problem.descriptor=Objects.#ref() on arrays should probably be 'Arrays.deepEquals()' #loc
+extends.throwable.display.name=Class directly extends 'java.lang.Throwable'
+anonymous.extends.throwable.problem.descriptor=Anonymous class directly extends 'java.lang.Throwable' \#loc
+extends.throwable.problem.descriptor=class \#ref directly extends 'java.lang.Throwable' \#loc
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/ExtendsThrowableInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/ExtendsThrowableInspection.java
new file mode 100644
index 000000000000..b352db1a40a6
--- /dev/null
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/ExtendsThrowableInspection.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2000-2015 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.siyeh.ig.errorhandling;
+
+import com.intellij.psi.CommonClassNames;
+import com.intellij.psi.PsiAnonymousClass;
+import com.intellij.psi.PsiClass;
+import com.siyeh.InspectionGadgetsBundle;
+import com.siyeh.ig.BaseInspection;
+import com.siyeh.ig.BaseInspectionVisitor;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class ExtendsThrowableInspection extends BaseInspection {
+
+ @Nls
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return InspectionGadgetsBundle.message("extends.throwable.display.name");
+ }
+
+ @NotNull
+ @Override
+ protected String buildErrorString(Object... infos) {
+ final PsiClass aClass = (PsiClass)infos[0];
+ if (aClass instanceof PsiAnonymousClass) {
+ return InspectionGadgetsBundle.message("anonymous.extends.throwable.problem.descriptor");
+ } else {
+ return InspectionGadgetsBundle.message("extends.throwable.problem.descriptor");
+ }
+ }
+
+ @Override
+ public BaseInspectionVisitor buildVisitor() {
+ return new ExtendsThrowableVisitor();
+ }
+
+ private static class ExtendsThrowableVisitor extends BaseInspectionVisitor {
+
+ @Override
+ public void visitClass(@NotNull PsiClass aClass) {
+ if (aClass.isInterface() || aClass.isAnnotationType() || aClass.isEnum()) {
+ return;
+ }
+ final PsiClass superClass = aClass.getSuperClass();
+ if (superClass == null) {
+ return;
+ }
+ final String superclassName = superClass.getQualifiedName();
+ if (!CommonClassNames.JAVA_LANG_THROWABLE.equals(superclassName)) {
+ return;
+ }
+ registerClassError(aClass, aClass);
+ }
+ }
+}
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsThrowable.html b/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsThrowable.html
new file mode 100644
index 000000000000..242501c9ff64
--- /dev/null
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/ExtendsThrowable.html
@@ -0,0 +1,12 @@
+
+
+Reports any classes which directly extend java.lang.Throwable.
+It is generally considered bad practice to extend java.lang.Throwable directly and
+it is usually enough to extend either java.lang.RuntimeException or java.lang.Exception or in special
+cases java.lang.Error.
+
++New in 15 +
+
+
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/errorhandling/extends_throwable/ExtendsThrowable.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/errorhandling/extends_throwable/ExtendsThrowable.java
new file mode 100644
index 000000000000..8497c60f1b9c
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/errorhandling/extends_throwable/ExtendsThrowable.java
@@ -0,0 +1,9 @@
+public class