diff --git a/plugins/android/resources/messages/AndroidBundle.properties b/plugins/android/resources/messages/AndroidBundle.properties
index d8b2ae99664f..4eb47e0fa348 100644
--- a/plugins/android/resources/messages/AndroidBundle.properties
+++ b/plugins/android/resources/messages/AndroidBundle.properties
@@ -433,4 +433,5 @@ android.inline.file.inline.all.text=Inline &all references and remove the file
android.inline.file.inline.this.text=Inline &this usage and keep the file
android.inline.layout.title=Inline Android Layout
android.facet.importing.notification.group=Importing Error
-android.facet.importing.title=Error when importing module ''{0}''
\ No newline at end of file
+android.facet.importing.title=Error when importing module ''{0}''
+android.find.style.applications.title=Use Style Where Possible
diff --git a/plugins/android/src/META-INF/plugin.xml b/plugins/android/src/META-INF/plugin.xml
index 4fc4d556122f..26ab099ae631 100644
--- a/plugins/android/src/META-INF/plugin.xml
+++ b/plugins/android/src/META-INF/plugin.xml
@@ -97,6 +97,10 @@
+
+
+
JUnit
diff --git a/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java b/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java
index b121358700e3..8264c9690dde 100644
--- a/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java
+++ b/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java
@@ -20,14 +20,13 @@ import com.android.resources.ResourceType;
import com.android.sdklib.SdkConstants;
import com.intellij.openapi.module.Module;
import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiReference;
import com.intellij.psi.xml.XmlAttribute;
+import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.HashMap;
-import com.intellij.util.xml.Converter;
-import com.intellij.util.xml.DomElement;
-import com.intellij.util.xml.ResolvingConverter;
-import com.intellij.util.xml.XmlName;
+import com.intellij.util.xml.*;
import org.jetbrains.android.dom.attrs.AttributeDefinition;
import org.jetbrains.android.dom.attrs.AttributeDefinitions;
import org.jetbrains.android.dom.attrs.AttributeFormat;
@@ -358,4 +357,29 @@ public class AndroidDomUtil {
}
return class2Name.values();
}
+
+ @Nullable
+ public static AndroidResourceReferenceBase getAndroidResourceReference(@Nullable GenericAttributeValue attribute,
+ boolean localOnly) {
+ if (attribute == null) {
+ return null;
+ }
+
+ final ResourceValue resValue = attribute.getValue();
+ if (resValue == null || (localOnly && resValue.getPackage() != null)) {
+ return null;
+ }
+
+ final XmlAttributeValue value = attribute.getXmlAttributeValue();
+ if (value == null) {
+ return null;
+ }
+
+ for (PsiReference reference : value.getReferences()) {
+ if (reference instanceof AndroidResourceReferenceBase) {
+ return (AndroidResourceReferenceBase)reference;
+ }
+ }
+ return null;
+ }
}
diff --git a/plugins/android/src/org/jetbrains/android/refactoring/AndroidAttributeInfo.java b/plugins/android/src/org/jetbrains/android/refactoring/AndroidAttributeInfo.java
index ad649f54877d..9e0d38bc53b8 100644
--- a/plugins/android/src/org/jetbrains/android/refactoring/AndroidAttributeInfo.java
+++ b/plugins/android/src/org/jetbrains/android/refactoring/AndroidAttributeInfo.java
@@ -1,5 +1,6 @@
package org.jetbrains.android.refactoring;
+import com.android.sdklib.SdkConstants;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -16,8 +17,9 @@ class AndroidAttributeInfo {
myPackage = aPackage;
}
- public boolean isSystem() {
- return AndroidUtils.SYSTEM_RESOURCE_PACKAGE.equals(myPackage);
+ public String getNamespace() {
+ final boolean system = AndroidUtils.SYSTEM_RESOURCE_PACKAGE.equals(myPackage);
+ return system ? SdkConstants.NS_RESOURCES : null;
}
@NotNull
diff --git a/plugins/android/src/org/jetbrains/android/refactoring/AndroidExtractStyleAction.java b/plugins/android/src/org/jetbrains/android/refactoring/AndroidExtractStyleAction.java
index 552e88fcf2e4..63269b2d88a5 100644
--- a/plugins/android/src/org/jetbrains/android/refactoring/AndroidExtractStyleAction.java
+++ b/plugins/android/src/org/jetbrains/android/refactoring/AndroidExtractStyleAction.java
@@ -10,10 +10,11 @@ import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlTag;
-import com.intellij.util.ArrayUtil;
+import com.intellij.util.ArrayUtilRt;
import com.intellij.util.Processor;
import com.intellij.util.containers.HashSet;
import org.jetbrains.android.dom.AndroidDomUtil;
@@ -106,6 +107,7 @@ public class AndroidExtractStyleAction extends AndroidBaseLayoutRefactoringActio
final String styleName;
final List styledAttributes;
final Module chosenModule;
+ final boolean searchStyleApplications;
if (testConfig == null) {
final ExtractStyleDialog dialog =
@@ -116,6 +118,7 @@ public class AndroidExtractStyleAction extends AndroidBaseLayoutRefactoringActio
if (!dialog.isOK()) {
return null;
}
+ searchStyleApplications = dialog.isToSearchStyleApplications();
chosenModule = dialog.getChosenModule();
assert chosenModule != null;
@@ -135,8 +138,10 @@ public class AndroidExtractStyleAction extends AndroidBaseLayoutRefactoringActio
styledAttributes.add(attribute);
}
}
+ searchStyleApplications = false;
}
final boolean[] success = {false};
+ final Ref