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; }
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); }
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; }