mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
devkit: highlight explicitly specified ITNReporter as an error handler for JetBrains plugins
This commit is contained in:
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user