Search in sources :

Example 1 with ImportScope

use of org.yakindu.sct.model.stext.stext.ImportScope in project statecharts by Yakindu.

the class PackageImportHyperlinkHelper method createPackageImportHyperlinksByOffset.

protected void createPackageImportHyperlinksByOffset(XtextResource resource, int offset, IHyperlinkAcceptor acceptor) {
    INode node = NodeModelUtils.findLeafNodeAtOffset(resource.getParseResult().getRootNode(), offset);
    if (node != null && node.getGrammarElement() instanceof RuleCall && node.getSemanticElement() instanceof ImportScope) {
        NodeModelUtils.findNodesForFeature(node.getSemanticElement(), TypesPackage.Literals.PACKAGE__IMPORT);
        ImportScope importScope = (ImportScope) node.getSemanticElement();
        EList<String> imports = importScope.getImports();
        for (String pkgImport : imports) {
            Optional<PackageImport> mappedImport = mapper.findPackageImport(resource, pkgImport);
            if (mappedImport.isPresent()) {
                final URI targetURI = mappedImport.get().getUri();
                XtextHyperlink result = getHyperlinkProvider().get();
                result.setURI(targetURI);
                Region region = new Region(node.getOffset(), node.getLength());
                result.setHyperlinkRegion(region);
                result.setHyperlinkText(targetURI.toString());
                acceptor.accept(result);
            }
        }
    }
}
Also used : INode(org.eclipse.xtext.nodemodel.INode) XtextHyperlink(org.eclipse.xtext.ui.editor.hyperlinking.XtextHyperlink) ImportScope(org.yakindu.sct.model.stext.stext.ImportScope) Region(org.eclipse.jface.text.Region) PackageImport(org.yakindu.sct.model.stext.scoping.IPackageImport2URIMapper.PackageImport) URI(org.eclipse.emf.common.util.URI) RuleCall(org.eclipse.xtext.RuleCall)

Example 2 with ImportScope

use of org.yakindu.sct.model.stext.stext.ImportScope in project statecharts by Yakindu.

the class StextImportAwareScopeProvider method createNamespaceResolver.

protected List<ImportNormalizer> createNamespaceResolver(Scope scope, boolean ignoreCase) {
    List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList();
    ImportScope importScope = (ImportScope) scope;
    for (String child : importScope.getImports()) {
        Optional<PackageImport> pkgImport = mapper.findPackageImport(scope.eResource(), child);
        if (pkgImport.isPresent()) {
            ImportNormalizer resolver = createImportedNamespaceResolver(pkgImport.get().getNamespace(), ignoreCase);
            if (resolver != null)
                importedNamespaceResolvers.add(resolver);
        }
    }
    return importedNamespaceResolvers;
}
Also used : ImportNormalizer(org.eclipse.xtext.scoping.impl.ImportNormalizer) ImportScope(org.yakindu.sct.model.stext.stext.ImportScope) PackageImport(org.yakindu.sct.model.stext.scoping.IPackageImport2URIMapper.PackageImport)

Example 3 with ImportScope

use of org.yakindu.sct.model.stext.stext.ImportScope in project statecharts by Yakindu.

the class StextImportAwareScopeProvider method internalGetImportedNamespaceResolvers.

@Override
protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(final EObject context, boolean ignoreCase) {
    List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList();
    List<ImportScope> importScopes = null;
    if (context instanceof StateSpecification || context instanceof TransitionSpecification) {
        importScopes = EcoreUtil2.getAllContentsOfType(getStatechart(context), ImportScope.class);
    } else {
        importScopes = EcoreUtil2.getAllContentsOfType(context, ImportScope.class);
    }
    for (ImportScope scope : importScopes) {
        importedNamespaceResolvers.addAll(createNamespaceResolver(scope, ignoreCase));
    }
    return importedNamespaceResolvers;
}
Also used : StateSpecification(org.yakindu.sct.model.stext.stext.StateSpecification) ImportNormalizer(org.eclipse.xtext.scoping.impl.ImportNormalizer) ImportScope(org.yakindu.sct.model.stext.stext.ImportScope) TransitionSpecification(org.yakindu.sct.model.stext.stext.TransitionSpecification)

Aggregations

ImportScope (org.yakindu.sct.model.stext.stext.ImportScope)3 ImportNormalizer (org.eclipse.xtext.scoping.impl.ImportNormalizer)2 PackageImport (org.yakindu.sct.model.stext.scoping.IPackageImport2URIMapper.PackageImport)2 URI (org.eclipse.emf.common.util.URI)1 Region (org.eclipse.jface.text.Region)1 RuleCall (org.eclipse.xtext.RuleCall)1 INode (org.eclipse.xtext.nodemodel.INode)1 XtextHyperlink (org.eclipse.xtext.ui.editor.hyperlinking.XtextHyperlink)1 StateSpecification (org.yakindu.sct.model.stext.stext.StateSpecification)1 TransitionSpecification (org.yakindu.sct.model.stext.stext.TransitionSpecification)1