diff --git a/java/java-analysis-impl/src/com/siyeh/ig/psiutils/SideEffectChecker.java b/java/java-analysis-impl/src/com/siyeh/ig/psiutils/SideEffectChecker.java
index 1ef7396981f0..96e689ae3360 100644
--- a/java/java-analysis-impl/src/com/siyeh/ig/psiutils/SideEffectChecker.java
+++ b/java/java-analysis-impl/src/com/siyeh/ig/psiutils/SideEffectChecker.java
@@ -329,52 +329,12 @@ public final class SideEffectChecker {
}
private static @NotNull ThreeState getConstructorSideEffect(@NotNull PsiNewExpression newExpression) {
- if (newExpression.isArrayCreation()) return ThreeState.NO;
- PsiAnonymousClass anonymousClass = newExpression.getAnonymousClass();
- if (anonymousClass != null && anonymousClass.getInitializers().length == 0) {
- PsiClass baseClass = anonymousClass.getBaseClassType().resolve();
- if (baseClass != null && baseClass.isInterface()) {
- return ThreeState.NO;
- }
+ MutationSignature signature = MutationSignature.fromCall(newExpression);
+ if (signature.isPure()) {
+ return ThreeState.NO;
}
- PsiJavaCodeReferenceElement classReference = newExpression.getClassReference();
- PsiClass aClass = classReference == null ? null : tryCast(classReference.resolve(), PsiClass.class);
- String qualifiedName = aClass == null ? null : aClass.getQualifiedName();
- if (qualifiedName == null) return ThreeState.UNSURE;
- if (ourSideEffectFreeClasses.contains(qualifiedName)) return ThreeState.NO;
- PsiMethod method = newExpression.resolveConstructor();
- if (method != null && !method.isDefaultConstructor()) {
- MutationSignature signature = MutationSignature.fromMethod(method);
- if (signature.isPure()) {
- return ThreeState.NO;
- }
- if (signature.mutatesAnything()) {
- return ThreeState.YES;
- }
- }
-
- PsiFile file = aClass.getContainingFile();
- PsiDirectory directory = file.getContainingDirectory();
- PsiPackage classPackage = directory == null ? null : JavaDirectoryService.getInstance().getPackage(directory);
- String packageName = classPackage == null ? null : classPackage.getQualifiedName();
-
- // all Throwable descendants from java.lang are side effects free
- if (CommonClassNames.DEFAULT_PACKAGE.equals(packageName) || "java.io".equals(packageName)) {
- if (PsiClassUtil.isThrowable(aClass)) {
- return ThreeState.NO;
- }
- }
- if (method == null || method.isDefaultConstructor()) {
- PsiClass superClass = aClass.getSuperClass();
- if (superClass != null && CommonClassNames.JAVA_LANG_OBJECT.equals(superClass.getQualifiedName())) {
- for (PsiClassInitializer initializer : aClass.getInitializers()) {
- if (!initializer.hasModifierProperty(PsiModifier.STATIC)) return ThreeState.UNSURE;
- }
- for (PsiField field : aClass.getFields()) {
- if (!field.hasModifierProperty(PsiModifier.STATIC) && field.hasInitializer()) return ThreeState.UNSURE;
- }
- return ThreeState.NO;
- }
+ if (signature.mutatesAnything()) {
+ return ThreeState.YES;
}
return ThreeState.UNSURE;
}
diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/pointless_null_check/PointlessNullCheck.java b/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/pointless_null_check/PointlessNullCheck.java
index be25bcc06ad3..ce3a103952fc 100644
--- a/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/pointless_null_check/PointlessNullCheck.java
+++ b/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/pointless_null_check/PointlessNullCheck.java
@@ -3,6 +3,8 @@ package com.siyeh.igtest.controlflow.pointless_null_check;
public class PointlessNullCheck {
String arg1 = "foo";
+
+ double sideEffect = Math.random();
public void testMethods(Object obj, Object obj1, Object obj2) {
if(obj != null && check(obj)) {
diff --git a/java/java-tests/testData/refactoring/inlineMethod/AnonymousCall.java.after b/java/java-tests/testData/refactoring/inlineMethod/AnonymousCall.java.after
index feb4296de1e2..3fd68f3d3fbd 100644
--- a/java/java-tests/testData/refactoring/inlineMethod/AnonymousCall.java.after
+++ b/java/java-tests/testData/refactoring/inlineMethod/AnonymousCall.java.after
@@ -1,10 +1,5 @@
class Foo {
void test() {
- new Object() {
- void foo(String s) {
- System.out.println(s);
- }
- };
System.out.println("hello");
}
}
\ No newline at end of file
diff --git a/java/jdkAnnotations/java/lang/annotations.xml b/java/jdkAnnotations/java/lang/annotations.xml
index dc553a1937db..ea57a6b33af0 100644
--- a/java/jdkAnnotations/java/lang/annotations.xml
+++ b/java/jdkAnnotations/java/lang/annotations.xml
@@ -5,6 +5,11 @@
+ -
+
+
+
+
-
@@ -44,11 +49,21 @@
-
+ -
+
+
+
+
-
+ -
+
+
+
+
-
@@ -651,6 +666,11 @@
-
+ -
+
+
+
+
-
@@ -680,6 +700,11 @@
-
+ -
+
+
+
+
-
@@ -688,6 +713,16 @@
-
+ -
+
+
+
+
+ -
+
+
+
+
-
@@ -706,12 +741,22 @@
- -
+
-
+
+
+
+
+ -
- -
+
-
+
+
+
+
+ -
@@ -759,6 +804,11 @@
-
+ -
+
+
+
+
-
@@ -807,11 +857,21 @@
-
+ -
+
+
+
+
-
+ -
+
+
+
+
-
@@ -1058,6 +1118,11 @@
-
+ -
+
+
+
+
-
@@ -1099,6 +1164,11 @@
+ -
+
+
+
+
-
@@ -1655,6 +1725,26 @@
-
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
-
diff --git a/java/jdkAnnotations/java/util/annotations.xml b/java/jdkAnnotations/java/util/annotations.xml
index 21d527a59c92..08326e60fcb7 100644
--- a/java/jdkAnnotations/java/util/annotations.xml
+++ b/java/jdkAnnotations/java/util/annotations.xml
@@ -2854,6 +2854,11 @@
-
+ -
+
+
+
+
-
@@ -3278,6 +3283,26 @@
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
-
@@ -3288,6 +3313,46 @@
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
-
@@ -3295,6 +3360,11 @@
+ -
+
+
+
+
-
@@ -4994,6 +5064,11 @@
+ -
+
+
+
+
-
@@ -5047,6 +5122,26 @@
-
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
-
@@ -5054,5 +5149,25 @@
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+