public static ASTNode createSimpleNodeWithText(String text, Project project) {
   assert !text.contains(" ") : "name cannot contain white spaces";
   PsiFileFactory psiFileFactory = PsiFileFactory.getInstance(project);
   PbFile dummyFile =
       (PbFile)
           psiFileFactory.createFileFromText(
               "DUMMY_SET_NAME", PbFileType.PROTOBUF_FILE_TYPE, "message " + text + " {}");
   PbMessageDef dummyMessage = (PbMessageDef) PbPsiUtil.getChild(dummyFile, 0, true, true, false);
   PsiElement newNameElement = dummyMessage.getNameElement();
   return newNameElement.getNode();
 }
 public static PsiElement getChild(
     final PsiElement parent,
     int position,
     boolean ignoreWhiteSpaces,
     boolean ignoreComments,
     boolean ignoreErrors) {
   PsiElement curChild = parent.getFirstChild();
   int i = 0;
   while (i <= position && curChild != null) {
     if (WHITE_SPACES.contains(curChild.getNode().getElementType())) {
       if (!ignoreWhiteSpaces) i++;
       curChild = curChild.getNextSibling();
     } else if (COMMENTS.contains(curChild.getNode().getElementType())) {
       if (!ignoreComments) i++;
       curChild = curChild.getNextSibling();
     } else if (curChild instanceof PsiErrorElement) {
       if (!ignoreErrors) {
         return null;
       }
       i++;
       curChild = curChild.getNextSibling();
     } else {
       if (i == position) return curChild;
       i++;
       curChild = curChild.getNextSibling();
     }
   }
   return null;
 }
 public static PsiElement getUpperScope(final PsiElement element) {
   if (element instanceof PsiPackage) {
     return ((PsiPackage) element).getParentPackage();
   }
   if (element instanceof PbFile) {
     JavaPsiFacade facade = JavaPsiFacade.getInstance(element.getManager().getProject());
     return facade.findPackage(((PbFile) element).getPackageName());
   }
   if (element instanceof PbPsiElement) {
     PbPsiElement scope = (PbPsiElement) element.getParent();
     while (scope != null && !(scope instanceof PbFile) && !(scope instanceof PbBlock)) {
       scope = (PbPsiElement) scope.getParent();
     }
     /* // TC: This seems to skip from message block scope to package scope, preventing finding other messages
     defined in the same file.  Commenting out for now, since I don't see a good reason for it.
     if (scope instanceof PbFile) {
         JavaPsiFacade facade = JavaPsiFacade.getInstance(scope.getManager().getProject());
         return facade.findPackage(((PbFile) scope).getPackageName());
     }*/
     return scope;
   }
   assert false;
   return null;
 }
 public static boolean sameType(PsiElement element, IElementType type) {
   return type.equals(element.getNode().getElementType());
 }
 public static PsiElement getRootScope(final PsiElement element) {
   return JavaPsiFacade.getInstance(element.getManager().getProject()).findPackage("");
 }