summaryrefslogtreecommitdiff
path: root/plugins/devkit/src
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-05-31 07:45:51 -0700
committerTor Norbye <tnorbye@google.com>2013-05-31 07:45:51 -0700
commitec3fb1e06285c0467a7a20360ca80453bc7635d4 (patch)
tree2402cdec34611f34b8385ff45387d6734bf6f994 /plugins/devkit/src
parenta6eac331b3d9f0d4168b12356ea256c83f4e9c05 (diff)
downloadidea-ec3fb1e06285c0467a7a20360ca80453bc7635d4.tar.gz
Snapshot 568f05589922685b8c8f9a2f2f465043b8128542 from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I47fe8cb5d8a3c9876cd4c313dca1a8cc531288ec
Diffstat (limited to 'plugins/devkit/src')
-rw-r--r--plugins/devkit/src/dom/Action.java4
-rw-r--r--plugins/devkit/src/dom/Dependency.java11
-rw-r--r--plugins/devkit/src/dom/Extension.java5
-rw-r--r--plugins/devkit/src/dom/Group.java4
-rw-r--r--plugins/devkit/src/dom/IdeaPlugin.java4
-rw-r--r--plugins/devkit/src/dom/impl/ExtensionDomExtender.java15
-rw-r--r--plugins/devkit/src/dom/impl/ExtensionNsConverter.java19
-rw-r--r--plugins/devkit/src/dom/impl/InspectionsPropertiesReferenceProviderContributor.java61
-rw-r--r--plugins/devkit/src/dom/impl/InternalDomExtender.java54
-rw-r--r--plugins/devkit/src/dom/impl/PluginFieldNameConverter.java6
-rw-r--r--plugins/devkit/src/inspections/DevKitEntryPoints.java48
-rw-r--r--plugins/devkit/src/inspections/DevKitImplicitUsageProvider.java123
-rw-r--r--plugins/devkit/src/inspections/TitleCapitalizationInspection.java6
-rw-r--r--plugins/devkit/src/references/IconsReferencesContributor.java3
-rw-r--r--plugins/devkit/src/run/PluginConfigurationType.java5
-rw-r--r--plugins/devkit/src/run/PluginRunConfiguration.java18
16 files changed, 287 insertions, 99 deletions
diff --git a/plugins/devkit/src/dom/Action.java b/plugins/devkit/src/dom/Action.java
index 89f354604d07..02ced123b29a 100644
--- a/plugins/devkit/src/dom/Action.java
+++ b/plugins/devkit/src/dom/Action.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ public interface Action extends DomElement {
* @return the value of the popup child.
*/
@NotNull
- GenericAttributeValue<String> getPopup();
+ GenericAttributeValue<Boolean> getPopup();
/**
diff --git a/plugins/devkit/src/dom/Dependency.java b/plugins/devkit/src/dom/Dependency.java
index b2375c8da98d..5847bd54f0d2 100644
--- a/plugins/devkit/src/dom/Dependency.java
+++ b/plugins/devkit/src/dom/Dependency.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,8 +27,9 @@ import org.jetbrains.idea.devkit.dom.impl.IdeaPluginConverter;
@Convert(IdeaPluginConverter.class)
public interface Dependency extends GenericDomValue<IdeaPlugin> {
- @NotNull
- GenericAttributeValue<String> getOptional();
- @NotNull
- GenericAttributeValue<String> getConfigFile();
+ @NotNull
+ GenericAttributeValue<Boolean> getOptional();
+
+ @NotNull
+ GenericAttributeValue<String> getConfigFile();
}
diff --git a/plugins/devkit/src/dom/Extension.java b/plugins/devkit/src/dom/Extension.java
index e7b5d66edc0f..e323308a1e0d 100644
--- a/plugins/devkit/src/dom/Extension.java
+++ b/plugins/devkit/src/dom/Extension.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.jetbrains.idea.devkit.dom;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.GenericAttributeValue;
import com.intellij.util.xml.NameValue;
+import com.intellij.util.xml.Required;
import org.jetbrains.annotations.Nullable;
/**
@@ -26,8 +27,10 @@ import org.jetbrains.annotations.Nullable;
public interface Extension extends DomElement {
@NameValue
+ @Required(value = false)
GenericAttributeValue<String> getId();
+ @Required(value = false)
GenericAttributeValue<String> getOrder();
@Nullable
diff --git a/plugins/devkit/src/dom/Group.java b/plugins/devkit/src/dom/Group.java
index 451e036f551a..930278ce6041 100644
--- a/plugins/devkit/src/dom/Group.java
+++ b/plugins/devkit/src/dom/Group.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ public interface Group extends Actions {
* @return the value of the popup child.
*/
@NotNull
- GenericAttributeValue<String> getPopup();
+ GenericAttributeValue<Boolean> getPopup();
/**
diff --git a/plugins/devkit/src/dom/IdeaPlugin.java b/plugins/devkit/src/dom/IdeaPlugin.java
index 1e93ca342c50..05269bddac4b 100644
--- a/plugins/devkit/src/dom/IdeaPlugin.java
+++ b/plugins/devkit/src/dom/IdeaPlugin.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
package org.jetbrains.idea.devkit.dom;
+import com.intellij.ide.presentation.Presentation;
import com.intellij.util.xml.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -29,6 +30,7 @@ import java.util.List;
* plugin.dtd:idea-plugin interface.
*/
@DefinesXml
+@Presentation(icon = "AllIcons.Nodes.Plugin")
public interface IdeaPlugin extends DomElement {
@Nullable
String getPluginId();
diff --git a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java
index e9f464d6fa58..9df69bca965d 100644
--- a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java
+++ b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java
@@ -21,11 +21,11 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.util.PropertyUtil;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
-import com.intellij.refactoring.psi.PropertyUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.LinkedMultiMap;
import com.intellij.util.containers.MultiMap;
@@ -162,8 +162,8 @@ public class ExtensionDomExtender extends DomExtender<Extensions> {
}
private static void registerField(final DomExtensionsRegistrar registrar, @NotNull final PsiField field, With withElement) {
- final PsiMethod getter = PropertyUtils.findGetterForField(field);
- final PsiMethod setter = PropertyUtils.findSetterForField(field);
+ final PsiMethod getter = PropertyUtil.findGetterForField(field);
+ final PsiMethod setter = PropertyUtil.findSetterForField(field);
if (!field.hasModifierProperty(PsiModifier.PUBLIC) && (getter == null || setter == null)) {
return;
}
@@ -174,9 +174,14 @@ public class ExtensionDomExtender extends DomExtender<Extensions> {
if (attrAnno != null) {
final String attrName = getStringAttribute(attrAnno, "value", evalHelper);
if (attrName != null) {
- boolean isClass = withElement != null || isClassField(fieldName);
+ Class clazz = String.class;
+ if (withElement != null || isClassField(fieldName)) {
+ clazz = PsiClass.class;
+ } else if (field.getType() == PsiType.BOOLEAN) {
+ clazz = Boolean.class;
+ }
final DomExtension extension =
- registrar.registerGenericAttributeValueChildExtension(new XmlName(attrName), isClass ? PsiClass.class : String.class).setDeclaringElement(field);
+ registrar.registerGenericAttributeValueChildExtension(new XmlName(attrName), clazz).setDeclaringElement(field);
markAsClass(extension, fieldName, withElement);
}
return;
diff --git a/plugins/devkit/src/dom/impl/ExtensionNsConverter.java b/plugins/devkit/src/dom/impl/ExtensionNsConverter.java
index 60a5af99474f..12af7b3ae695 100644
--- a/plugins/devkit/src/dom/impl/ExtensionNsConverter.java
+++ b/plugins/devkit/src/dom/impl/ExtensionNsConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,16 +24,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.devkit.dom.IdeaPlugin;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
-/*
-* Created by IntelliJ IDEA.
-* User: sweinreuter
-* Date: 06.12.2007
-*/
+/**
+ * @author Sascha Weinreuter
+ */
public class ExtensionNsConverter extends ResolvingConverter<IdeaPlugin> {
@NotNull
public Collection<? extends IdeaPlugin> getVariants(ConvertContext context) {
@@ -42,10 +37,12 @@ public class ExtensionNsConverter extends ResolvingConverter<IdeaPlugin> {
final Collection<String> dependencies = ExtensionDomExtender.getDependencies(ideaPlugin);
final List<IdeaPlugin> depPlugins = new ArrayList<IdeaPlugin>();
+ final Set<String> depPluginsIds = new HashSet<String>();
for (IdeaPlugin plugin : IdeaPluginConverter.getAllPlugins(context.getProject())) {
final String value = plugin.getPluginId();
- if (value != null && dependencies.contains(value)) {
+ if (value != null && dependencies.contains(value) && !depPluginsIds.contains(value)) {
depPlugins.add(plugin);
+ depPluginsIds.add(value);
}
}
return depPlugins;
diff --git a/plugins/devkit/src/dom/impl/InspectionsPropertiesReferenceProviderContributor.java b/plugins/devkit/src/dom/impl/InspectionsPropertiesReferenceProviderContributor.java
index de5ab53b5dab..e8a3401e0f3c 100644
--- a/plugins/devkit/src/dom/impl/InspectionsPropertiesReferenceProviderContributor.java
+++ b/plugins/devkit/src/dom/impl/InspectionsPropertiesReferenceProviderContributor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,25 +15,70 @@
*/
package org.jetbrains.idea.devkit.dom.impl;
+import com.intellij.codeInsight.lookup.LookupElement;
+import com.intellij.codeInsight.lookup.LookupElementBuilder;
+import com.intellij.lang.properties.PropertiesFileProcessor;
+import com.intellij.lang.properties.PropertiesReferenceManager;
+import com.intellij.lang.properties.ResourceBundleReference;
+import com.intellij.lang.properties.psi.PropertiesFile;
+import com.intellij.openapi.util.Iconable;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.XmlPatterns;
-import com.intellij.psi.PsiReferenceContributor;
-import com.intellij.psi.PsiReferenceRegistrar;
+import com.intellij.psi.*;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.util.ProcessingContext;
+import org.jetbrains.annotations.NotNull;
-import static com.intellij.patterns.StandardPatterns.string;
+import java.util.ArrayList;
+import java.util.List;
/**
* User: anna
* Date: 10/7/11
*/
public class InspectionsPropertiesReferenceProviderContributor extends PsiReferenceContributor {
+
+ private static final String[] EXTENSION_TAG_NAMES = new String[]{
+ "localInspection", "globalInspection",
+ "configurable", "applicationConfigurable", "projectConfigurable"
+ };
+
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
- ElementPattern pattern = XmlPatterns.xmlAttributeValue()
- .withParent(XmlPatterns.xmlAttribute().withLocalName("key", "groupKey")
- .withParent(XmlPatterns.xmlTag().withName("localInspection", "globalInspection")
- .withSuperParent(2, XmlPatterns.xmlTag().withName("idea-plugin"))));
+ ElementPattern pattern = createPattern("key", "groupKey");
registrar.registerReferenceProvider(pattern, new InspectionsKeyPropertiesReferenceProvider(false),
PsiReferenceRegistrar.DEFAULT_PRIORITY);
+
+ ElementPattern bundlePattern = createPattern("bundle", "groupBundle");
+ registrar.registerReferenceProvider(bundlePattern, new PsiReferenceProvider() {
+ @NotNull
+ @Override
+ public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
+ ResourceBundleReference reference = new ResourceBundleReference(element, false) {
+ @NotNull
+ @Override
+ public Object[] getVariants() {
+ PropertiesReferenceManager referenceManager = PropertiesReferenceManager.getInstance(myElement.getProject());
+ final List<LookupElement> variants = new ArrayList<LookupElement>();
+ referenceManager.processPropertiesFiles(GlobalSearchScope.projectScope(myElement.getProject()), new PropertiesFileProcessor() {
+ public boolean process(String baseName, PropertiesFile propertiesFile) {
+ variants.add(LookupElementBuilder.create(propertiesFile, baseName)
+ .withIcon(propertiesFile.getContainingFile().getIcon(Iconable.ICON_FLAG_READ_STATUS)));
+ return true;
+ }
+ }, this);
+ return variants.toArray(new LookupElement[variants.size()]);
+ }
+ };
+ return new PsiReference[]{reference};
+ }
+ }, PsiReferenceRegistrar.DEFAULT_PRIORITY);
+ }
+
+ private static ElementPattern createPattern(String... attributeNames) {
+ return XmlPatterns.xmlAttributeValue()
+ .withParent(XmlPatterns.xmlAttribute().withLocalName(attributeNames)
+ .withParent(XmlPatterns.xmlTag().withName(EXTENSION_TAG_NAMES)
+ .withSuperParent(2, XmlPatterns.xmlTag().withName("idea-plugin"))));
}
} \ No newline at end of file
diff --git a/plugins/devkit/src/dom/impl/InternalDomExtender.java b/plugins/devkit/src/dom/impl/InternalDomExtender.java
new file mode 100644
index 000000000000..a41dd535cc03
--- /dev/null
+++ b/plugins/devkit/src/dom/impl/InternalDomExtender.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.idea.devkit.dom.impl;
+
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.util.xml.XmlName;
+import com.intellij.util.xml.converters.values.BooleanValueConverter;
+import com.intellij.util.xml.reflect.DomExtender;
+import com.intellij.util.xml.reflect.DomExtensionsRegistrar;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.idea.devkit.dom.Action;
+import org.jetbrains.idea.devkit.dom.Group;
+
+/**
+ * @author Yann C&eacute;bron
+ */
+public class InternalDomExtender {
+
+ private static void addInternalAttribute(@NotNull DomExtensionsRegistrar registrar, Class clazz) {
+ if (!ApplicationManager.getApplication().isInternal()) {
+ return;
+ }
+
+ registrar.registerGenericAttributeValueChildExtension(new XmlName("internal"), clazz)
+ .setConverter(BooleanValueConverter.getInstance(false));
+ }
+
+ public static class ForAction extends DomExtender<Action> {
+ @Override
+ public void registerExtensions(@NotNull Action action, @NotNull DomExtensionsRegistrar registrar) {
+ addInternalAttribute(registrar, Action.class);
+ }
+ }
+
+ public static class ForGroup extends DomExtender<Group> {
+ @Override
+ public void registerExtensions(@NotNull Group group, @NotNull DomExtensionsRegistrar registrar) {
+ addInternalAttribute(registrar, Group.class);
+ }
+ }
+}
diff --git a/plugins/devkit/src/dom/impl/PluginFieldNameConverter.java b/plugins/devkit/src/dom/impl/PluginFieldNameConverter.java
index 115e9f995ada..0ac67e186f81 100644
--- a/plugins/devkit/src/dom/impl/PluginFieldNameConverter.java
+++ b/plugins/devkit/src/dom/impl/PluginFieldNameConverter.java
@@ -16,7 +16,7 @@
package org.jetbrains.idea.devkit.dom.impl;
import com.intellij.psi.*;
-import com.intellij.refactoring.psi.PropertyUtils;
+import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.xml.ConvertContext;
import com.intellij.util.xml.ResolvingConverter;
import com.intellij.util.xmlb.annotations.Attribute;
@@ -82,8 +82,8 @@ public class PluginFieldNameConverter extends ResolvingConverter<PsiField> {
public static String getAnnotationValue(PsiField psiField, Class annotationClass) {
final PsiConstantEvaluationHelper evalHelper = JavaPsiFacade.getInstance(psiField.getProject()).getConstantEvaluationHelper();
- final PsiMethod getter = PropertyUtils.findGetterForField(psiField);
- final PsiMethod setter = PropertyUtils.findSetterForField(psiField);
+ final PsiMethod getter = PropertyUtil.findGetterForField(psiField);
+ final PsiMethod setter = PropertyUtil.findSetterForField(psiField);
final PsiAnnotation attrAnno = ExtensionDomExtender.findAnnotation(annotationClass, psiField, getter, setter);
if (attrAnno != null) {
return ExtensionDomExtender.getStringAttribute(attrAnno, "value", evalHelper);
diff --git a/plugins/devkit/src/inspections/DevKitEntryPoints.java b/plugins/devkit/src/inspections/DevKitEntryPoints.java
deleted file mode 100644
index cabcbe6fd4d5..000000000000
--- a/plugins/devkit/src/inspections/DevKitEntryPoints.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2000-2011 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.idea.devkit.inspections;
-
-import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiElement;
-
-/**
- * User: anna
- */
-public class DevKitEntryPoints implements ImplicitUsageProvider {
- @Override
- public boolean isImplicitUsage(PsiElement element) {
- if (element instanceof PsiClass) {
- final PsiClass domClass =
- JavaPsiFacade.getInstance(element.getProject()).findClass("com.intellij.util.xml.DomElement", element.getResolveScope());
- if (domClass != null && ((PsiClass)element).isInheritor(domClass, true)) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean isImplicitRead(PsiElement element) {
- return false;
- }
-
- @Override
- public boolean isImplicitWrite(PsiElement element) {
- return false;
- }
-}
diff --git a/plugins/devkit/src/inspections/DevKitImplicitUsageProvider.java b/plugins/devkit/src/inspections/DevKitImplicitUsageProvider.java
new file mode 100644
index 000000000000..fa87c70ad337
--- /dev/null
+++ b/plugins/devkit/src/inspections/DevKitImplicitUsageProvider.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.idea.devkit.inspections;
+
+import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
+import com.intellij.psi.*;
+import com.intellij.psi.util.InheritanceUtil;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author anna
+ */
+public class DevKitImplicitUsageProvider implements ImplicitUsageProvider {
+
+ @Override
+ public boolean isImplicitUsage(PsiElement element) {
+ if (element instanceof PsiClass) {
+ final PsiClass psiClass = (PsiClass)element;
+ return isDomElementClass(psiClass);
+ }
+
+ if (element instanceof PsiMethod) {
+ PsiMethod psiMethod = (PsiMethod)element;
+ return isDomElementMethod(psiMethod);
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean isImplicitRead(PsiElement element) {
+ return false;
+ }
+
+ @Override
+ public boolean isImplicitWrite(PsiElement element) {
+ return false;
+ }
+
+ private static boolean isDomElementClass(PsiClass psiClass) {
+ if (psiClass.isEnum() ||
+ psiClass.isAnnotationType() ||
+ psiClass.hasModifierProperty(PsiModifier.PRIVATE)) {
+ return false;
+ }
+
+ return isDomElementInheritor(psiClass);
+ }
+
+ private static boolean isDomElementMethod(PsiMethod psiMethod) {
+ if (!psiMethod.hasModifierProperty(PsiModifier.PUBLIC) ||
+ psiMethod.hasModifierProperty(PsiModifier.STATIC) ||
+ psiMethod.isConstructor() ||
+ psiMethod.getParameterList().getParametersCount() > 1) {
+ return false;
+ }
+
+ final PsiClass containingClass = psiMethod.getContainingClass();
+ if (containingClass == null) {
+ return false;
+ }
+
+ if (!isDomElementClass(containingClass)) {
+ return isDomElementVisitorMethod(psiMethod, containingClass);
+ }
+
+ final PsiType returnType = psiMethod.getReturnType();
+ if (!(returnType instanceof PsiClassType)) {
+ return false;
+ }
+
+ PsiClassType returnClassType = (PsiClassType)returnType;
+
+ // Dom getDom(), GenericAttributeValue<X> getAttr(), ...
+ final PsiClass returnResolved = returnClassType.resolve();
+ if (isDomElementInheritor(returnResolved)) {
+ return true;
+ }
+
+ // List<Dom> getDoms()
+ if (returnClassType.getParameterCount() == 1 &&
+ InheritanceUtil.isInheritor(returnResolved, CommonClassNames.JAVA_UTIL_LIST)) {
+ final PsiType listType = returnClassType.getParameters()[0];
+ return isDomElementInheritor(listType);
+ }
+
+ return false;
+ }
+
+ private static boolean isDomElementVisitorMethod(PsiMethod method,
+ PsiClass containingClass) {
+ if (method.getReturnType() != PsiType.VOID ||
+ !method.getName().startsWith("visit") ||
+ method.getParameterList().getParametersCount() != 1 ||
+ !InheritanceUtil.isInheritor(containingClass, "com.intellij.util.xml.DomElementVisitor")) {
+ return false;
+ }
+
+ final PsiType psiType = method.getParameterList().getParameters()[0].getType();
+ return isDomElementInheritor(psiType);
+ }
+
+ private static boolean isDomElementInheritor(@Nullable PsiType psiType) {
+ return InheritanceUtil.isInheritor(psiType, "com.intellij.util.xml.DomElement");
+ }
+
+ private static boolean isDomElementInheritor(@Nullable PsiClass psiClass) {
+ return InheritanceUtil.isInheritor(psiClass, "com.intellij.util.xml.DomElement");
+ }
+} \ No newline at end of file
diff --git a/plugins/devkit/src/inspections/TitleCapitalizationInspection.java b/plugins/devkit/src/inspections/TitleCapitalizationInspection.java
index 7f9af1399fea..6fa8eb70165f 100644
--- a/plugins/devkit/src/inspections/TitleCapitalizationInspection.java
+++ b/plugins/devkit/src/inspections/TitleCapitalizationInspection.java
@@ -27,7 +27,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.refactoring.psi.PropertyUtils;
+import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nls;
@@ -129,7 +129,7 @@ public class TitleCapitalizationInspection extends BaseJavaLocalInspectionTool {
}
if (arg instanceof PsiMethodCallExpression) {
PsiMethod psiMethod = ((PsiMethodCallExpression)arg).resolveMethod();
- PsiExpression returnValue = PropertyUtils.getGetterReturnExpression(psiMethod);
+ PsiExpression returnValue = PropertyUtil.getGetterReturnExpression(psiMethod);
if (returnValue != null) {
return getTitleValue(returnValue);
}
@@ -223,7 +223,7 @@ public class TitleCapitalizationInspection extends BaseJavaLocalInspectionTool {
}else if (element instanceof PsiMethodCallExpression) {
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)element;
final PsiMethod method = methodCallExpression.resolveMethod();
- final PsiExpression returnValue = PropertyUtils.getGetterReturnExpression(method);
+ final PsiExpression returnValue = PropertyUtil.getGetterReturnExpression(method);
if (returnValue != null) {
doFix(project, returnValue);
}
diff --git a/plugins/devkit/src/references/IconsReferencesContributor.java b/plugins/devkit/src/references/IconsReferencesContributor.java
index bdffe582031f..dba2102488b0 100644
--- a/plugins/devkit/src/references/IconsReferencesContributor.java
+++ b/plugins/devkit/src/references/IconsReferencesContributor.java
@@ -35,6 +35,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceUtil;
+import com.intellij.psi.impl.source.resolve.reference.impl.providers.PsiFileReference;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
@@ -313,7 +314,7 @@ public class IconsReferencesContributor extends PsiReferenceContributor implemen
value = value.getParent();
}
if (value != null) {
- final FileReference reference = FileReferenceUtil.findFileReference(value);
+ final PsiFileReference reference = FileReferenceUtil.findFileReference(value);
if (reference != null) {
consumer.process(reference);
}
diff --git a/plugins/devkit/src/run/PluginConfigurationType.java b/plugins/devkit/src/run/PluginConfigurationType.java
index 569c5ccc7040..8f7394aadeb0 100644
--- a/plugins/devkit/src/run/PluginConfigurationType.java
+++ b/plugins/devkit/src/run/PluginConfigurationType.java
@@ -48,6 +48,11 @@ public class PluginConfigurationType implements ConfigurationType {
return runConfiguration;
}
+ @Override
+ public boolean isConfigurationSingletonByDefault() {
+ return true;
+ }
+
public RunConfiguration createConfiguration(String name, RunConfiguration template) {
final PluginRunConfiguration pluginRunConfiguration = (PluginRunConfiguration)template;
if (pluginRunConfiguration.getModule() == null) {
diff --git a/plugins/devkit/src/run/PluginRunConfiguration.java b/plugins/devkit/src/run/PluginRunConfiguration.java
index e71ee7e155e6..610b47fc0241 100644
--- a/plugins/devkit/src/run/PluginRunConfiguration.java
+++ b/plugins/devkit/src/run/PluginRunConfiguration.java
@@ -21,7 +21,6 @@ import com.intellij.execution.Executor;
import com.intellij.execution.configurations.*;
import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.runners.ExecutionEnvironment;
-import com.intellij.execution.runners.ProgramRunner;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
@@ -63,18 +62,12 @@ public class PluginRunConfiguration extends RunConfigurationBase implements Modu
super(project, factory, name);
}
+ @Override
public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
return new PluginRunConfigurationEditor(this);
}
- public JDOMExternalizable createRunnerSettings(ConfigurationInfoProvider provider) {
- return null;
- }
-
- public SettingsEditor<JDOMExternalizable> getRunnerSettingsEditor(ProgramRunner runner) {
- return null;
- }
-
+ @Override
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
if (getModule() == null){
throw new ExecutionException(DevKitBundle.message("run.configuration.no.module.specified"));
@@ -107,6 +100,7 @@ public class PluginRunConfiguration extends RunConfigurationBase implements Modu
IdeaLicenseHelper.copyIDEALicense(sandboxHome, ideaJdk);
final JavaCommandLineState state = new JavaCommandLineState(env) {
+ @Override
protected JavaParameters createJavaParameters() throws ExecutionException {
final JavaParameters params = new JavaParameters();
@@ -223,11 +217,13 @@ public class PluginRunConfiguration extends RunConfigurationBase implements Modu
}
}
+ @Override
public void checkConfiguration() throws RuntimeConfigurationException {
if (getModule() == null) {
throw new RuntimeConfigurationException(DevKitBundle.message("run.configuration.no.module.specified"));
}
String moduleName = ApplicationManager.getApplication().runReadAction(new Computable<String>() {
+ @Override
public String compute() {
return getModule().getName();
}
@@ -246,12 +242,14 @@ public class PluginRunConfiguration extends RunConfigurationBase implements Modu
}
+ @Override
@NotNull
public Module[] getModules() {
final Module module = getModule();
return module != null ? new Module[]{module} : Module.EMPTY_ARRAY;
}
+ @Override
public void readExternal(Element element) throws InvalidDataException {
Element module = element.getChild(MODULE);
if (module != null) {
@@ -267,9 +265,11 @@ public class PluginRunConfiguration extends RunConfigurationBase implements Modu
super.readExternal(element);
}
+ @Override
public void writeExternal(Element element) throws WriteExternalException {
Element moduleElement = new Element(MODULE);
moduleElement.setAttribute(NAME, ApplicationManager.getApplication().runReadAction(new Computable<String>() {
+ @Override
public String compute() {
final Module module = getModule();
return module != null ? module.getName()