diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
index 082b8237f7d2..f46131a11493 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -399,9 +399,9 @@ enumerated.class.display.name=Enumerated class
enumerated.class.problem.descriptor=Enumerated class #ref #loc
extended.for.statement.display.name=Extended 'for' statement
extended.for.statement.replace.quickfix=Replace with old-style 'for' statement
-variable.argument.method.display.name=Variable argument method
-variable.argument.method.problem.descriptor=Variable argument method #ref() #loc
-variable.argument.method.quickfix=Convert variable argument parameter to array
+variable.argument.method.display.name=Varargs method
+variable.argument.method.problem.descriptor=Varargs method #ref() #loc
+variable.argument.method.quickfix=Convert varargs parameter to array
hardcoded.file.separator.display.name=Hardcoded file separator
hardcoded.file.separator.problem.descriptor=Hardcoded file separator #ref #loc
hardcoded.file.separator.include.option=Include "example/*" in recognized MIME media types
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/VarargParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/VarargParameterInspection.java
index da461830d6ca..f2c6bb4a7df8 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/VarargParameterInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/VarargParameterInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2016 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.
@@ -16,13 +16,14 @@
package com.siyeh.ig.jdk;
import com.intellij.codeInsight.AnnotationUtil;
+import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.search.searches.ReferencesSearch;
-import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -31,7 +32,9 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
public class VarargParameterInspection extends BaseInspection {
@@ -61,6 +64,11 @@ public class VarargParameterInspection extends BaseInspection {
private static class VarargParameterFix extends InspectionGadgetsFix {
+ @Override
+ public boolean startInWriteAction() {
+ return false;
+ }
+
@Override
@NotNull
public String getFamilyName() {
@@ -73,40 +81,51 @@ public class VarargParameterInspection extends BaseInspection {
final PsiMethod method = (PsiMethod)element.getParent();
final PsiParameterList parameterList = method.getParameterList();
final PsiParameter[] parameters = parameterList.getParameters();
+ if (parameters.length == 0) {
+ return;
+ }
final PsiParameter lastParameter = parameters[parameters.length - 1];
if (!lastParameter.isVarArgs()) {
return;
}
- final PsiEllipsisType type = (PsiEllipsisType)lastParameter.getType();
- final Query query = ReferencesSearch.search(method);
- final PsiType componentType = type.getComponentType();
- final String typeText;
- if (componentType instanceof PsiClassType) {
- final PsiClassType classType = (PsiClassType)componentType;
- typeText = classType.rawType().getCanonicalText();
- } else {
- typeText = componentType.getCanonicalText();
- }
- final Collection references = query.findAll();
- for (PsiReference reference : references) {
- modifyCalls(reference, typeText, parameters.length - 1);
- }
- final PsiType arrayType = type.toArrayType();
- final PsiManager psiManager = lastParameter.getManager();
- final PsiElementFactory factory = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory();
- final PsiTypeElement newTypeElement = factory.createTypeElement(arrayType);
final PsiTypeElement typeElement = lastParameter.getTypeElement();
if (typeElement == null) {
return;
}
- final PsiAnnotation annotation = AnnotationUtil.findAnnotation(method, "java.lang.SafeVarargs");
- if (annotation != null) {
- annotation.delete();
+ final Collection references = ReferencesSearch.search(method).findAll();
+ final List prepare = new ArrayList<>();
+ prepare.add(parameterList);
+ for (PsiReference reference : references) {
+ prepare.add(reference.getElement());
}
- typeElement.replace(newTypeElement);
+ if (!FileModificationService.getInstance().preparePsiElementsForWrite(prepare)) {
+ return;
+ }
+ WriteAction.run(() -> {
+ final PsiEllipsisType type = (PsiEllipsisType)lastParameter.getType();
+ final PsiType componentType = type.getComponentType();
+ final String typeText;
+ if (componentType instanceof PsiClassType) {
+ final PsiClassType classType = (PsiClassType)componentType;
+ typeText = classType.rawType().getCanonicalText();
+ } else {
+ typeText = componentType.getCanonicalText();
+ }
+ for (PsiReference reference : references) {
+ modifyCall(reference, typeText, parameters.length - 1);
+ }
+ final PsiType arrayType = type.toArrayType();
+ final PsiElementFactory factory = JavaPsiFacade.getElementFactory(lastParameter.getProject());
+ final PsiTypeElement newTypeElement = factory.createTypeElement(arrayType);
+ final PsiAnnotation annotation = AnnotationUtil.findAnnotation(method, "java.lang.SafeVarargs");
+ if (annotation != null) {
+ annotation.delete();
+ }
+ typeElement.replace(newTypeElement);
+ });
}
- public static void modifyCalls(PsiReference reference, String arrayTypeText, int indexOfFirstVarargArgument) {
+ public static void modifyCall(PsiReference reference, String arrayTypeText, int indexOfFirstVarargArgument) {
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)reference.getElement();
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)referenceExpression.getParent();
final PsiExpressionList argumentList = methodCallExpression.getArgumentList();
@@ -134,10 +153,8 @@ public class VarargParameterInspection extends BaseInspection {
else {
argumentList.add(arrayExpression);
}
- final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
- final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(project);
- javaCodeStyleManager.shortenClassReferences(argumentList);
- codeStyleManager.reformat(argumentList);
+ JavaCodeStyleManager.getInstance(project).shortenClassReferences(argumentList);
+ CodeStyleManager.getInstance(project).reformat(argumentList);
}
}