2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.jetbrains
.idea
.devkit
.dom
.impl
;
18 import com
.intellij
.openapi
.module
.Module
;
19 import com
.intellij
.openapi
.module
.ModuleUtil
;
20 import com
.intellij
.openapi
.project
.Project
;
21 import com
.intellij
.psi
.search
.GlobalSearchScope
;
22 import com
.intellij
.psi
.xml
.XmlFile
;
23 import com
.intellij
.util
.Function
;
24 import com
.intellij
.util
.containers
.CollectionFactory
;
25 import com
.intellij
.util
.containers
.ContainerUtil
;
26 import com
.intellij
.util
.xml
.ConvertContext
;
27 import com
.intellij
.util
.xml
.DomFileElement
;
28 import com
.intellij
.util
.xml
.DomService
;
29 import com
.intellij
.util
.xml
.ResolvingConverter
;
30 import org
.jetbrains
.annotations
.NonNls
;
31 import org
.jetbrains
.annotations
.NotNull
;
32 import org
.jetbrains
.annotations
.Nullable
;
33 import org
.jetbrains
.idea
.devkit
.DevKitBundle
;
34 import org
.jetbrains
.idea
.devkit
.dom
.IdeaPlugin
;
36 import java
.util
.Collection
;
37 import java
.util
.List
;
43 public class IdeaPluginConverter
extends ResolvingConverter
<IdeaPlugin
> {
44 @NonNls private static final Set
<String
> PLATFORM_MODULES
= CollectionFactory
.newTroveSet("com.intellij.modules.platform",
45 "com.intellij.modules.lang",
46 "com.intellij.modules.vcs",
47 "com.intellij.modules.xdebugger",
48 "com.intellij.modules.xml");
51 public Collection
<?
extends IdeaPlugin
> getVariants(final ConvertContext context
) {
52 return collectAllVisiblePlugins(context
.getFile());
57 public Set
<String
> getAdditionalVariants(@NotNull final ConvertContext context
) {
58 return PLATFORM_MODULES
;
62 public String
getErrorMessage(@Nullable final String s
, final ConvertContext context
) {
63 return DevKitBundle
.message("error.cannot.resolve.plugin", s
);
66 public static Collection
<IdeaPlugin
> collectAllVisiblePlugins(@NotNull XmlFile xmlFile
) {
68 Project project
= xmlFile
.getProject();
69 Module module
= ModuleUtil
.findModuleForPsiElement(xmlFile
);
71 GlobalSearchScope scope
= module
== null ? GlobalSearchScope
.allScope(project
) :
72 GlobalSearchScope
.moduleWithDependenciesAndLibrariesScope(module
, true);
73 List
<DomFileElement
<IdeaPlugin
>> files
= DomService
.getInstance().getFileElements(IdeaPlugin
.class, project
, scope
);
74 return ContainerUtil
.map(files
, new Function
<DomFileElement
<IdeaPlugin
>, IdeaPlugin
>() {
75 public IdeaPlugin
fun(DomFileElement
<IdeaPlugin
> ideaPluginDomFileElement
) {
76 return ideaPluginDomFileElement
.getRootElement();
81 public IdeaPlugin
fromString(@Nullable @NonNls final String s
, final ConvertContext context
) {
82 for (IdeaPlugin ideaPlugin
: getVariants(context
)) {
83 final String otherId
= ideaPlugin
.getPluginId();
84 if (otherId
== null) continue;
85 if (otherId
.equals(s
)) return ideaPlugin
;
90 public String
toString(@Nullable final IdeaPlugin ideaPlugin
, final ConvertContext context
) {
91 return ideaPlugin
!= null ? ideaPlugin
.getPluginId() : null;