下面列出了怎么用com.intellij.psi.PsiDeclarationStatement的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* If element is a {@link PsiStatement} with {@code Component.create()} call, finds missing
* required props for it.
*
* @param element element to verify
* @param errorHandler handles a list of missing required props and reference to the {@code
* Component.create()} call in the statement
* @param generatedClassResolver returns generated Litho class, or null if the provided method
* doesn't belong to any
*/
static void annotate(
PsiElement element,
BiConsumer<Collection<String>, PsiReferenceExpression> errorHandler,
Function<PsiMethodCallExpression, PsiClass> generatedClassResolver) {
if (element instanceof PsiDeclarationStatement) {
Arrays.stream(((PsiDeclarationStatement) element).getDeclaredElements())
.filter(PsiVariable.class::isInstance)
.map(declaredVariable -> ((PsiVariable) declaredVariable).getInitializer())
.forEach(
expression -> handleIfMethodCall(expression, errorHandler, generatedClassResolver));
} else if (element instanceof PsiExpressionStatement) {
handleIfMethodCall(
((PsiExpressionStatement) element).getExpression(), errorHandler, generatedClassResolver);
} else if (element instanceof PsiReturnStatement) {
handleIfMethodCall(
((PsiReturnStatement) element).getReturnValue(), errorHandler, generatedClassResolver);
}
}
@Override
public final void visitElement(final PsiElement element) {
super.visitElement(element);
if (startOffset <= element.getTextOffset() && element.getTextOffset() <= endOffset) {
if (element.getNode().getElementType().equals(JavaElementType.FIELD)) {
visitPsiFields((PsiField) element);
} else if (element.getNode().getElementType().
equals(JavaElementType.DECLARATION_STATEMENT)) {
visitPsiDeclarationStatement((PsiDeclarationStatement) element);
} else if (element.getNode().getElementType().equals(JavaElementType.CATCH_SECTION)) {
visitPsiCatchSection((PsiCatchSection) element);
} else if (element.getNode().getElementType().
equals(JavaElementType.RETURN_STATEMENT)) {
visitPsiReturnStatement((PsiReturnStatement) element);
} else {
visitExpression(element);
}
}
}
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);
}
}
}
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;
}
private void visitPsiDeclarationStatement(final PsiDeclarationStatement
declarationStatement) {
Collection<PsiTypeElement> typeElements =
PsiTreeUtil.findChildrenOfType(declarationStatement, PsiTypeElement.class);
for (PsiTypeElement element : typeElements) {
String type = removeSpecialSymbols(element.getType().getCanonicalText());
addInMap(type, emptySet);
}
}