From 503c2c1d1a35104cce8dc15eeb43afbe3ebe9c8b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 12 Apr 2016 16:32:40 +0200 Subject: [PATCH] abstract method call in constructor: don't warn inside lambda body --- .../siyeh/ig/psiutils/MethodCallUtils.java | 2 +- .../AbstractMethodCallInConstructor.java | 13 ++++++++ ...MethodCallInConstructorInspectionTest.java | 31 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/initialization/abstract_method_call_in_constructor/AbstractMethodCallInConstructor.java create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/initialization/AbstractMethodCallInConstructorInspectionTest.java 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 35da41e6d8c5..66e29475b579 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java @@ -150,7 +150,7 @@ public class MethodCallUtils { } public static boolean isCallDuringObjectConstruction(PsiMethodCallExpression expression) { - final PsiMember member = PsiTreeUtil.getParentOfType(expression, PsiMethod.class, PsiClassInitializer.class, PsiField.class); + final PsiMember member = PsiTreeUtil.getParentOfType(expression, PsiMember.class, true, PsiClass.class, PsiLambdaExpression.class); if (member == null) { return false; } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/initialization/abstract_method_call_in_constructor/AbstractMethodCallInConstructor.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/initialization/abstract_method_call_in_constructor/AbstractMethodCallInConstructor.java new file mode 100644 index 000000000000..88ad0be72eda --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/initialization/abstract_method_call_in_constructor/AbstractMethodCallInConstructor.java @@ -0,0 +1,13 @@ +abstract class A { + public A() { + Runnable r = () -> foo(); + Runnable r1 = new Runnable() { + public void run() { + foo(); + } + }; + + } + + abstract void foo(); +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/initialization/AbstractMethodCallInConstructorInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/initialization/AbstractMethodCallInConstructorInspectionTest.java new file mode 100644 index 000000000000..26c16148c326 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/initialization/AbstractMethodCallInConstructorInspectionTest.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.initialization; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; + +public class AbstractMethodCallInConstructorInspectionTest extends LightInspectionTestCase { + + public void testAbstractMethodCallInConstructor() { + doTest(); + } + + @Override + protected InspectionProfileEntry getInspection() { + return new AbstractMethodCallInConstructorInspection(); + } +}