devkit: highlight explicitly specified ITNReporter as an error handler for JetBrains plugins

This commit is contained in:
nik
2015-12-17 12:11:27 +03:00
parent 197066aaab
commit c045d523e6
3 changed files with 41 additions and 0 deletions
@@ -15,9 +15,11 @@
*/
package org.jetbrains.idea.devkit.inspections;
import com.intellij.ExtensionPoints;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.diagnostic.ITNReporter;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.plugins.PluginManagerMain;
import com.intellij.openapi.module.Module;
@@ -151,6 +153,21 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection<IdeaPlugi
}
}
if (ExtensionPoints.ERROR_HANDLER.equals(extensionPoint.getEffectiveQualifiedName()) && extension.exists()) {
String implementation = extension.getXmlTag().getAttributeValue("implementation");
if (ITNReporter.class.getName().equals(implementation)) {
IdeaPlugin plugin = extension.getParentOfType(IdeaPlugin.class, true);
if (plugin != null) {
Vendor vendor = ContainerUtil.getFirstItem(plugin.getVendors());
if (vendor != null && PluginManagerMain.isDevelopedByJetBrains(vendor.getValue())) {
LocalQuickFix fix = new RemoveDomElementQuickFix(extension);
holder.createProblem(extension, ProblemHighlightType.LIKE_UNUSED_SYMBOL,
"Exceptions from plugins developed by JetBrains are reported via ITNReporter automatically, there is no need to specify it explicitly", null, fix).highlightWholeElement();
}
}
}
}
final List<? extends DomAttributeChildDescription> descriptions = extension.getGenericInfo().getAttributeChildrenDescriptions();
for (DomAttributeChildDescription attributeDescription : descriptions) {
final GenericAttributeValue attributeValue = attributeDescription.getDomAttributeValue(extension);
@@ -0,0 +1,12 @@
<idea-plugin>
<id>com.intellij</id>
<vendor>JetBrains</vendor>
<extensionPoints>
<extensionPoint name="errorHandler"
interface="com.intellij.openapi.diagnostic.ErrorReportSubmitter"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<error descr="Exceptions from plugins developed by JetBrains are reported via ITNReporter automatically, there is no need to specify it explicitly"><errorHandler implementation="com.intellij.diagnostic.ITNReporter"/></error>
<errorHandler implementation="MyErrorHandler"/>
</extensions>
</idea-plugin>
@@ -14,11 +14,13 @@
* limitations under the License.
*/
package org.jetbrains.idea.devkit.codeInsight
import com.intellij.codeInsight.TargetElementUtil
import com.intellij.codeInsight.completion.CompletionType
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementPresentation
import com.intellij.codeInspection.xml.DeprecatedClassUsageInspection
import com.intellij.diagnostic.ITNReporter
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.PluginPathManager
import com.intellij.psi.ElementDescriptionUtil
@@ -61,6 +63,8 @@ public class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
moduleBuilder.addLibrary("util", pathForClass);
String platformApiJar = PathUtil.getJarPathForClass(JBList.class)
moduleBuilder.addLibrary("platform-api", platformApiJar);
String platformImplJar = PathUtil.getJarPathForClass(ITNReporter.class)
moduleBuilder.addLibrary("platform-impl", platformImplJar);
}
public void testExtensionsHighlighting() throws Throwable {
@@ -342,6 +346,14 @@ public class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
}
}
public void testErrorHandlerExtensionInJetBrainsPlugin() {
myFixture.addClass("""
import com.intellij.openapi.diagnostic.ErrorReportSubmitter;
public class MyErrorHandler extends ErrorReportSubmitter {}
""")
myFixture.testHighlighting("errorHandlerExtensionInJetBrainsPlugin.xml");
}
public void testExtensionPointPresentation() {
myFixture.configureByFile(getTestName(true) + ".xml");
final PsiElement element =