use of org.jetbrains.android.dom.layout.Import in project android by JetBrains.
the class DataBindingCompletionUtil method fillAliases.
/**
* Add completion suggestions for classes included via {@code <import>}s.
* @param resultSet the set to add the suggestions to.
*/
private static void fillAliases(@NotNull CompletionResultSet resultSet, @NotNull String packagePrefix, @NotNull PsiElement originalPosition, @NotNull Module module, @NotNull PsiElement originalParent) {
PsiFile containingFile = getRealContainingFile(originalParent.getContainingFile());
if (containingFile instanceof XmlFile) {
final Project project = module.getProject();
DomManager domManager = DomManager.getDomManager(project);
XmlTag tag = PsiTreeUtil.getParentOfType(originalPosition, XmlTag.class, false, PsiFile.class);
if (domManager.getDomElement(tag) instanceof Import) {
// No referencing aliases in import tags.
return;
}
DomFileElement<Layout> file = domManager.getFileElement((XmlFile) containingFile, Layout.class);
if (file != null) {
JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
for (Data data : file.getRootElement().getDatas()) {
for (Import anImport : data.getImports()) {
String alias = AndroidLayoutUtil.getAlias(anImport);
if (packagePrefix.isEmpty()) {
XmlAttributeValue type = anImport.getType().getXmlAttributeValue();
if (type != null && alias != null) {
String typeValue = type.getValue().replace('$', '.');
PsiClass aClass = facade.findClass(typeValue, module.getModuleWithDependenciesAndLibrariesScope(false));
if (aClass != null) {
resultSet.addElement(getClassReferenceElement(alias, aClass));
}
}
} else {
int i = packagePrefix.indexOf('.');
String possibleAlias = i < 0 ? packagePrefix : packagePrefix.substring(0, i);
if (possibleAlias.equals(alias)) {
String type = anImport.getType().getStringValue();
if (type != null) {
String fqcn = packagePrefix.equals(alias) ? type : type + packagePrefix.substring(alias.length());
PsiClass aClass = facade.findClass(fqcn, module.getModuleWithDependenciesAndLibrariesScope(false));
if (aClass != null) {
for (PsiClass innerClass : aClass.getInnerClasses()) {
String name = innerClass.getQualifiedName();
if (name != null) {
resultSet.addElement(getClassReferenceElement(name.substring(type.length() + 1), innerClass));
}
}
break;
}
}
}
}
}
}
}
}
}
Aggregations