ChangeUIDAction: do not show intention in presence of initializers: IDEA-195234

This commit is contained in:
Roman.Ivanov
2018-07-09 15:20:57 +07:00
parent 8c7c4b1052
commit 9f10da57c4
2 changed files with 24 additions and 0 deletions

View File

@@ -9,6 +9,8 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.siyeh.ig.psiutils.CommentTracker;
@@ -16,6 +18,7 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Random;
@@ -54,6 +57,15 @@ public class ChangeUIDAction extends PsiElementBaseIntentionAction {
PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class);
if (field == null) return false;
if (!field.getType().equals(PsiType.LONG)) return false;
if (field.hasModifierProperty(PsiModifier.FINAL)) {
PsiClass aClass = field.getContainingClass();
if (aClass == null) return false;
boolean initializersHasReferencesToField = Arrays.stream(aClass.getInitializers())
.anyMatch(initializer -> ReferencesSearch.search(field, new LocalSearchScope(initializer)).findFirst() != null);
if (initializersHasReferencesToField) {
return false;
}
}
return "serialVersionUID".equals(field.getName());
}
}

View File

@@ -0,0 +1,12 @@
// "Randomly change 'serialVersionUID' initializer" "false"
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.UnaryOperator;
public class Main {
static final long serialVersionUID<caret>;
static {
serialVersionUID = 12L;
}
}