use of org.jetbrains.android.dom.wrappers.ResourceElementWrapper 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);
}
Aggregations