From 3fd978a24f9252b6d1e775e6f7ca723d6d85fd4d Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 7 Nov 2018 15:46:42 +0100 Subject: [PATCH] IG: fix AIOOBE (EA-131665) --- .../src/com/siyeh/ig/psiutils/MethodCallUtils.java | 7 ++++--- .../abstraction/BooleanParameterInspectionTest.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java index 50bd9cb3c637..98ac754e03a9 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2017 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2018 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -414,7 +414,7 @@ public class MethodCallUtils { public static boolean isUsedAsSuperConstructorCallArgument(@NotNull PsiParameter parameter, boolean superMustBeLibrary) { final PsiElement scope = parameter.getDeclarationScope(); - if (!(scope instanceof PsiMethod)) { + if (!(scope instanceof PsiMethod) || !((PsiMethod)scope).isConstructor()) { return false; } PsiMethod method = (PsiMethod)scope; @@ -445,7 +445,8 @@ public class MethodCallUtils { if (JavaPsiConstructorUtil.isSuperConstructorCall(call) && (!superMustBeLibrary || method instanceof PsiCompiledElement)) { return true; } - parameter = method.getParameterList().getParameters()[index]; + final PsiParameter[] parameters = method.getParameterList().getParameters(); + parameter = parameters[Math.min(index, parameters.length - 1)]; } } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/BooleanParameterInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/BooleanParameterInspectionTest.java index 7c048e8ceb49..85b315edba9a 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/BooleanParameterInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/BooleanParameterInspectionTest.java @@ -44,6 +44,17 @@ public class BooleanParameterInspectionTest extends LightInspectionTestCase { "}"); } + public void testVarargs() { + doTest("class Y {" + + " public Y(boolean... b) {}" + + "}" + + "class X extends Y {" + + " public /*'public' constructor 'X()' with 'boolean' parameter*/X/**/(boolean b) {" + + " super(true, b);" + + " }" + + "}"); + } + @Override protected LocalInspectionTool getInspection() { return new BooleanParameterInspection();