diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspection.java index 318600cc06fb..466f8cb90567 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -15,13 +15,11 @@ */ package com.siyeh.ig.abstraction; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiField; -import com.intellij.psi.PsiParameter; -import com.intellij.psi.PsiTypeElement; +import com.intellij.psi.*; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.psiutils.MethodUtils; import com.siyeh.ig.psiutils.TypeUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -70,6 +68,14 @@ public class OptionalUsedAsFieldOrParameterTypeInspection extends BaseInspection @Override public void visitParameter(PsiParameter parameter) { super.visitParameter(parameter); + final PsiElement scope = parameter.getDeclarationScope(); + if (!(scope instanceof PsiMethod)) { + return; + } + final PsiMethod method = (PsiMethod)scope; + if (MethodUtils.hasSuper(method)) { + return; + } checkTypeElement(parameter.getTypeElement()); } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspectionTest.java index f88cd76dd6ea..73d8026b81dd 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/abstraction/OptionalUsedAsFieldOrParameterTypeInspectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,7 +16,9 @@ package com.siyeh.ig.abstraction; import com.intellij.codeInspection.InspectionProfileEntry; +import com.intellij.testFramework.LightProjectDescriptor; import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -55,20 +57,38 @@ public class OptionalUsedAsFieldOrParameterTypeInspectionTest extends LightInspe "}"); } + public void testParameterInOverridingMethod() { + doTest("import java.util.Optional;" + + "import java.util.function.Function;" + + "class X {" + + " Function, Long> homebrewOrElseNull = new Function, Long>() {" + + " @Override\n" + + " public Long apply(Optional input) {" + + " return input.isPresent() ? input.get() : null;" + + " }" + + " };" + + "}"); + } + + public void testForeach() { + doTest("import java.util.Optional;" + + "class X {" + + " void x(Optional[] array) {" + + " for(Optional optional : array) {" + + " }" + + " }" + + "}"); + } + @Nullable @Override protected InspectionProfileEntry getInspection() { return new OptionalUsedAsFieldOrParameterTypeInspection(); } + @NotNull @Override - protected String[] getEnvironmentClasses() { - return new String[] { - "package java.util;" + - "public final class Optional {}", - - "package java.util;" + - "public final class OptionalDouble {}" - }; + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_8; } } \ No newline at end of file