Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,49 +22,47 @@
import com.siyeh.localize.InspectionGadgetsLocalize;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.psi.PsiElement;
import consulo.localize.LocalizeValue;
import jakarta.annotation.Nonnull;

@ExtensionImpl
public class InstanceofCatchParameterInspection extends BaseInspection {
@Nonnull
@Override
public LocalizeValue getDisplayName() {
return InspectionGadgetsLocalize.instanceofCatchParameterDisplayName();
}

@Nonnull
public String getDisplayName() {
return InspectionGadgetsLocalize.instanceofCatchParameterDisplayName().get();
}

@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.instanceofCatchParameterProblemDescriptor().get();
}

public BaseInspectionVisitor buildVisitor() {
return new InstanceofCatchParameterVisitor();
}
@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.instanceofCatchParameterProblemDescriptor().get();
}

private static class InstanceofCatchParameterVisitor
extends BaseInspectionVisitor {
public BaseInspectionVisitor buildVisitor() {
return new InstanceofCatchParameterVisitor();
}

@Override
public void visitInstanceOfExpression(
@Nonnull PsiInstanceOfExpression exp) {
super.visitInstanceOfExpression(exp);
if (!ControlFlowUtils.isInCatchBlock(exp)) {
return;
}
final PsiExpression operand = exp.getOperand();
if (!(operand instanceof PsiReferenceExpression)) {
return;
}
final PsiReferenceExpression ref = (PsiReferenceExpression)operand;
final PsiElement referent = ref.resolve();
if (!(referent instanceof PsiParameter)) {
return;
}
final PsiParameter parameter = (PsiParameter)referent;
if (!(parameter.getDeclarationScope() instanceof PsiCatchSection)) {
return;
}
registerError(exp);
private static class InstanceofCatchParameterVisitor extends BaseInspectionVisitor {
@Override
public void visitInstanceOfExpression(@Nonnull PsiInstanceOfExpression exp) {
super.visitInstanceOfExpression(exp);
if (!ControlFlowUtils.isInCatchBlock(exp)) {
return;
}
final PsiExpression operand = exp.getOperand();
if (!(operand instanceof PsiReferenceExpression)) {
return;
}
final PsiReferenceExpression ref = (PsiReferenceExpression) operand;
final PsiElement referent = ref.resolve();
if (!(referent instanceof PsiParameter)) {
return;
}
final PsiParameter parameter = (PsiParameter) referent;
if (!(parameter.getDeclarationScope() instanceof PsiCatchSection)) {
return;
}
registerError(exp);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,64 +15,65 @@
*/
package com.intellij.java.impl.ig.errorhandling;

import com.siyeh.localize.InspectionGadgetsLocalize;
import jakarta.annotation.Nonnull;

import com.intellij.java.language.psi.PsiCodeBlock;
import com.intellij.java.language.psi.PsiMethod;
import com.intellij.java.language.psi.PsiTryStatement;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.psi.util.PsiTreeUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.localize.InspectionGadgetsLocalize;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.localize.LocalizeValue;
import jakarta.annotation.Nonnull;

@ExtensionImpl
public class NestedTryStatementInspection extends BaseInspection {
@Nonnull
@Override
public LocalizeValue getDisplayName() {
return InspectionGadgetsLocalize.nestedTryStatementDisplayName();
}

@Nonnull
public String getDisplayName() {
return InspectionGadgetsLocalize.nestedTryStatementDisplayName().get();
}

@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.nestedTryStatementProblemDescriptor().get();
}
@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.nestedTryStatementProblemDescriptor().get();
}

public BaseInspectionVisitor buildVisitor() {
return new NestedTryStatementVisitor();
}
public BaseInspectionVisitor buildVisitor() {
return new NestedTryStatementVisitor();
}

private static class NestedTryStatementVisitor
extends BaseInspectionVisitor {
private static class NestedTryStatementVisitor
extends BaseInspectionVisitor {

@Override
public void visitTryStatement(@Nonnull PsiTryStatement statement) {
super.visitTryStatement(statement);
final PsiTryStatement parentTry =
PsiTreeUtil.getParentOfType(statement,
PsiTryStatement.class);
if (parentTry == null) {
return;
}
final PsiCodeBlock tryBlock = parentTry.getTryBlock();
if (tryBlock == null) {
return;
}
if (!PsiTreeUtil.isAncestor(tryBlock, statement, true)) {
return;
}
final PsiMethod containingMethod =
PsiTreeUtil.getParentOfType(statement, PsiMethod.class);
final PsiMethod containingContainingMethod =
PsiTreeUtil.getParentOfType(parentTry, PsiMethod.class);
if (containingMethod == null ||
containingContainingMethod == null ||
!containingMethod.equals(containingContainingMethod)) {
return;
}
registerStatementError(statement);
@Override
public void visitTryStatement(@Nonnull PsiTryStatement statement) {
super.visitTryStatement(statement);
final PsiTryStatement parentTry =
PsiTreeUtil.getParentOfType(
statement,
PsiTryStatement.class
);
if (parentTry == null) {
return;
}
final PsiCodeBlock tryBlock = parentTry.getTryBlock();
if (tryBlock == null) {
return;
}
if (!PsiTreeUtil.isAncestor(tryBlock, statement, true)) {
return;
}
final PsiMethod containingMethod =
PsiTreeUtil.getParentOfType(statement, PsiMethod.class);
final PsiMethod containingContainingMethod =
PsiTreeUtil.getParentOfType(parentTry, PsiMethod.class);
if (containingMethod == null ||
containingContainingMethod == null ||
!containingMethod.equals(containingContainingMethod)) {
return;
}
registerStatementError(statement);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,85 +25,84 @@
import consulo.language.psi.PsiElement;
import consulo.localize.LocalizeValue;
import jakarta.annotation.Nonnull;
import org.jetbrains.annotations.Nls;

import javax.swing.*;

@ExtensionImpl
public class NewExceptionWithoutArgumentsInspection extends BaseInspection {
@SuppressWarnings("PublicField")
public boolean ignoreWithoutParameters = false;

@SuppressWarnings("PublicField")
public boolean ignoreWithoutParameters = false;

@Nls
@Nonnull
@Override
public String getDisplayName() {
return InspectionGadgetsLocalize.newExceptionWithoutArgumentsDisplayName().get();
}

@Nonnull
@Override
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.newExceptionWithoutArgumentsProblemDescriptor().get();
}

@Override
public JComponent createOptionsPanel() {
LocalizeValue message = InspectionGadgetsLocalize.newExceptionWithoutArgumentsIgnoreOption();
return new SingleCheckboxOptionsPanel(message.get(), this, "ignoreWithoutParameters");
}
@Nonnull
@Override
public LocalizeValue getDisplayName() {
return InspectionGadgetsLocalize.newExceptionWithoutArgumentsDisplayName();
}

@Override
public BaseInspectionVisitor buildVisitor() {
return new NewExceptionWithoutArgumentsVisitor();
}
@Nonnull
@Override
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.newExceptionWithoutArgumentsProblemDescriptor().get();
}

private class NewExceptionWithoutArgumentsVisitor extends BaseInspectionVisitor {
@Override
public JComponent createOptionsPanel() {
LocalizeValue message = InspectionGadgetsLocalize.newExceptionWithoutArgumentsIgnoreOption();
return new SingleCheckboxOptionsPanel(message.get(), this, "ignoreWithoutParameters");
}

@Override
public void visitNewExpression(PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiExpressionList argumentList = expression.getArgumentList();
if (argumentList == null) {
return;
}
final PsiExpression[] expressions = argumentList.getExpressions();
if (expressions.length != 0) {
return;
}
final PsiJavaCodeReferenceElement classReference = expression.getClassReference();
if (classReference == null) {
return;
}
final PsiElement target = classReference.resolve();
if (!(target instanceof PsiClass)) {
return;
}
final PsiClass aClass = (PsiClass)target;
if (!InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_LANG_EXCEPTION)) {
return;
}
if (ignoreWithoutParameters) {
if (!hasAccessibleConstructorWithParameters(aClass, expression)) return;
}
registerNewExpressionError(expression);
public BaseInspectionVisitor buildVisitor() {
return new NewExceptionWithoutArgumentsVisitor();
}

private boolean hasAccessibleConstructorWithParameters(PsiClass aClass, PsiElement context) {
final PsiMethod[] constructors = aClass.getConstructors();
for (PsiMethod constructor : constructors) {
final PsiParameterList parameterList = constructor.getParameterList();
final int count = parameterList.getParametersCount();
if (count <= 0) {
continue;
private class NewExceptionWithoutArgumentsVisitor extends BaseInspectionVisitor {

@Override
public void visitNewExpression(PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiExpressionList argumentList = expression.getArgumentList();
if (argumentList == null) {
return;
}
final PsiExpression[] expressions = argumentList.getExpressions();
if (expressions.length != 0) {
return;
}
final PsiJavaCodeReferenceElement classReference = expression.getClassReference();
if (classReference == null) {
return;
}
final PsiElement target = classReference.resolve();
if (!(target instanceof PsiClass)) {
return;
}
final PsiClass aClass = (PsiClass) target;
if (!InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_LANG_EXCEPTION)) {
return;
}
if (ignoreWithoutParameters) {
if (!hasAccessibleConstructorWithParameters(aClass, expression)) {
return;
}
}
registerNewExpressionError(expression);
}
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(context.getProject()).getResolveHelper();
if (resolveHelper.isAccessible(constructor, context, aClass)) {
return true;

private boolean hasAccessibleConstructorWithParameters(PsiClass aClass, PsiElement context) {
final PsiMethod[] constructors = aClass.getConstructors();
for (PsiMethod constructor : constructors) {
final PsiParameterList parameterList = constructor.getParameterList();
final int count = parameterList.getParametersCount();
if (count <= 0) {
continue;
}
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(context.getProject()).getResolveHelper();
if (resolveHelper.isAccessible(constructor, context, aClass)) {
return true;
}
}
return false;
}
}
return false;
}
}
}
Loading
Loading