use of org.jetbrains.android.dom.converters.AndroidResourceReferenceBase in project android by JetBrains.
the class AndroidInlineStyleReferenceAction method doRefactorForTags.
@Override
protected void doRefactorForTags(@NotNull Project project, @NotNull final XmlTag[] tags) {
assert tags.length == 1;
final XmlTag tag = tags[0];
final PsiFile file = tag.getContainingFile();
if (file == null) {
return;
}
final StyleUsageData usageData = AndroidInlineUtil.getStyleUsageData(tag);
if (usageData == null) {
return;
}
final AndroidResourceReferenceBase reference = usageData.getReference();
final String title = AndroidBundle.message("android.inline.style.title");
final PsiElement[] styleElements = reference.computeTargetElements();
if (styleElements.length == 0) {
AndroidUtils.reportError(project, "Cannot find style by reference '" + reference.getValue() + "'", title);
return;
}
if (styleElements.length > 1) {
AndroidUtils.reportError(project, RefactoringBundle.getCannotRefactorMessage("Unambiguous style reference."), title);
return;
}
final PsiElement styleElement = styleElements[0];
final XmlTag styleTag = PsiTreeUtil.getParentOfType(styleElement, XmlTag.class);
final DomElement domElement = styleTag != null ? DomManager.getDomManager(project).getDomElement(styleTag) : null;
if (!(domElement instanceof Style)) {
AndroidUtils.reportError(project, "Cannot find style by reference '" + reference.getValue() + "'", title);
return;
}
final Style style = (Style) domElement;
String styleName = style.getName().getStringValue();
if (styleName == null) {
AndroidUtils.reportError(project, RefactoringBundle.getCannotRefactorMessage("Style name is not specified."), title);
return;
}
AndroidInlineUtil.doInlineStyleDeclaration(project, new AndroidInlineUtil.MyStyleData(styleName, style, styleElement), usageData, new ProjectBasedErrorReporter(project), myTestConfig);
}
use of org.jetbrains.android.dom.converters.AndroidResourceReferenceBase in project android by JetBrains.
the class AndroidInlineUtil method getStyleUsageData.
@Nullable
static StyleUsageData getStyleUsageData(@NotNull XmlTag tag) {
final DomElement domElement = DomManager.getDomManager(tag.getProject()).getDomElement(tag);
if (domElement instanceof LayoutViewElement) {
final GenericAttributeValue<ResourceValue> styleAttribute = ((LayoutViewElement) domElement).getStyle();
final AndroidResourceReferenceBase reference = AndroidDomUtil.getAndroidResourceReference(styleAttribute, true);
if (reference != null) {
return new ViewStyleUsageData(tag, styleAttribute, reference);
}
} else if (domElement instanceof Style) {
final AndroidResourceReferenceBase reference = AndroidDomUtil.getAndroidResourceReference(((Style) domElement).getParentStyle(), true);
if (reference != null) {
return new ParentStyleUsageData((Style) domElement, reference);
}
}
return null;
}
use of org.jetbrains.android.dom.converters.AndroidResourceReferenceBase in project android by JetBrains.
the class AndroidInlineLayoutHandler method inlineElement.
@Override
public void inlineElement(Project project, Editor editor, PsiElement element) {
if (element instanceof ResourceElementWrapper) {
element = ((ResourceElementWrapper) element).getWrappee();
}
if (element instanceof XmlFile) {
PsiElement usageElement = null;
if (editor != null) {
final PsiReference reference = TargetElementUtil.findReference(editor);
if (reference != null) {
usageElement = reference.getElement();
}
}
AndroidInlineUtil.doInlineLayoutFile(project, (XmlFile) element, usageElement, ourTestConfig);
return;
}
final LayoutUsageData usageData = getLayoutUsageDataFromContext(editor);
assert usageData != null;
final AndroidResourceReferenceBase ref = usageData.getReference();
final PsiElement[] elements = ref.computeTargetElements();
final ErrorReporter errorReporter = editor != null ? new HintBasedErrorReporter(editor) : new ProjectBasedErrorReporter(project);
final String title = AndroidBundle.message("android.inline.layout.title");
if (elements.length == 0) {
final String resName = ref.getResourceValue().getResourceName();
final String message = resName != null ? "Cannot find layout '" + resName + "'" : "Error: cannot find the layout";
errorReporter.report(message, title);
return;
}
if (elements.length > 1) {
errorReporter.report("Error: unambiguous reference", title);
return;
}
final PsiElement resolvedElement = elements[0];
if (!(resolvedElement instanceof XmlFile)) {
errorReporter.report("Cannot inline reference '" + ref.getValue() + "'", title);
return;
}
AndroidInlineUtil.doInlineLayoutFile(project, (XmlFile) resolvedElement, ref.getElement(), ourTestConfig);
}
use of org.jetbrains.android.dom.converters.AndroidResourceReferenceBase in project android by JetBrains.
the class AndroidInlineStyleHandler method inlineElement.
@Override
public void inlineElement(Project project, final Editor editor, PsiElement element) {
final AndroidInlineUtil.MyStyleData data = AndroidInlineUtil.getInlinableStyleDataFromContext(element);
if (data != null) {
final ErrorReporter reporter = editor != null ? new HintBasedErrorReporter(editor) : new ProjectBasedErrorReporter(project);
StyleUsageData usageData = null;
if (editor != null) {
final PsiReference reference = TargetElementUtil.findReference(editor);
if (reference instanceof AndroidResourceReferenceBase) {
usageData = getUsageDataFromEditor(reference);
}
}
AndroidInlineUtil.doInlineStyleDeclaration(project, data, usageData, reporter, ourTestConfig);
}
}
use of org.jetbrains.android.dom.converters.AndroidResourceReferenceBase in project android by JetBrains.
the class AndroidInlineUtil method getLayoutUsageData.
@Nullable
static LayoutUsageData getLayoutUsageData(@NotNull XmlTag tag) {
final Project project = tag.getProject();
final DomElement domElement = DomManager.getDomManager(project).getDomElement(tag);
if (domElement instanceof Include) {
final GenericAttributeValue<ResourceValue> layoutAttribute = ((Include) domElement).getLayout();
final AndroidResourceReferenceBase reference = AndroidDomUtil.getAndroidResourceReference(layoutAttribute, true);
if (reference != null) {
return new LayoutUsageData(project, tag, reference);
}
}
return null;
}
Aggregations