下面列出了怎么用com.intellij.psi.PsiNewExpression的API类实例代码及写法,或者点击链接到github查看源代码。
private boolean duplicatedSliceNodeWithClassInstantiationHasDependenceOnRemovableNode() {
Set<PDGNode> duplicatedNodes = new LinkedHashSet<>(sliceNodes);
duplicatedNodes.retainAll(indispensableNodes);
for (PDGNode duplicatedNode : duplicatedNodes) {
if (duplicatedNode.containsClassInstanceCreation()) {
Map<PsiVariable, PsiNewExpression> classInstantiations = duplicatedNode.getClassInstantiations();
for (PsiVariable variableDeclaration : classInstantiations.keySet()) {
for (GraphEdge edge : duplicatedNode.outgoingEdges) {
PDGDependence dependence = (PDGDependence) edge;
if (subgraph.edgeBelongsToBlockBasedRegion(dependence) && dependence != null) {
PDGNode dstPDGNode = (PDGNode) dependence.dst;
if (removableNodes.contains(dstPDGNode)) {
if (dstPDGNode.changesStateOfReference(variableDeclaration)
|| dstPDGNode.assignsReference(variableDeclaration)
|| dstPDGNode.accessesReference(variableDeclaration))
return true;
}
}
}
}
}
}
return false;
}
private boolean duplicatedSliceNodeWithClassInstantiationHasDependenceOnRemovableNode() {
Set<PDGNode> duplicatedNodes = new LinkedHashSet<>(sliceNodes);
duplicatedNodes.retainAll(indispensableNodes);
for (PDGNode duplicatedNode : duplicatedNodes) {
if (duplicatedNode.containsClassInstanceCreation()) {
Map<PsiVariable, PsiNewExpression> classInstantiations = duplicatedNode.getClassInstantiations();
for (PsiVariable variableDeclaration : classInstantiations.keySet()) {
for (GraphEdge edge : duplicatedNode.outgoingEdges) {
PDGDependence dependence = (PDGDependence) edge;
if (subgraph.edgeBelongsToBlockBasedRegion(dependence) && dependence != null) {
PDGNode dstPDGNode = (PDGNode) dependence.dst;
if (removableNodes.contains(dstPDGNode)) {
if (dstPDGNode.changesStateOfReference(variableDeclaration)
|| dstPDGNode.assignsReference(variableDeclaration)
|| dstPDGNode.accessesReference(variableDeclaration))
return true;
}
}
}
}
}
}
return false;
}
private void visitExpression(final PsiElement element) {
if (element.getNode().getElementType().equals(JavaElementType.NEW_EXPRESSION)) {
visitPsiNewExpression((PsiNewExpression) element);
} else if (element.getNode().getElementType().
equals(JavaElementType.METHOD_CALL_EXPRESSION)) {
visitPsiMethodCallExpression((PsiMethodCallExpression) element);
} else if (element.getNode().getElementType().
equals(JavaElementType.ASSIGNMENT_EXPRESSION)) {
visitPsiAssignmentExpression((PsiAssignmentExpression) element);
} else if (element.getNode().getElementType().
equals(JavaElementType.REFERENCE_EXPRESSION)) {
visitPsiReferenceExpression((PsiReferenceExpression) element);
}
}
private void visitPsiNewExpression(final PsiNewExpression element) {
if (element.getType() != null) {
PsiType psiType = element.getType();
if (psiType != null && !ClassUtils.isPrimitive(psiType)) {
String type = removeSpecialSymbols(psiType.getCanonicalText());
addInMap(type, emptySet);
}
}
}
@Override public boolean shouldShow(Usage usage) {
PsiElement element = ((UsageInfo2UsageAdapter) usage).getElement();
if (element.getParent() instanceof PsiNewExpression) {
PsiMethod method = PsiConsultantImpl.findMethod(element);
return !SubscriberMetadata.isAnnotatedWithProducer(method);
}
return false;
}
public void setArrayCreation(PsiNewExpression creation) {
this.creation = toPointer(creation);
}
public boolean instanceOf(PsiExpression expression) {
return expression instanceof PsiNewExpression;
}
public boolean instanceOf(PsiExpression expression) {
return expression instanceof PsiNewExpression;
}
public PsiNewExpression getClassInstanceCreation() {
return (PsiNewExpression) this.creation.getElement();
}