public void searchAddElementsTo()

in ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/codeassist/RutaResolver.java [77:187]


  public void searchAddElementsTo(List statements, final ASTNode node, IParent element,
          List selectionElements) {
    if (statements == null || element == null) {
      return;
    }
    Iterator i = statements.iterator();
    while (i.hasNext()) {
      ASTNode nde = (ASTNode) i.next();
      if (nde.equals(node)) {
        if (node instanceof MethodDeclaration) {
          String oName = ((MethodDeclaration) node).getName();
          if (oName.indexOf("::") != -1) {
            String pName = oName.substring(0, oName.lastIndexOf("::"));
            pName = pName.replaceAll("::", "\\$");

            if (pName.startsWith("$")) {
              if (pName.equals("$")) {
                element = sourceModule;
              } else {
                try {
                  element = findTypeFrom(sourceModule.getChildren(), "", pName, '$');
                } catch (ModelException e) {
                  if (DLTKCore.DEBUG) {
                    e.printStackTrace();
                  }
                }
              }
            } else {
              pName = "$" + pName;
              try {
                element = findTypeFrom(element.getChildren(), "", pName, '$');
                if (element == null) {
                  return;
                }
              } catch (ModelException e) {
                e.printStackTrace();
                return;
              }
            }
          }
        }
        String nodeName = getNodeChildName(node);
        if (nodeName != null) {
          IModelElement e = null;
          if (nodeName.startsWith("::")) {
            nodeName = nodeName.substring(2);
            e = findChildrenByName(nodeName, sourceModule);
          } else {
            e = findChildrenByName(nodeName, element);
          }
          if (e == null && resolver != null) {
            e = resolver.findElementParent(node, nodeName, element);

          }
          if (e != null) {
            List toRemove = new ArrayList();
            for (int k = 0; k < selectionElements.size(); ++k) {
              IModelElement ke = (IModelElement) selectionElements.get(k);
              String keName = ke.getElementName();
              if (keName.equals(nodeName)) {
                toRemove.add(ke);
              }
            }
            for (int k = 0; k < toRemove.size(); ++k) {
              selectionElements.remove(toRemove.get(k));
            }
            selectionElements.add(e);
          }
        }
        return;
      }
      if (nde.sourceStart() <= node.sourceStart() && node.sourceEnd() <= nde.sourceEnd()) {
        if (element instanceof IParent) {
          if (nde instanceof TypeDeclaration) {
            TypeDeclaration type = (TypeDeclaration) nde;
            String typeName = getNodeChildName(type);
            IModelElement e = findChildrenByName(typeName, element);
            if (e == null && type.getName().startsWith("::")) {
              try {
                e = (IModelElement) findTypeFrom(sourceModule.getChildren(), "", type.getName()
                        .replaceAll("::", "\\$"), '$');
              } catch (ModelException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
              }
            }
            if (e instanceof IParent) {
              // was: if (e != null || e instanceof IParent)
              List stats = ((TypeDeclaration) nde).getStatements();
              searchAddElementsTo(stats, node, (IParent) e, selectionElements);
            }
          } else if (nde instanceof MethodDeclaration) {
            searchInMethod(node, element, nde, selectionElements);
          } /*
             * else if (nde instanceof RutaStatement) { RutaStatement s = (RutaStatement) nde;
             * Expression commandId = s.getAt(0); final IParent e = element; if (commandId != null
             * && commandId instanceof SimpleReference) { String qname = ((SimpleReference)
             * commandId) .getName(); } }
             */
          else {
            final IParent e = element;
            List statements2 = findExtractBlocks(nde);
            if (statements2.size() > 0) {
              searchAddElementsTo(statements2, node, e, selectionElements);
            }
          }
        }
        return;
      }
    }
  }