mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[devkit] IJPL-163797 Highlight implementation-detail plugins as deprecated in plugin.xml
GitOrigin-RevId: 5cb732c2f0d802e9b85840474b5d70ad16acae15
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a52e828b61
commit
bd5b2fc3f1
@@ -205,7 +205,8 @@ inspections.plugin.xml.do.not.use.template.text=Do not use template text ''{0}''
|
||||
inspections.plugin.xml.must.not.contain.template.text=Must not contain template text ''{0}''
|
||||
inspections.plugin.xml.value.exceeds.max.length=Value exceeds maximum length {0}
|
||||
inspections.plugin.xml.value.must.have.minimum.length=Value must have minimum length of {0}
|
||||
inspections.plugin.xml.value.must.be.https.or.http.link.to.website=Must be valid link to website using https:// or http:// scheme
|
||||
# suppress inspection "HttpUrlsUsage"
|
||||
inspections.plugin.xml.value.must.be.https.or.http.link.to.website=Must be a valid link to the website using https:// or http:// scheme
|
||||
inspections.plugin.xml.product.descriptor.invalid.date=Date must be a YYYYMMDD integer, or a placeholder (e.g. __DATE__)
|
||||
inspections.plugin.xml.product.descriptor.invalid.version=Version must be an integer, or a placeholder (e.g. __VERSION__)
|
||||
inspections.plugin.xml.no.plugin.icon.svg.file=<html>Plugin should provide ''{0}'' (<a href="https://plugins.jetbrains.com/docs/intellij/plugin-icon-file.html?from=PluginXmlPluginLogoInspection">Documentation</a>)</html>
|
||||
@@ -217,9 +218,9 @@ inspections.plugin.xml.ComponentModuleRegistrationChecker.fix.move.registration.
|
||||
inspections.plugin.xml.ComponentModuleRegistrationChecker.fix.move.registration.family.name=Move registration to correct module
|
||||
inspections.plugin.xml.fix.extension.point.add.with.tag=Add <with> tag
|
||||
inspections.plugin.xml.listener.does.not.inherit=''{0}'' does not inherit from ''{1}''
|
||||
inspections.plugin.xml.since.build.could.not.locate.main.descriptor=Could not locate main plugin.xml file to determine required <idea-version> 'since-build'
|
||||
inspections.plugin.xml.since.build.could.not.locate.main.descriptor=Could not locate the main plugin.xml file to determine required <idea-version> 'since-build'
|
||||
inspections.plugin.xml.since.build.must.be.specified=Must specify <idea-version> 'since-build'
|
||||
inspections.plugin.xml.since.build.could.not.determine.platform.version=Could not determine target platform version, please check project setup
|
||||
inspections.plugin.xml.since.build.could.not.determine.platform.version=Could not determine a target platform version, please check project setup
|
||||
inspections.plugin.xml.since.build.listeners.os.attribute=Attribute ''os'' available in platform version {0} or later only, but specified ''since-build'' platform is ''{1}''
|
||||
inspections.plugin.xml.since.build.listeners.not.available=Feature available in platform version {0} or later only, but specified ''since-build'' platform is ''{1}''
|
||||
inspections.plugin.xml.action.group.id.required='id' should be specified
|
||||
@@ -233,6 +234,7 @@ inspections.plugin.xml.vendor.specify.jetbrains=Specify JetBrains as vendor
|
||||
inspections.plugin.xml.change.until.build.name=Change ''until-build'' to ''{0}''
|
||||
inspections.plugin.xml.change.until.build.family.name=Correct 'until-build' attribute
|
||||
inspections.plugin.xml.deprecated=Deprecated
|
||||
inspections.plugin.xml.deprecated.implementation.detail=Implementation plugins are no longer supported: use either a regular plugin or implement a product module
|
||||
inspections.plugin.xml.add.version.tag=Add <version>
|
||||
inspections.plugin.xml.add.vendor.tag=Add <vendor>
|
||||
inspections.plugin.xml.module.descriptor.at.least.one.dependency=At least one <module> entry must be defined
|
||||
@@ -289,7 +291,6 @@ inspections.psi.element.concat.psi.type=Suspicious conversion of PsiType to stri
|
||||
inspections.psi.element.concat.add.get.text.family.name=Call text representation retrieval method
|
||||
inspections.psi.element.concat.add.get.text.name=Use ''{0}'' call
|
||||
|
||||
|
||||
inspections.plugin.xml.dynamic.plugin.component.usage=Non-dynamic plugin due to using components.
|
||||
inspections.plugin.xml.dynamic.plugin.component.usage.docs.link.title=Migration Guide
|
||||
inspections.plugin.xml.dynamic.plugin.option.highlight.usages.ep=Highlight usage of non-dynamic extension points
|
||||
@@ -297,7 +298,6 @@ inspections.plugin.xml.dynamic.plugin.extension.point=Non-dynamic extension poin
|
||||
inspections.plugin.xml.dynamic.plugin.explicit.non.dynamic.extension.point=Explicit non-dynamic extension point ''{0}''
|
||||
inspections.plugin.xml.dynamic.plugin.id.required.for.group='id' must be specified for <group>
|
||||
inspections.plugin.xml.dynamic.plugin.usage.of.non.dynamic.extension.point=Usage of non-dynamic extension point ''{0}''
|
||||
inspections.plugin.xml.dynamic.plugin.analyze.extension.point={0} for ''{1}''
|
||||
|
||||
inspections.stateful.extension.point.leak.psi.element=Potential memory leak: don't hold PsiElement, use SmartPsiElementPointer instead
|
||||
inspections.stateful.extension.point.leak.psi.element.quick.fix=See also LocalQuickFixOnPsiElement.
|
||||
@@ -600,7 +600,7 @@ inspection.light.service.must.be.concrete.class.message=\
|
||||
Light service must be a concrete class and cannot be abstract or an interface.\n\
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and \
|
||||
manage the service instance. Without a concrete implementation, the platform \
|
||||
would not be able to create an instance of the service, and the service would \
|
||||
would not be able to create an instance of the service. The service would \
|
||||
not be available for use by the plugin.\n\
|
||||
To solve this problem, you should define a concrete implementation class for the \
|
||||
service and annotate it with '@Service'.
|
||||
@@ -679,6 +679,7 @@ inspections.meta.information.unknown.inspection.id=Unknown inspection id ''{0}''
|
||||
inspections.meta.information.json.schema.display.name=IntelliJ Inspections Metainformation
|
||||
|
||||
inlay.threading.name=IJ Platform threading
|
||||
# suppress inspection "GrazieInspection"
|
||||
inlay.threading.description=IntelliJ Platform threading and read/write lock related annotations, e.g., <code>@RequiresEdt</code>, <code>@RequiresReadLock</code>.<br><br>Experimental, enabled in IDEA project only.
|
||||
|
||||
inspections.static.initialization.in.extensions.name=Static initialization in extension point implementations
|
||||
@@ -709,7 +710,7 @@ inspections.jcomponent.data.provider.display.name=JComponent must use UiDataProv
|
||||
inspections.jcomponent.data.provider.use.uidataprovider.instead.of.dataprovider=Use UiDataProvider instead of DataProvider
|
||||
|
||||
inspection.can.be.dumb.aware.name=Can be DumbAware
|
||||
inspection.can.be.dumb.aware.settings.ignore.classes.title=Ignore class list:
|
||||
inspection.can.be.dumb.aware.settings.ignore.classes.title=Ignore classes list:
|
||||
inspection.can.be.dumb.aware.settings.ignore.classes.dialog.title=Specify Class to Ignore
|
||||
inspection.can.be.dumb.aware.message=Can be made DumbAware if it does not access indexes
|
||||
inspection.can.be.dumb.aware.quickfix.add.to.ignore=Ignore ''{0}''
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.intellij.ide.presentation.Presentation;
|
||||
import com.intellij.openapi.util.NlsSafe;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.util.xml.*;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -67,7 +66,12 @@ public interface IdeaPlugin extends DomElement {
|
||||
|
||||
@NotNull GenericAttributeValue<Boolean> getAllowBundledUpdate();
|
||||
|
||||
/**
|
||||
* @deprecated Will be dropped without a replacement: use either a regular plugin or implement a product module.
|
||||
*/
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
@Stubbed
|
||||
@Deprecated
|
||||
@NotNull GenericAttributeValue<Boolean> getImplementationDetail();
|
||||
|
||||
@NotNull GenericAttributeValue<Boolean> getRequireRestart();
|
||||
@@ -157,8 +161,9 @@ public interface IdeaPlugin extends DomElement {
|
||||
@NotNull List<? extends Listeners> getProjectListeners();
|
||||
|
||||
/**
|
||||
* @deprecated the corresponding tag in plugin.xml is not supported anymore, this method is used to highlight occurrences of such tag
|
||||
* @deprecated the corresponding tag in plugin.xml is not supported anymore, this method is used to highlight occurrences of such a tag
|
||||
*/
|
||||
@SuppressWarnings("SpellCheckingInspection")
|
||||
@Deprecated
|
||||
@NotNull List<? extends Helpset> getHelpsets();
|
||||
}
|
||||
|
||||
@@ -327,8 +327,14 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase
|
||||
//noinspection deprecation
|
||||
if (DomUtil.hasXml(ideaPlugin.getUseIdeaClassloader())) {
|
||||
//noinspection deprecation
|
||||
highlightDeprecated(ideaPlugin.getUseIdeaClassloader(), DevKitBundle.message("inspections.plugin.xml.deprecated"), holder, true,
|
||||
true);
|
||||
highlightDeprecated(ideaPlugin.getUseIdeaClassloader(), DevKitBundle.message("inspections.plugin.xml.deprecated"), holder, true, true);
|
||||
}
|
||||
|
||||
//noinspection deprecation
|
||||
if (DomUtil.hasXml(ideaPlugin.getImplementationDetail())) {
|
||||
//noinspection deprecation
|
||||
highlightDeprecated(ideaPlugin.getImplementationDetail(), DevKitBundle.message("inspections.plugin.xml.deprecated.implementation.detail"),
|
||||
holder, true, true);
|
||||
}
|
||||
|
||||
checkMaxLength(ideaPlugin.getUrl(), 255, holder);
|
||||
@@ -545,7 +551,7 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase
|
||||
}
|
||||
@NonNls String name = nameAttrValue.getValue();
|
||||
|
||||
// skip some known offenders in IJ project
|
||||
// skip some known offenders in the IJ project
|
||||
if (name != null
|
||||
&& (StringUtil.startsWith(name, "Pythonid.") ||
|
||||
StringUtil.startsWith(name, "DevKit.") ||
|
||||
@@ -569,9 +575,9 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase
|
||||
}
|
||||
|
||||
String epName = fragments.get(fragments.size() - 1);
|
||||
List<String> butlast = fragments.subList(0, fragments.size() - 1);
|
||||
List<String> butLast = fragments.subList(0, fragments.size() - 1);
|
||||
List<String> words = StringUtil.getWordsIn(epName);
|
||||
return !ContainerUtil.exists(words, w -> ContainerUtil.exists(butlast, f -> StringUtil.equalsIgnoreCase(w, f)));
|
||||
return !ContainerUtil.exists(words, w -> ContainerUtil.exists(butLast, f -> StringUtil.equalsIgnoreCase(w, f)));
|
||||
}
|
||||
|
||||
private static void annotateExtensions(Extensions extensions, DomElementAnnotationHolder holder) {
|
||||
@@ -617,7 +623,6 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
final IdeaPlugin ideaPlugin = extensionPoint.getParentOfType(IdeaPlugin.class, true);
|
||||
assert ideaPlugin != null;
|
||||
String dependencyId = ideaPlugin.getPluginId();
|
||||
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
<idea-plugin>
|
||||
|
||||
<error descr="Could not locate main plugin.xml file to determine required <idea-version> 'since-build'"><applicationListeners>
|
||||
<error descr="Could not locate the main plugin.xml file to determine required <idea-version> 'since-build'"><applicationListeners>
|
||||
<listener class="java.util.ArrayList" topic="java.util.Collection"
|
||||
activeInHeadlessMode="true" activeInTestMode="true"/>
|
||||
</applicationListeners></error>
|
||||
|
||||
<error descr="Could not locate main plugin.xml file to determine required <idea-version> 'since-build'"><projectListeners>
|
||||
<error descr="Could not locate the main plugin.xml file to determine required <idea-version> 'since-build'"><projectListeners>
|
||||
<listener class="java.util.ArrayList" topic="java.util.Collection"
|
||||
activeInHeadlessMode="true" activeInTestMode="true"/>
|
||||
</projectListeners></error>
|
||||
|
||||
+2
-2
@@ -3,12 +3,12 @@
|
||||
<vendor>JetBrains</vendor>
|
||||
<version>1.0</version>
|
||||
|
||||
<error descr="Could not determine target platform version, please check project setup"><applicationListeners>
|
||||
<error descr="Could not determine a target platform version, please check project setup"><applicationListeners>
|
||||
|
||||
</applicationListeners></error>
|
||||
|
||||
|
||||
<error descr="Could not determine target platform version, please check project setup"><projectListeners>
|
||||
<error descr="Could not determine a target platform version, please check project setup"><projectListeners>
|
||||
|
||||
</projectListeners></error>
|
||||
</idea-plugin>
|
||||
@@ -1,12 +1,12 @@
|
||||
<idea-plugin
|
||||
url="<error descr="Must be valid link to website using https:// or http:// scheme"><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></error>">
|
||||
url="<error descr="Must be a valid link to the website using https:// or http:// scheme"><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></error>">
|
||||
|
||||
<id><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></id>
|
||||
|
||||
<name><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></name>
|
||||
|
||||
<vendor
|
||||
url="<error descr="Must be valid link to website using https:// or http:// scheme"><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></error>"
|
||||
url="<error descr="Must be a valid link to the website using https:// or http:// scheme"><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></error>"
|
||||
email="<error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error>"
|
||||
><error descr="Value exceeds maximum length 255">0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345</error></vendor>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<idea-plugin url="<error descr="Must be valid link to website using https:// or http:// scheme">mywebsite.com</error>">
|
||||
<idea-plugin url="<error descr="Must be a valid link to the website using https:// or http:// scheme">mywebsite.com</error>">
|
||||
<id>test</id>
|
||||
<vendor url="<error descr="Must be valid link to website using https:// or http:// scheme">mywebsite.com</error>">JetBrains</vendor>
|
||||
<vendor url="<error descr="Must be a valid link to the website using https:// or http:// scheme">mywebsite.com</error>">JetBrains</vendor>
|
||||
<version>1.0</version>
|
||||
|
||||
<<error descr="Value must not be empty">name</error>></name>
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
<idea-plugin <error descr="Implementation plugins are no longer supported: use either a regular plugin or implement a product module">implementation-detail="true"</error>>
|
||||
<id>com.intellij.myPlugin</id>
|
||||
<vendor>JetBrains</vendor>
|
||||
<version>1.0</version>
|
||||
|
||||
</idea-plugin>
|
||||
@@ -1,5 +1,5 @@
|
||||
<idea-plugin package="com.intellij"
|
||||
implementation-detail="false"
|
||||
<error descr="Implementation plugins are no longer supported: use either a regular plugin or implement a product module">implementation-detail="false"</error>
|
||||
allow-bundled-update="false"
|
||||
require-restart="false"
|
||||
url="https://www.jetbrains.com">
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import com.intellij.openapi.components.Service;
|
||||
|
||||
@<error descr="Light service must be a concrete class and cannot be abstract or an interface.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service, and the service would not be available for use by the plugin.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service. The service would not be available for use by the plugin.
|
||||
To solve this problem, you should define a concrete implementation class for the service and annotate it with '@Service'.">Service<caret></error>
|
||||
abstract class MyService {
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import com.intellij.openapi.components.Service;
|
||||
|
||||
@<error descr="Light service must be a concrete class and cannot be abstract or an interface.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service, and the service would not be available for use by the plugin.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service. The service would not be available for use by the plugin.
|
||||
To solve this problem, you should define a concrete implementation class for the service and annotate it with '@Service'.">Service<caret></error>
|
||||
interface MyService {
|
||||
}
|
||||
|
||||
+4
@@ -809,6 +809,10 @@ public class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
doHighlightingTest("redundantComponentInterfaceClass.xml");
|
||||
}
|
||||
|
||||
public void testDeprecatedImplementationDetailAttribute() {
|
||||
doHighlightingTest("deprecatedImplementationDetail.xml");
|
||||
}
|
||||
|
||||
private void doHighlightingTest(String... filePaths) {
|
||||
myFixture.testHighlighting(true, false, false, filePaths);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import com.intellij.openapi.components.Service
|
||||
|
||||
<error descr="Light service must be a concrete class and cannot be abstract or an interface.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service, and the service would not be available for use by the plugin.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service. The service would not be available for use by the plugin.
|
||||
To solve this problem, you should define a concrete implementation class for the service and annotate it with '@Service'.">@Service<caret></error>
|
||||
abstract class MyService
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import com.intellij.openapi.components.Service
|
||||
|
||||
<error descr="Light service must be a concrete class and cannot be abstract or an interface.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service, and the service would not be available for use by the plugin.
|
||||
The IntelliJ Platform relies on the concrete implementation class to create and manage the service instance. Without a concrete implementation, the platform would not be able to create an instance of the service. The service would not be available for use by the plugin.
|
||||
To solve this problem, you should define a concrete implementation class for the service and annotate it with '@Service'.">@Service<caret></error>
|
||||
interface MyService
|
||||
Reference in New Issue
Block a user