com.intellij.psi.util.PsiTreeUtil#findChildrenOfType ( )源码实例Demo

下面列出了com.intellij.psi.util.PsiTreeUtil#findChildrenOfType ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private void completionOfOperationKeywordsInSchemaDefinition() {
    CompletionProvider<CompletionParameters> provider = new CompletionProvider<CompletionParameters>() {
        @Override
        protected void addCompletions(@NotNull final CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) {
            final PsiElement completionElement = parameters.getPosition();
            final GraphQLOperationTypeDefinition operationTypeDefinition = PsiTreeUtil.getParentOfType(completionElement, GraphQLOperationTypeDefinition.class);
            if (operationTypeDefinition != null && operationTypeDefinition.getOperationType() == null) {
                final Set<String> keywords = Sets.newLinkedHashSet(Lists.newArrayList("query", "mutation", "subscription"));
                for (GraphQLOperationTypeDefinition existingDefinition : PsiTreeUtil.findChildrenOfType(operationTypeDefinition.getParent(), GraphQLOperationTypeDefinition.class)) {
                    if (existingDefinition.getOperationType() != null) {
                        keywords.remove(existingDefinition.getOperationType().getText());
                    }
                }
                keywords.forEach(keyword -> result.addElement(LookupElementBuilder.create(keyword).bold().withInsertHandler(AddColonSpaceInsertHandler.INSTANCE_WITH_AUTO_POPUP)));
            }
        }
    };
    extend(CompletionType.BASIC, psiElement(GraphQLElementTypes.NAME).inside(GraphQLOperationTypeDefinition.class), provider);
}
 
源代码2 项目: BashSupport   文件: BashFunctionDefImpl.java
@NotNull
@Override
public Set<String> findLocalScopeVariables() {
    if (localScopeVariables == null) {
        synchronized (stateLock) {
            if (localScopeVariables == null) {
                localScopeVariables = Sets.newLinkedHashSetWithExpectedSize(10);

                Collection<BashVarDef> varDefs = PsiTreeUtil.findChildrenOfType(this, BashVarDef.class);
                for (BashVarDef varDef : varDefs) {
                    if (varDef.isLocalVarDef() && this.isEquivalentTo(BashPsiUtils.findNextVarDefFunctionDefScope(varDef))) {
                        localScopeVariables.add(varDef.getReferenceName());
                    }
                }
            }
        }
    }

    return localScopeVariables;
}
 
源代码3 项目: BashSupport   文件: UnescapingPsiBuilderTest.java
@Test
public void testBasic() throws Exception {
    BashProjectSettings.storedSettings(getProject()).setEvalEscapesEnabled(true);

    //this feature needs the experimental settings
    try {
        PsiFile file = myFixture.configureByFile("basic/basic.bash");
        Assert.assertNotNull(file);

        Collection<BashEvalBlock> evalBlocks = PsiTreeUtil.findChildrenOfType(file, BashEvalBlock.class);
        Assert.assertNotNull(evalBlocks);
        Assert.assertEquals(2, evalBlocks.size());

        Iterator<BashEvalBlock> iterator = evalBlocks.iterator();

        BashEvalBlock first = iterator.next();
        Assert.assertEquals(1, first.getChildren().length);

        BashEvalBlock second = iterator.next();
        Assert.assertEquals(2, second.getChildren().length);
    } finally {
        BashProjectSettings.storedSettings(getProject()).setEvalEscapesEnabled(false);
    }
}
 
源代码4 项目: bamboo-soy   文件: SoyReferenceTest.java
public void testVariableReferencesInElement() {
  myFixture.configureByFiles("CompletionSourceElement.soy");
  PsiElement container = PsiTreeUtil.findChildOfType(myFixture.getFile(), SoyMsgStatement.class);
  Collection<SoyVariableReferenceIdentifier> vars =
      PsiTreeUtil.findChildrenOfType(container, SoyVariableReferenceIdentifier.class);
  assertSize(4, vars);
  for (SoyVariableReferenceIdentifier var : vars) {
    switch (var.getText()) {
      case "$planet": // @param
        assertInstanceOf(var.getReference().resolve(), SoyParamDefinitionIdentifier.class);
        break;
      case "$probe": // @inject
        assertInstanceOf(var.getReference().resolve(), SoyParamDefinitionIdentifier.class);
        break;
      case "$isLoaded": // @state
        assertInstanceOf(var.getReference().resolve(), SoyParamDefinitionIdentifier.class);
        break;
      case "$shape": // {let}
        assertInstanceOf(var.getReference().resolve(), SoyVariableDefinitionIdentifier.class);
        break;
    }
  }
}
 
private void completeOperationTypeNamesInSchemaDefinition() {
    CompletionProvider<CompletionParameters> provider = new CompletionProvider<CompletionParameters>() {
        @Override
        protected void addCompletions(@NotNull final CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) {
            final PsiElement completionElement = parameters.getPosition();
            final TypeDefinitionRegistry registry = GraphQLTypeDefinitionRegistryServiceImpl.getService(completionElement.getProject()).getRegistry(parameters.getOriginalFile());
            if (registry != null) {
                final Collection<GraphQLTypeName> currentTypes = PsiTreeUtil.findChildrenOfType(PsiTreeUtil.getTopmostParentOfType(completionElement, GraphQLElement.class), GraphQLTypeName.class);
                final Set<String> currentTypeNames = currentTypes.stream().map(PsiNamedElement::getName).collect(Collectors.toSet());
                registry.types().values().forEach(type -> {
                    if (type instanceof ObjectTypeDefinition && !currentTypeNames.contains(type.getName())) {
                        result.addElement(LookupElementBuilder.create(type.getName()));
                    }
                });
            }
        }
    };
    extend(CompletionType.BASIC, psiElement(GraphQLElementTypes.NAME).afterLeaf(":").inside(GraphQLOperationTypeDefinition.class), provider);
}
 
源代码6 项目: intellij-haxe   文件: HaxelibClasspathUtils.java
/**
 * Turn some text into a file, parse it using the .hxml parser, and
 * return any HXML classpaths.
 *
 * @param project to include created files in.
 * @param text to parse.
 * @return A (possibly empty) list containing all of the classpaths found in the text.
 */
@NotNull
public static List<String> getHXMLFileClasspaths(@NotNull Project project, @NotNull String text) {
  if (text.isEmpty()) {
    return Collections.EMPTY_LIST;
  }

  List<String> strings1;
  strings1 = new ArrayList<String>();
  PsiFile psiFile = PsiFileFactory.getInstance(project).createFileFromText(HXMLFileType.INSTANCE, "data.hxml", text, 0, text.length() - 1);

  Collection<HXMLClasspath> hxmlClasspaths = PsiTreeUtil.findChildrenOfType(psiFile, HXMLClasspath.class);
  for (HXMLClasspath hxmlClasspath : hxmlClasspaths) {
    strings1.add(HXMLPsiImplUtil.getValue(hxmlClasspath));
  }
  return strings1;
}
 
源代码7 项目: intellij-haskforce   文件: HaskellUtil.java
/**
 * Find definitions that have been re-exported.
 *
 * <code>
 *   module Foo (module Bar, foo) where
 *   import Bar
 *   import Baz (foo)
 * </code>
 */
private static void findDefinitionNodeInExport(@NotNull Project project, HaskellFile f, @Nullable String name,
                                               @Nullable PsiNamedElement e, List<PsiNamedElement> result) {
    List<HaskellPsiUtil.Import> imports = HaskellPsiUtil.parseImports(f);
    for (HaskellExport export : PsiTreeUtil.findChildrenOfType(f, HaskellExport.class)) {
        boolean exportFn = export.getQvar() != null && export.getQvar().getQvarid() != null
                && export.getQvar().getQvarid().getVarid().getName().equals(name);
        String moduleName = exportFn
                ? getModule(export.getQvar().getQvarid().getConidList())
                : export.getModuletoken() != null && export.getQconid() != null ? export.getQconid().getText() : null;
        if (!exportFn && moduleName == null) continue;
        for (HaskellPsiUtil.Import imprt : imports) {
            if (moduleName != null && !moduleName.equals(imprt.module) && !moduleName.equals(imprt.alias)) continue;
            boolean hidden = imprt.getHidingNames() != null && ArrayUtil.contains(name, imprt.getHidingNames());
            boolean notImported = imprt.getImportedNames() != null && !ArrayUtil.contains(name, imprt.getImportedNames());
            if (hidden || notImported) continue;
            for (HaskellFile f2 : HaskellModuleIndex.getFilesByModuleName(project, imprt.module, GlobalSearchScope.allScope(project))) {
                findDefinitionNode(f2, name, e, result);
                findDefinitionNodeInExport(project, f2, name, e, result);
            }
        }
    }
}
 
源代码8 项目: reasonml-idea-plugin   文件: ORSignatureTest.java
@SuppressWarnings({"SameParameterValue", "ConstantConditions"})
@NotNull
private ORSignature makeSignature(@NotNull Language lang, String sig, boolean debug) {
    PsiFileFactory instance = PsiFileFactory.getInstance(getProject());
    PsiFile psiFile = instance.createFileFromText("Dummy." + lang.getAssociatedFileType().getDefaultExtension(), lang, "let x:" + sig);
    if (debug) {
        System.out.println(DebugUtil.psiToString(psiFile, true, true));
    }
    Collection<PsiSignatureItem> items = PsiTreeUtil.findChildrenOfType(psiFile, PsiSignatureItem.class);
    return new ORSignature(RmlLanguage.INSTANCE, items);
}
 
源代码9 项目: intellij-jsonnet   文件: JsonnetFoldingBuilder.java
@NotNull
@Override
public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
    List<FoldingDescriptor> descriptors = new ArrayList<>();
    Collection<PsiElement> literalExpressions = PsiTreeUtil.findChildrenOfType(root, JsonnetObj.class);
    literalExpressions.addAll(PsiTreeUtil.findChildrenOfType(root, JsonnetArr.class));
    literalExpressions.addAll(PsiTreeUtil.findChildrenOfType(root, JsonnetArrcomp.class));
    for (final PsiElement literalExpression : literalExpressions) {
        FoldingGroup group = FoldingGroup.newGroup(
                "jsonnet-" + literalExpression.getTextRange().getStartOffset() +
                        "-" + literalExpression.getTextRange().getEndOffset()
        );
        int start = literalExpression.getTextRange().getStartOffset() + 1;
        int end = literalExpression.getTextRange().getEndOffset() - 1;
        if (end > start)
            descriptors.add(
                    new FoldingDescriptor(
                            literalExpression.getNode(),
                            new TextRange(start, end),
                            group
                    ) {
                        @Override
                        public String getPlaceholderText() {
                            return "...";
                        }
                    }
            );
    }
    return descriptors.toArray(new FoldingDescriptor[0]);
}
 
private static PsiIdentifier findIdentifier(PsiElement cls, String name) {
  final Collection<PsiIdentifier> identifiers =
      PsiTreeUtil.findChildrenOfType(cls, PsiIdentifier.class);
  for (PsiIdentifier identifier : identifiers) {
    if (identifier.textMatches(name)) return identifier;
  }
  return null;
}
 
源代码11 项目: mule-intellij-plugins   文件: WeavePsiUtils.java
public static List<WeaveNamedElement> findFunctions(@NotNull PsiElement element) {
    final List<WeaveNamedElement> result = new ArrayList<>();
    PsiElement parent = element.getParent();
    while (isNotWeaveFile(parent)) {
        if (parent instanceof WeaveDocument) {
            final Collection<WeaveVariableDefinition> vars = PsiTreeUtil.findChildrenOfType(((WeaveDocument) parent).getHeader(), WeaveVariableDefinition.class);
            final Collection<WeaveFunctionDefinition> functionDirectives = PsiTreeUtil.findChildrenOfType(((WeaveDocument) parent).getHeader(), WeaveFunctionDefinition.class);
            result.addAll(functionDirectives);
            result.addAll(vars.stream().filter(var -> var.getExpression() instanceof WeaveLambdaLiteral).collect(Collectors.toList()));
            break;
        }
        parent = parent.getParent();
    }
    return result;
}
 
public Collection<JSDefinitionExpression> getDefinitions() {
    final PsiElement firstChild = getFirstChild();
    if (firstChild instanceof JSDefinitionExpression) {
        return Collections.singletonList((JSDefinitionExpression) firstChild);
    }
    if (firstChild instanceof JSParenthesizedExpression) {
        final PsiElement commaExpression = PsiTreeUtil.findChildOfType(firstChild, JSCommaExpression.class);
        if (commaExpression != null) {
            return PsiTreeUtil.findChildrenOfType(commaExpression, JSDefinitionExpression.class);
        }
    }
    return Collections.emptyList();
}
 
@NotNull
@Override
public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement psiElement, @NotNull Document document, boolean b) {

    if (!Symfony2ProjectComponent.isEnabled(psiElement) || !(psiElement instanceof PhpFile)) {
        return new FoldingDescriptor[0];
    }

    boolean codeFoldingPhpRoute = Settings.getInstance(psiElement.getProject()).codeFoldingPhpRoute;
    boolean codeFoldingPhpModel = Settings.getInstance(psiElement.getProject()).codeFoldingPhpModel;
    boolean codeFoldingPhpTemplate = Settings.getInstance(psiElement.getProject()).codeFoldingPhpTemplate;

    // we dont need to do anything
    if(!codeFoldingPhpRoute && !codeFoldingPhpModel && !codeFoldingPhpTemplate) {
        return new FoldingDescriptor[0];
    }

    List<FoldingDescriptor> descriptors = new ArrayList<>();

    Collection<StringLiteralExpression> stringLiteralExpressiones = PsiTreeUtil.findChildrenOfType(psiElement, StringLiteralExpression.class);
    for(StringLiteralExpression stringLiteralExpression: stringLiteralExpressiones) {

        if(codeFoldingPhpModel) {
            attachModelShortcuts(descriptors, stringLiteralExpression);
        }

        if(codeFoldingPhpTemplate) {
            attachTemplateShortcuts(descriptors, stringLiteralExpression);
        }

    }

    // strip ".[php|html].twig"
    if(codeFoldingPhpRoute) {
        attachRouteShortcuts(descriptors, stringLiteralExpressiones);
    }

    return descriptors.toArray(new FoldingDescriptor[descriptors.size()]);
}
 
源代码14 项目: intellij-plugin-v4   文件: ANTLRv4FoldingBuilder.java
private static void addActionFoldingDescriptors(List<FoldingDescriptor> descriptors, PsiElement root) {
    for (AtAction atAction : PsiTreeUtil.findChildrenOfType(root, AtAction.class)) {
        PsiElement action = atAction.getLastChild();
        String actionText = action.getText();
        if ( actionText != null && actionText.contains("\n")) {
            descriptors.add(new FoldingDescriptor(atAction, action.getTextRange()));
        }
    }
}
 
public Collection<JSDefinitionExpression> getDefinitions() {
    final PsiElement firstChild = getFirstChild();
    if (firstChild instanceof JSDefinitionExpression) {
        return Collections.singletonList((JSDefinitionExpression) firstChild);
    }
    if (firstChild instanceof JSParenthesizedExpression) {
        final PsiElement commaExpression = PsiTreeUtil.findChildOfType(firstChild, JSCommaExpression.class);
        if (commaExpression != null) {
            return PsiTreeUtil.findChildrenOfType(commaExpression, JSDefinitionExpression.class);
        }
    }
    return Collections.emptyList();
}
 
@NotNull
@Override
public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean b) {
    Project project = root.getProject();
    List<FoldingDescriptor> descriptors = new ArrayList<>();
    Collection<VirtualFile> propertiesFiles = FilenameIndex.getAllFilesByExt(project, "properties", GlobalSearchScope.projectScope(project));
    Collection<PsiLiteralExpression> literalExpressions = PsiTreeUtil.findChildrenOfType(root, PsiLiteralExpression.class);
    for (final PsiLiteralExpression literalExpression : literalExpressions) {
        if (!NutzInjectConfUtil.isInjectConf(literalExpression)) {
            continue;
        }
        String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
        String key = NutzInjectConfUtil.getKey(value);
        if (key != null) {
            final List<String> properties = NutzInjectConfUtil.findProperties(project, propertiesFiles, key);
            final TextRange textRange = new TextRange(literalExpression.getTextRange().getStartOffset() + 1, literalExpression.getTextRange().getEndOffset() - 1);
            String data;
            if (properties.size() == 1) {
                data = properties.get(0);
            } else if (properties.size() > 1) {
                data = properties.get(0) + "[该键值存在多个配置文件中!]";
            } else {
                data = "[" + key + "]不存在,使用时可能产生异常,请检查!";
            }
            descriptors.add(new NutzLocalizationFoldingDescriptor(literalExpression.getNode(), textRange, data));
        }
    }
    return descriptors.toArray(new FoldingDescriptor[descriptors.size()]);
}
 
public void testPatternMatch() {
    PsiSwitch e = firstOfType(
            parseCode("match action with | UpdateDescription(desc) -> let open ReasonReact.SideEffects in (fun _self -> onDescriptionChange desc)"),
            PsiSwitch.class);
    PsiPatternMatchBody body = PsiTreeUtil.findChildOfType(e, PsiPatternMatchBody.class);
    assertEquals("let open ReasonReact.SideEffects in (fun _self -> onDescriptionChange desc)", body.getText());
    Collection<PsiUpperSymbol> uppers = PsiTreeUtil.findChildrenOfType(body, PsiUpperSymbol.class);
    assertEquals("ReasonReact, SideEffects", Joiner.join(", ", uppers.stream().map(PsiElement::getText).collect(Collectors.toList())));
}
 
public void testJsObject() {
    PsiLet e = first(letExpressions(parseCode("let x: < a: string; b: 'a > Js.t -> string")));
    ORSignature signature = e.getORSignature();

    assertEquals(2, signature.getTypes().length);
    PsiSignatureItem jsObj = signature.getItems()[0];
    List<PsiObjectField> fields = new ArrayList<>(PsiTreeUtil.findChildrenOfType(jsObj, PsiObjectField.class));
    assertSize(2, fields);
    assertEquals(fields.get(0).getName(), "a");
    assertEquals(fields.get(1).getName(), "b");
}
 
源代码19 项目: reasonml-idea-plugin   文件: JsxParsingTest.java
public void testTagPropWithParen() {
    PsiTag tag = (PsiTag) firstElement(parseCode("<div style=(x) onFocus=a11y.onFocus/>"));

    Collection<PsiTagProperty> properties = PsiTreeUtil.findChildrenOfType(tag, PsiTagProperty.class);
    assertEquals(2, properties.size());
    Iterator<PsiTagProperty> itProperties = properties.iterator();
    assertEquals("style=(x)", itProperties.next().getText());
    assertEquals("onFocus=a11y.onFocus", itProperties.next().getText());
}
 
源代码20 项目: reasonml-idea-plugin   文件: JsxParsingTest.java
public void testIncorrectProp() {
    PsiTag e = (PsiTag) firstElement(parseCode("<MyComp prunningProp prop=1/>"));

    Collection<PsiTagProperty> properties = PsiTreeUtil.findChildrenOfType(e, PsiTagProperty.class);
    assertEquals(2, properties.size());
}