blob: d4e473fb65413411a98c6a226c65c90d11a84463 [file] [log] [blame]
package org.jetbrains.android.refactoring;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.util.containers.HashMap;
import org.jetbrains.android.dom.resources.ResourceValue;
import org.jetbrains.android.dom.resources.Style;
import org.jetbrains.android.dom.resources.StyleItem;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.android.util.ErrorReporter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidRefactoringUtil {
private AndroidRefactoringUtil() {
}
@Nullable
static StyleRefData getParentStyle(@NotNull Style style) {
final ResourceValue parentStyleRefValue = style.getParentStyle().getValue();
if (parentStyleRefValue != null) {
final String parentStyleName = parentStyleRefValue.getResourceName();
if (parentStyleName != null) {
return new StyleRefData(parentStyleName, parentStyleRefValue.getPackage());
}
}
else {
final String styleName = style.getName().getStringValue();
if (styleName != null) {
final int idx = styleName.lastIndexOf('.');
if (idx > 0) {
return new StyleRefData(styleName.substring(0, idx), null);
}
}
}
return null;
}
@Nullable
static Map<AndroidAttributeInfo, String> computeAttributeMap(@NotNull Style style,
@NotNull ErrorReporter errorReporter,
@NotNull String errorReportTitle) {
final Map<AndroidAttributeInfo, String> attributeValues = new HashMap<AndroidAttributeInfo, String>();
for (StyleItem item : style.getItems()) {
final String attributeName = item.getName().getStringValue();
String attributeValue = item.getStringValue();
if (attributeName == null || attributeName.length() <= 0 || attributeValue == null) {
continue;
}
final int idx = attributeName.indexOf(':');
final String localName = idx >= 0 ? attributeName.substring(idx + 1) : attributeName;
final String nsPrefix = idx >= 0 ? attributeName.substring(0, idx) : null;
if (nsPrefix != null) {
if (!AndroidUtils.SYSTEM_RESOURCE_PACKAGE.equals(nsPrefix)) {
errorReporter.report(RefactoringBundle.getCannotRefactorMessage("Unknown XML attribute prefix '" + nsPrefix + ":'"),
errorReportTitle);
return null;
}
}
else {
errorReporter.report(
RefactoringBundle.getCannotRefactorMessage("The style contains attribute without 'android' prefix."),
errorReportTitle);
return null;
}
attributeValues.put(new AndroidAttributeInfo(localName, nsPrefix), attributeValue);
}
return attributeValues;
}
}