This commit is contained in:
Dmitry Avdeev
2014-09-12 13:59:11 +04:00
parent caa7af32b6
commit 3f2ff912e6
@@ -53,17 +53,17 @@ import java.util.*;
* @author mike
*/
public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.plugins.PluginDescriptor");
public static final IdeaPluginDescriptorImpl[] EMPTY_ARRAY = new IdeaPluginDescriptorImpl[0];
private String myName;
private PluginId myId;
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.plugins.PluginDescriptor");
private static final StringInterner ourInterner = new WeakStringInterner();
private final NullableLazyValue<String> myDescription = new NullableLazyValue<String>() {
@Override
protected String compute() {
return computeDescription();
}
};
private String myName;
private PluginId myId;
private String myResourceBundleBaseName;
private String myChangeNotes;
private String myVersion;
@@ -93,32 +93,15 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
private boolean myUseIdeaClassLoader;
private boolean myUseCoreClassLoader;
private boolean myEnabled = true;
private String mySinceBuild;
private String myUntilBuild;
private Boolean mySkipped;
private List<String> myModules = null;
public IdeaPluginDescriptorImpl(@NotNull File pluginPath) {
myPath = pluginPath;
}
IdeaPluginDescriptorImpl() {
}
public void setPath(@NotNull File path) {
myPath = path;
}
@Override
public File getPath() {
return myPath;
}
private static final StringInterner ourInterner = new WeakStringInterner();
@NotNull
public static String intern(@NotNull String s) {
return ourInterner.intern(s);
@@ -128,6 +111,46 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
JDOMUtil.internElement(rootElement, ourInterner);
}
@Nullable
private static List<Element> copyElements(final Element[] elements) {
if (elements != null) {
List<Element> result = new ArrayList<Element>();
for (Element extensionsRoot : elements) {
for (final Object o : extensionsRoot.getChildren()) {
Element element = (Element)o;
internJDOMElement(element);
result.add(element);
}
}
return result;
}
return null;
}
@SuppressWarnings({"HardCodedStringLiteral"})
private static String createDescriptionKey(final PluginId id) {
return "plugin." + id + ".description";
}
private static ComponentConfig[] mergeComponents(ComponentConfig[] first, ComponentConfig[] second) {
if (first == null) {
return second;
}
if (second == null) {
return first;
}
return ArrayUtil.mergeArrays(first, second);
}
@Override
public File getPath() {
return myPath;
}
public void setPath(@NotNull File path) {
myPath = path;
}
public void readExternal(@NotNull Document document, @NotNull URL url) throws InvalidDataException, FileNotFoundException {
Application application = ApplicationManager.getApplication();
readExternal(document, url, application != null && application.isUnitTestMode());
@@ -243,7 +266,7 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
myExtensions.putValue(ExtensionsAreaImpl.extractEPName(extension), extension);
}
}
List<Element> extensionPoints = copyElements(pluginBean.extensionPoints);
if (extensionPoints != null) {
myExtensionsPoints = new MultiMap<String, Element>();
@@ -251,7 +274,7 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
myExtensionsPoints.putValue(extensionPoint.getAttributeValue(ExtensionsAreaImpl.ATTRIBUTE_AREA), extensionPoint);
}
}
myActionsElements = copyElements(pluginBean.actions);
if (pluginBean.modules != null && !pluginBean.modules.isEmpty()) {
@@ -259,27 +282,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
}
}
@Nullable
private static List<Element> copyElements(final Element[] elements) {
if (elements != null) {
List<Element> result = new ArrayList<Element>();
for (Element extensionsRoot : elements) {
for (final Object o : extensionsRoot.getChildren()) {
Element element = (Element)o;
internJDOMElement(element);
result.add(element);
}
}
return result;
}
return null;
}
@SuppressWarnings({"HardCodedStringLiteral"})
private static String createDescriptionKey(final PluginId id) {
return "plugin." + id + ".description";
}
void registerExtensionPoints(ExtensionsArea area) {
if (myExtensionsPoints != null) {
for (Element element : myExtensionsPoints.get(area.getAreaClass())) {
@@ -317,7 +319,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myDependencies;
}
@Override
@NotNull
public PluginId[] getOptionalDependentPluginIds() {
@@ -329,6 +330,11 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myVendor;
}
public void setVendor( final String val )
{
myVendor = val;
}
@Override
public String getVersion() {
return myVersion;
@@ -344,6 +350,17 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myCategory;
}
/*
This setter was explicitly defined to be able to set a category for a
descriptor outside its loading from the xml file.
Problem was that most commonly plugin authors do not publish the plugin's
category in its .xml file so to be consistent in plugins representation
(e.g. in the Plugins form) we have to set this value outside.
*/
public void setCategory( String category ){
myCategory = category;
}
@SuppressWarnings("UnusedDeclaration") // Used in Upsource
@Nullable
public MultiMap<String, Element> getExtensionsPoints() {
@@ -418,16 +435,31 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myVendorEmail;
}
public void setVendorEmail( final String val )
{
myVendorEmail = val;
}
@Override
public String getVendorUrl() {
return myVendorUrl;
}
public void setVendorUrl( final String val )
{
myVendorUrl = val;
}
@Override
public String getUrl() {
return url;
}
public void setUrl( final String val )
{
url = val;
}
@NonNls
public String toString() {
return "PluginDescriptor[name='" + myName + "', classpath='" + myPath + "']";
@@ -469,17 +501,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myId;
}
/*
This setter was explicitly defined to be able to set a category for a
descriptor outside its loading from the xml file.
Problem was that most commonly plugin authors do not publish the plugin's
category in its .xml file so to be consistent in plugins representation
(e.g. in the Plugins form) we have to set this value outside.
*/
public void setCategory( String category ){
myCategory = category;
}
/*
This setter was explicitly defined to be able to set downloads count for a
descriptor outside its loading from the xml file since this information
@@ -494,6 +515,10 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myDownloadCounter;
}
public long getDate(){
return myDate;
}
/*
This setter was explicitly defined to be able to set date for a
descriptor outside its loading from the xml file since this information
@@ -503,27 +528,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
myDate = date;
}
public long getDate(){
return myDate;
}
public void setVendor( final String val )
{
myVendor = val;
}
public void setVendorEmail( final String val )
{
myVendorEmail = val;
}
public void setVendorUrl( final String val )
{
myVendorUrl = val;
}
public void setUrl( final String val )
{
url = val;
}
@Override
public ClassLoader getPluginClassLoader() {
return myLoader != null ? myLoader : getClass().getClassLoader();
@@ -534,6 +538,10 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myVendorLogoPath;
}
public void setVendorLogoPath(final String vendorLogoPath) {
myVendorLogoPath = vendorLogoPath;
}
@Override
public boolean getUseIdeaClassLoader() {
return myUseIdeaClassLoader;
@@ -547,10 +555,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
myUseCoreClassLoader = useCoreClassLoader;
}
public void setVendorLogoPath(final String vendorLogoPath) {
myVendorLogoPath = vendorLogoPath;
}
private String computeDescription() {
ResourceBundle bundle = null;
if (myResourceBundleBaseName != null) {
@@ -635,16 +639,6 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
myModuleComponents = mergeComponents(myModuleComponents, descriptor.myModuleComponents);
}
private static ComponentConfig[] mergeComponents(ComponentConfig[] first, ComponentConfig[] second) {
if (first == null) {
return second;
}
if (second == null) {
return first;
}
return ArrayUtil.mergeArrays(first, second);
}
public Boolean getSkipped() {
return mySkipped;
}