private static IRegion getPathRegion(
      PathNameCS pathNameCS, IRegion selection, int[] selectedPos) {
    int[] positions = getPathPos(pathNameCS);
    if (positions == null) {
      return HyperlinkUtil.createRegion(pathNameCS);
    }

    int nameOffset = pathNameCS.getStartOffset();
    int i = 0;
    for (SimpleNameCS name : pathNameCS.getSimpleNames()) {
      int offset = selection.getOffset();
      if (nameOffset <= offset && offset <= nameOffset + name.getValue().length()) {
        selectedPos[0] = i;
        return new Region(nameOffset, name.getValue().length());
      }

      if (i == positions.length) {
        break;
      }

      nameOffset = positions[i++];
    }

    return HyperlinkUtil.createRegion(pathNameCS);
  }
  private static EModelElementRef findReferencedMetamodelElement(
      CSTNode syntaxElement, IRegion region) {
    Object astObj = syntaxElement.getAst();

    if (astObj instanceof EClassifier) {
      if (syntaxElement instanceof SimpleNameCS) {
        if (astObj instanceof EModelElement) {
          return new EModelElementRef(
              (EModelElement) astObj, HyperlinkUtil.createRegion(syntaxElement));
        }
      } else if (syntaxElement instanceof PathNameCS && !isConstructorCS(syntaxElement)) {
        if (astObj instanceof ENamedElement) {
          PathNameCS pathNameCS = (PathNameCS) syntaxElement;

          int[] selectedNamePos = new int[1];
          // IRegion resultRegion = refineRegion(pathNameCS, region, selectedNamePos);
          IRegion resultRegion = getPathRegion(pathNameCS, region, selectedNamePos);
          if (resultRegion != null) {
            ENamedElement ast = (ENamedElement) pathNameCS.getAst();
            int pos = selectedNamePos[0];
            final EList<SimpleNameCS> csNames = pathNameCS.getSimpleNames();

            if (pos >= 0 && pos < csNames.size() - 1) {
              QvtOperationalEnv env = getEnv(pathNameCS);

              List<SimpleNameCS> selectedNames = csNames.subList(0, pos + 1);
              List<String> stringNames = new ArrayList<String>(selectedNames.size());
              for (SimpleNameCS nameCS : selectedNames) {
                stringNames.add(nameCS.getValue());
              }

              ast = env.lookupClassifier(stringNames);
              if (ast == null) {
                ast = env.lookupPackage(stringNames);
              }
            }

            if (ast != null) {
              return new EModelElementRef(ast, resultRegion);
            }
          }
        }
      }
    } else if (astObj instanceof EEnumLiteral) {
      return new EModelElementRef((EEnumLiteral) astObj, HyperlinkUtil.createRegion(syntaxElement));
    }

    return null;
  }
Beispiel #3
0
  private MessageNode createMessageNode(AntMessage message) {
    String text = message.getText();

    boolean allowToShowPosition = true;
    if (JUNIT_TASK_NAME.equals(myCurrentTaskName)) {
      HyperlinkUtil.PlaceInfo info = HyperlinkUtil.parseJUnitMessage(myProject, text);
      if (info != null) {
        message =
            new AntMessage(message.getType(), message.getPriority(), text, info.getFile(), 1, 1);
        allowToShowPosition = false;
      }
    }

    return new MessageNode(message, myProject, allowToShowPosition);
  }
Beispiel #4
0
  public void addException(AntMessage exception, boolean showFullTrace) {
    MessageNode exceptionRootNode = null;

    StringTokenizer tokenizer = new StringTokenizer(exception.getText(), "\r\n");
    while (tokenizer.hasMoreElements()) {
      String line = (String) tokenizer.nextElement();
      if (exceptionRootNode == null) {
        AntMessage newMessage =
            new AntMessage(
                exception.getType(),
                exception.getPriority(),
                line,
                exception.getFile(),
                exception.getLine(),
                exception.getColumn());
        exceptionRootNode = new MessageNode(newMessage, myProject, true);
        myMessageItems.add(exceptionRootNode);
      } else if (showFullTrace) {
        if (StringUtil.startsWithChar(line, '\t')) {
          line = line.substring(1);
        }

        HyperlinkUtil.PlaceInfo info = HyperlinkUtil.parseStackLine(myProject, '\t' + line);
        VirtualFile file = info != null ? info.getFile() : null;
        int lineNumber = info != null ? info.getLine() : 0;
        int column = info != null ? info.getColumn() : 1;
        AntMessage newMessage =
            new AntMessage(
                exception.getType(), exception.getPriority(), line, file, lineNumber, column);
        MessageNode child = new MessageNode(newMessage, myProject, false);
        exceptionRootNode.add(child);
        myMessageItems.add(child);
      }
    }
    if (exceptionRootNode == null) return;

    MutableTreeNode parentNode = (MutableTreeNode) myParentPath.getLastPathComponent();
    myTreeModel.insertNodeInto(exceptionRootNode, parentNode, parentNode.getChildCount());

    handleExpansion();
  }
  public IHyperlink detectHyperlink(IDetectionContext context) {
    CSTNode syntaxElement = context.getSyntaxElement();
    EModelElementRef elementRef =
        findReferencedMetamodelElement(syntaxElement, context.getRegion());

    if (elementRef != null) {
      EModelElement element = elementRef.element;
      CSTNode cstNode = ASTBindingHelper.resolveCSTNode(element, CSTNode.class);
      if (cstNode == null) {
        ASTSyntheticNode referencedDefinitionAST = ASTSyntheticNodeAccess.getASTNode(element);
        if (referencedDefinitionAST != null) {
          cstNode = ASTSyntheticNodeAccess.getCST(referencedDefinitionAST, CSTNode.class);
        }
      }
      if (cstNode != null) {
        URI sourceURI = CSTHelper.getSourceFile(cstNode);
        if (sourceURI != null) {
          if (cstNode instanceof ModelTypeCS) {
            // TODO - use QVT model Switch to get destination region specific to various CST
            cstNode = ((ModelTypeCS) cstNode).getIdentifierCS();
          } else if (cstNode instanceof MappingModuleCS) {
            MappingModuleCS moduleCS = (MappingModuleCS) cstNode;
            if (moduleCS.getHeaderCS() != null) {
              cstNode = moduleCS.getHeaderCS();
              if (moduleCS.getHeaderCS().getPathNameCS() != null) {
                cstNode = moduleCS.getHeaderCS().getPathNameCS();
              }
            }
          } else if (cstNode instanceof ClassifierDefCS) {
            cstNode = ((ClassifierDefCS) cstNode).getSimpleNameCS();
          }
          IRegion destReg = HyperlinkUtil.createRegion(cstNode);
          return new QvtFileHyperlink(elementRef.sourceLinkRegion, sourceURI, destReg, destReg);
        }
      }

      return new MetamodelElementHyperlink(elementRef.sourceLinkRegion, elementRef.element);
    }

    return null;
  }