Search in sources :

Example 1 with Layout

use of org.jetbrains.android.dom.layout.Layout 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;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Also used : Import(org.jetbrains.android.dom.layout.Import) XmlFile(com.intellij.psi.xml.XmlFile) DomManager(com.intellij.util.xml.DomManager) Data(org.jetbrains.android.dom.layout.Data) XmlAttributeValue(com.intellij.psi.xml.XmlAttributeValue) Project(com.intellij.openapi.project.Project) Layout(org.jetbrains.android.dom.layout.Layout) XmlTag(com.intellij.psi.xml.XmlTag)

Aggregations

Project (com.intellij.openapi.project.Project)1 XmlAttributeValue (com.intellij.psi.xml.XmlAttributeValue)1 XmlFile (com.intellij.psi.xml.XmlFile)1 XmlTag (com.intellij.psi.xml.XmlTag)1 DomManager (com.intellij.util.xml.DomManager)1 Data (org.jetbrains.android.dom.layout.Data)1 Import (org.jetbrains.android.dom.layout.Import)1 Layout (org.jetbrains.android.dom.layout.Layout)1