类com.intellij.psi.PsiStatement源码实例Demo

下面列出了怎么用com.intellij.psi.PsiStatement的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: IntelliJDeodorant   文件: ExtractMethodPanel.java
/**
 * Checks that the slice can be extracted into a separate method without compilation errors.
 */
private boolean canBeExtracted(ASTSlice slice) {
    SmartList<PsiStatement> statementsToExtract = getStatementsToExtract(slice);

    MyExtractMethodProcessor processor = new MyExtractMethodProcessor(scope.getProject(),
            null, statementsToExtract.toArray(new PsiElement[0]), slice.getLocalVariableCriterion().getType(),
            IntelliJDeodorantBundle.message("extract.method.refactoring.name"), "", HelpID.EXTRACT_METHOD,
            slice.getSourceTypeDeclaration(), slice.getLocalVariableCriterion());

    processor.setOutputVariable();

    try {
        processor.setShowErrorDialogs(false);
        return processor.prepare();

    } catch (PrepareFailedException e) {
        e.printStackTrace();
    }
    return false;
}
 
源代码2 项目: IntelliJDeodorant   文件: ExtractMethodPanel.java
/**
 * Collects statements that can be extracted into a separate method.
 */
public SmartList<PsiStatement> getStatementsToExtract(ASTSlice slice) {
    Set<PDGNode> nodes = slice.getSliceNodes();
    SmartList<PsiStatement> statementsToExtract = new SmartList<>();

    for (PDGNode pdgNode : nodes) {
        boolean isNotChild = true;
        for (PDGNode node : nodes) {
            if (isChild(node.getASTStatement(), pdgNode.getASTStatement())) {
                isNotChild = false;
            }
        }
        if (isNotChild) {
            statementsToExtract.add(pdgNode.getASTStatement());
        }
    }
    return statementsToExtract;
}
 
@Test
public void markStatement() {
  testHelper.getPsiClass(
      psiClasses -> {
        assertThat(psiClasses).hasSize(2);

        PsiClass underTest = psiClasses.get(0);
        PsiClass component = psiClasses.get(1);

        // For testing environment
        Function<PsiMethodCallExpression, PsiClass> resolver = ignored -> component;
        RequiredPropLineMarkerProvider provider = new RequiredPropLineMarkerProvider(resolver);
        List<PsiElement> statements =
            new ArrayList<>(PsiTreeUtil.findChildrenOfAnyType(underTest, PsiStatement.class));

        assertThat(provider.getLineMarkerInfo(statements.get(0))).isNotNull();
        assertThat(provider.getLineMarkerInfo(statements.get(1))).isNull();

        return true;
      },
      "RequiredPropAnnotatorTest.java",
      "RequiredPropAnnotatorComponent.java");
}
 
public static void translate(PsiDeclarationStatement stmt, TranslationContext ctx) {
    for (int i = 0; i < stmt.getDeclaredElements().length; i++) {

        if(i > 0) {
            ctx.append(", ");
        }

        PsiElement element1 = stmt.getDeclaredElements()[i];
        if (element1 instanceof PsiStatement) {
            StatementTranslator.translate((PsiStatement) element1, ctx);
        } else if (element1 instanceof PsiLocalVariable) {
            LocalVariableTranslator.translate((PsiLocalVariable) element1, ctx);
        } else {
            System.err.println("Not managed " + element1);
        }
    }
}
 
源代码5 项目: IntelliJDeodorant   文件: ExtractMethodPanel.java
/**
 * Extracts statements into new method.
 *
 * @param slice computation slice.
 * @return callback to run when "Refactor" button is selected.
 */
private Runnable doExtract(ASTSlice slice) {
    return () -> {
        Editor editor = FileEditorManager.getInstance(slice.getSourceMethodDeclaration().getProject()).getSelectedTextEditor();
        SmartList<PsiStatement> statementsToExtract = getStatementsToExtract(slice);

        MyExtractMethodProcessor processor = new MyExtractMethodProcessor(slice.getSourceMethodDeclaration().getProject(),
                editor, statementsToExtract.toArray(new PsiElement[0]), slice.getLocalVariableCriterion().getType(),
                "", "", HelpID.EXTRACT_METHOD,
                slice.getSourceTypeDeclaration(), slice.getLocalVariableCriterion());

        processor.setOutputVariable();

        try {
            processor.setShowErrorDialogs(true);
            if (processor.prepare()) {
                ExtractMethodHandler.invokeOnElements(slice.getSourceMethodDeclaration().getProject(), processor,
                        slice.getSourceMethodDeclaration().getContainingFile(), true);
                if (editor != null && processor.getExtractedMethod() != null) {
                    IntelliJDeodorantCounterCollector.getInstance().extractMethodRefactoringApplied(editor.getProject(),
                            slice, processor.getExtractedMethod());
                }
            }
        } catch (PrepareFailedException e) {
            e.printStackTrace();
        }
    };
}
 
源代码6 项目: IntelliJDeodorant   文件: ExtractMethodPanel.java
/**
 * Opens definition of method and highlights statements, which should be extracted.
 *
 * @param sourceMethod method from which code is proposed to be extracted into separate method.
 * @param scope        scope of the current project.
 * @param slice        computation slice.
 */
private static void openDefinition(@Nullable PsiMethod sourceMethod, AnalysisScope scope, ASTSlice slice) {
    new Task.Backgroundable(scope.getProject(), "Search Definition") {
        @Override
        public void run(@NotNull ProgressIndicator indicator) {
            indicator.setIndeterminate(true);
        }

        @Override
        public void onSuccess() {
            if (sourceMethod != null) {
                Set<SmartPsiElementPointer<PsiElement>> statements = slice.getSliceStatements();
                PsiStatement psiStatement = (PsiStatement) statements.iterator().next().getElement();
                if (psiStatement != null && psiStatement.isValid()) {
                    EditorHelper.openInEditor(psiStatement);
                    Editor editor = FileEditorManager.getInstance(sourceMethod.getProject()).getSelectedTextEditor();
                    if (editor != null) {
                        TextAttributes attributes = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES);
                        editor.getMarkupModel().removeAllHighlighters();
                        statements.stream()
                                .filter(statement -> statement.getElement() != null)
                                .forEach(statement ->
                                        editor.getMarkupModel().addRangeHighlighter(statement.getElement().getTextRange().getStartOffset(),
                                                statement.getElement().getTextRange().getEndOffset(), HighlighterLayer.SELECTION,
                                                attributes, HighlighterTargetArea.EXACT_RANGE));
                    }
                }
            }
        }
    }.queue();
}
 
public boolean instanceOf(PsiStatement statement) {
    if (statement instanceof PsiDeclarationStatement) {
        PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement) statement;
        PsiElement[] declaredElements = declarationStatement.getDeclaredElements();
        for (PsiElement element : declaredElements) {
            if (element instanceof PsiVariable) {
                return true;
            }
        }
    }
    return false;
}
 
源代码8 项目: IntelliJDeodorant   文件: CFGNode.java
PsiStatement getASTStatement() {
    if (statement.getStatement() instanceof PsiStatement) {
        return (PsiStatement) statement.getStatement();
    } else {
        return null;
    }
}
 
源代码9 项目: IntelliJDeodorant   文件: AbstractStatement.java
public PsiElement getStatement() {
    PsiElement element = this.statement.getElement();
    if (element instanceof PsiStatement || element instanceof PsiCodeBlock) {
        return element;
    } else {
        return null;
    }
}
 
源代码10 项目: litho   文件: RequiredPropAnnotatorTest.java
@Test
public void annotateStatement() {
  testHelper.getPsiClass(
      psiClasses -> {
        assertEquals(2, psiClasses.size());

        PsiClass underTest = psiClasses.get(0);
        PsiClass component = psiClasses.get(1);

        // For testing environment
        Function<PsiMethodCallExpression, PsiClass> resolver =
            psiMethodCallExpression -> component;
        RequiredPropAnnotator annotator = new RequiredPropAnnotator(resolver);
        TestHolder holder = new TestHolder();
        Collection<PsiStatement> statements =
            PsiTreeUtil.findChildrenOfAnyType(underTest, PsiStatement.class);
        // Simulates IDE behavior of traversing Psi elements
        for (PsiStatement statement : statements) {
          annotator.annotate(statement, holder);
        }

        assertEquals(3, holder.errorMessages.size());
        for (String errorMessage : holder.errorMessages) {
          assertEquals(
              "The following props are not "
                  + "marked as optional and were not supplied: testRequiredPropName",
              errorMessage);
        }
        assertEquals(3, holder.errorElements.size());
        for (PsiElement errorElement : holder.errorElements) {
          assertEquals("RequiredPropAnnotatorComponent.create", errorElement.getText());
        }
        return true;
      },
      "RequiredPropAnnotatorTest.java",
      "RequiredPropAnnotatorComponent.java");
}
 
源代码11 项目: java2typescript   文件: CodeBlockTranslator.java
public static void translate(PsiCodeBlock block, TranslationContext ctx) {
    ctx.append("{\n");
    ctx.increaseIdent();
    for (PsiStatement statement : block.getStatements()) {
        StatementTranslator.translate(statement, ctx);
    }
    ctx.decreaseIdent();
    ctx.print("}");
}
 
源代码12 项目: IntelliJDeodorant   文件: InstanceOfForStatement.java
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiForStatement;
}
 
源代码13 项目: IntelliJDeodorant   文件: InstanceOfDoStatement.java
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiDoWhileStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiSwitchStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiContinueStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
    return statement instanceof PsiBreakStatement || statement instanceof PsiContinueStatement
            || statement instanceof PsiReturnStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiReturnStatement;
}
 
源代码18 项目: IntelliJDeodorant   文件: InstanceOfIfStatement.java
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiIfStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiForeachStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiWhileStatement;
}
 
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiBreakStatement;
}
 
源代码22 项目: IntelliJDeodorant   文件: InstanceOfTryStatement.java
public boolean instanceOf(PsiStatement statement) {
	return statement instanceof PsiTryStatement;
}
 
SynchronizedStatementObject(PsiStatement statement, AbstractMethodFragment parent) {
    super(statement, StatementType.SYNCHRONIZED, parent);
    AbstractExpression abstractExpression = new AbstractExpression(
            ((PsiSynchronizedStatement) statement).getLockExpression(), this);
    this.addExpression(abstractExpression);
}
 
源代码24 项目: IntelliJDeodorant   文件: TryStatementObject.java
public TryStatementObject(PsiStatement statement, AbstractMethodFragment parent) {
    super(statement, StatementType.TRY, parent);
    this.catchClauses = new SmartList<>();
}
 
@NotNull
@Override
public PsiStatement[] getStatements() {
  // TODO: Implement
  return new PsiStatement[0];
}
 
源代码26 项目: innerbuilder   文件: InnerBuilderUtils.java
static PsiStatement createReturnThis(@NotNull PsiElementFactory psiElementFactory, @Nullable PsiElement context) {
    return psiElementFactory.createStatementFromText("return this;", context);
}
 
boolean instanceOf(PsiStatement statement); 
 类所在包
 同包方法