Package wicketforge.psi.hierarchy

Source Code of wicketforge.psi.hierarchy.HierarchyUtil

/*
* Copyright 2010 The WicketForge-Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package wicketforge.psi.hierarchy;

import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import wicketforge.Constants;
import wicketforge.util.WicketPsiUtil;

import java.util.Map;

public final class HierarchyUtil {
    private HierarchyUtil() {
    }

    @Nullable
    public static String findPathOf(@NotNull PsiClass psiClass, @NotNull PsiExpression wicketIdExpression, boolean parent, boolean incomplete) {
        ClassWicketIdHierarchy hierarchy = ClassWicketIdHierarchy.create(psiClass);
        for (Map.Entry<String, ClassWicketIdItem> entry : hierarchy.getWicketIdPathMap().entrySet()) {
            for (ClassWicketIdNewComponentItem newComponentItem : entry.getValue().getNewComponentItems()) {
                if (wicketIdExpression.equals(newComponentItem.getWicketIdExpression())) {
                    String path = entry.getKey();
                    return parent ? path.substring(0, path.lastIndexOf(Constants.HIERARCHYSEPARATOR)) : path;
                }
            }
        }
        if (incomplete) {
            // ok, wicket expression is not added yet so we dont know hierarchy of our component
            // lets try to find textual position in hierarchy, not best method but we have no other option
            // If component gets added later, correct hierarchy gets checked...
            final TextRange wicketIdTextRange = wicketIdExpression.getTextRange();
            String bestPath = "";
            TextRange bestTextRange = psiClass.getTextRange();
            // go thru all new references
            for (Map.Entry<String, ClassWicketIdItem> entry : hierarchy.getWicketIdPathMap().entrySet()) {
                for (ClassWicketIdNewComponentItem newComponentItem : entry.getValue().getNewComponentItems()) {
                    TextRange textRange = newComponentItem.getCallExpression().getTextRange();
                    // if wicketId is in new-references-textRange and this is inner of current best...
                    if (textRange.contains(wicketIdTextRange) && bestTextRange.contains(textRange)) {
                        // then we have a better candidate
                        bestTextRange = textRange;
                        bestPath = entry.getKey();
                    }
                }
            }
            return parent ? bestPath : bestPath + Constants.HIERARCHYSEPARATOR + WicketPsiUtil.getWicketIdFromExpression(wicketIdExpression);
        }
        return null;
    }

    @Nullable
    public static String findPathOf(@NotNull XmlAttributeValue attributeValue, boolean parent) {
        PsiFile psiFile = attributeValue.getContainingFile();
        if (psiFile instanceof XmlFile) {
            MarkupWicketIdHierarchy hierarchy = MarkupWicketIdHierarchy.create((XmlFile) psiFile);
            for (Map.Entry<String, MarkupWicketIdItem> entry : hierarchy.getWicketIdPathMap().entrySet()) {
                if (attributeValue.equals(entry.getValue().getAttributeValue())) {
                    String path = entry.getKey();
                    return parent ? path.substring(0, path.lastIndexOf(Constants.HIERARCHYSEPARATOR)) : path;
                }
            }
        }
        return null;
    }
}
TOP

Related Classes of wicketforge.psi.hierarchy.HierarchyUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.