/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.psi.util; import com.intellij.psi.PsiElement; import gw.plugin.ij.lang.GosuTokenSets; import gw.plugin.ij.lang.psi.api.types.IGosuCodeReferenceElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class PsiUtil { private PsiUtil() { } @Nullable public static String getQualifiedReferenceText(@NotNull IGosuCodeReferenceElement referenceElement) { StringBuilder builder = new StringBuilder(); if (!appendName(referenceElement, builder)) { return null; } return builder.toString(); } private static boolean appendName(@NotNull IGosuCodeReferenceElement referenceElement, @NotNull StringBuilder builder) { String refName = referenceElement.getReferenceName(); if (refName == null) { return false; } IGosuCodeReferenceElement qualifier = referenceElement.getQualifier(); if (qualifier != null) { appendName(qualifier, builder); builder.append("."); } builder.append(refName); return true; } @Nullable public static PsiElement skipWhitespaces(@Nullable PsiElement elem, boolean forward) { //noinspection ConstantConditions while (elem != null && elem.getNode() != null && GosuTokenSets.WHITE_SPACES_OR_COMMENTS.contains(elem.getNode().getElementType())) { if (forward) { elem = elem.getNextSibling(); } else { elem = elem.getPrevSibling(); } } return elem; } }