IG inline fixes: use inline method processor;

if simple getter is inlined in simple expr statement - it should be deleted (IDEA-127135)
This commit is contained in:
Anna Kozlova
2014-07-22 13:49:34 +02:00
parent 883582731c
commit 1c70a2804a
7 changed files with 343 additions and 428 deletions
@@ -1,198 +0,0 @@
/*
* Copyright 2003-2011 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.
* 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.performance;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.ClassUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class CallToSimpleGetterInClassInspection extends BaseInspection {
@SuppressWarnings("UnusedDeclaration")
public boolean ignoreGetterCallsOnOtherObjects = false;
@SuppressWarnings("UnusedDeclaration")
public boolean onlyReportPrivateGetter = false;
@Override
@NotNull
public String getID() {
return "CallToSimpleGetterFromWithinClass";
}
@Override
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message("call.to.simple.getter.in.class.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message("call.to.simple.getter.in.class.problem.descriptor");
}
@Override
@Nullable
public JComponent createOptionsPanel() {
final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.simple.getter.in.class.ignore.option"),
"ignoreGetterCallsOnOtherObjects");
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.private.simple.getter.in.class.option"),
"onlyReportPrivateGetter");
return optionsPanel;
}
@Override
public InspectionGadgetsFix buildFix(Object... infos) {
return new InlineCallFix();
}
private static class InlineCallFix extends InspectionGadgetsFix {
@NotNull
@Override
public String getFamilyName() {
return getName();
}
@Override
@NotNull
public String getName() {
return InspectionGadgetsBundle.message("call.to.simple.getter.in.class.inline.quickfix");
}
@Override
public void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException {
final PsiElement methodIdentifier = descriptor.getPsiElement();
final PsiReferenceExpression methodExpression = (PsiReferenceExpression)methodIdentifier.getParent();
if (methodExpression == null) {
return;
}
final PsiMethodCallExpression call = (PsiMethodCallExpression)methodExpression.getParent();
if (call == null) {
return;
}
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
final PsiCodeBlock body = method.getBody();
if (body == null) {
return;
}
final PsiStatement[] statements = body.getStatements();
final PsiReturnStatement returnStatement = (PsiReturnStatement)statements[0];
final PsiExpression returnValue = returnStatement.getReturnValue();
if (!(returnValue instanceof PsiReferenceExpression)) {
return;
}
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)returnValue;
final PsiField field = (PsiField)referenceExpression.resolve();
if (field == null) {
return;
}
final String fieldName = field.getName();
if (fieldName == null) {
return;
}
final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier == null) {
final JavaPsiFacade facade = JavaPsiFacade.getInstance(call.getProject());
final PsiResolveHelper resolveHelper = facade.getResolveHelper();
final PsiVariable variable = resolveHelper.resolveReferencedVariable(fieldName, call);
if (variable == null) {
return;
}
if (variable.equals(field)) {
PsiReplacementUtil.replaceExpression(call, fieldName);
}
else {
PsiReplacementUtil.replaceExpression(call, "this." + fieldName);
}
}
else {
PsiReplacementUtil.replaceExpression(call, qualifier.getText() + '.' + fieldName);
}
}
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new CallToSimpleGetterInClassVisitor();
}
private class CallToSimpleGetterInClassVisitor extends BaseInspectionVisitor {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
super.visitMethodCallExpression(call);
final PsiClass containingClass = ClassUtils.getContainingClass(call);
if (containingClass == null) {
return;
}
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
if (!containingClass.equals(method.getContainingClass())) {
return;
}
final PsiReferenceExpression methodExpression = call.getMethodExpression();
final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
if (ignoreGetterCallsOnOtherObjects) {
return;
}
final PsiType type = qualifier.getType();
if (!(type instanceof PsiClassType)) {
return;
}
final PsiClassType classType = (PsiClassType)type;
final PsiClass qualifierClass = classType.resolve();
if (!containingClass.equals(qualifierClass)) {
return;
}
}
if (!PropertyUtil.isSimpleGetter(method)) {
return;
}
if (onlyReportPrivateGetter && !method.hasModifierProperty(PsiModifier.PRIVATE)) {
return;
}
final Query<PsiMethod> query = OverridingMethodsSearch.search(method, true);
final PsiMethod overridingMethod = query.findFirst();
if (overridingMethod != null) {
return;
}
registerMethodCallError(call);
}
}
}
@@ -0,0 +1,103 @@
/*
* Copyright 2000-2014 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.performance;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.ClassUtils;
import org.jetbrains.annotations.NotNull;
public class CallToSimpleGetterInClassInspectionBase extends BaseInspection {
@SuppressWarnings("UnusedDeclaration")
public boolean ignoreGetterCallsOnOtherObjects = false;
@SuppressWarnings("UnusedDeclaration")
public boolean onlyReportPrivateGetter = false;
@Override
@NotNull
public String getID() {
return "CallToSimpleGetterFromWithinClass";
}
@Override
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message("call.to.simple.getter.in.class.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message("call.to.simple.getter.in.class.problem.descriptor");
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new CallToSimpleGetterInClassVisitor();
}
private class CallToSimpleGetterInClassVisitor extends BaseInspectionVisitor {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
super.visitMethodCallExpression(call);
final PsiClass containingClass = ClassUtils.getContainingClass(call);
if (containingClass == null) {
return;
}
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
if (!containingClass.equals(method.getContainingClass())) {
return;
}
final PsiReferenceExpression methodExpression = call.getMethodExpression();
final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
if (ignoreGetterCallsOnOtherObjects) {
return;
}
final PsiType type = qualifier.getType();
if (!(type instanceof PsiClassType)) {
return;
}
final PsiClassType classType = (PsiClassType)type;
final PsiClass qualifierClass = classType.resolve();
if (!containingClass.equals(qualifierClass)) {
return;
}
}
if (!PropertyUtil.isSimpleGetter(method)) {
return;
}
if (onlyReportPrivateGetter && !method.hasModifierProperty(PsiModifier.PRIVATE)) {
return;
}
final Query<PsiMethod> query = OverridingMethodsSearch.search(method, true);
final PsiMethod overridingMethod = query.findFirst();
if (overridingMethod != null) {
return;
}
registerMethodCallError(call);
}
}
}
@@ -1,201 +0,0 @@
/*
* Copyright 2003-2011 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.
* 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.performance;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.ClassUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class CallToSimpleSetterInClassInspection extends BaseInspection {
@SuppressWarnings("UnusedDeclaration")
public boolean ignoreSetterCallsOnOtherObjects = false;
@SuppressWarnings("UnusedDeclaration")
public boolean onlyReportPrivateSetter = false;
@Override
@NotNull
public String getID() {
return "CallToSimpleSetterFromWithinClass";
}
@Override
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message("call.to.simple.setter.in.class.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message("call.to.simple.setter.in.class.problem.descriptor");
}
@Override
@Nullable
public JComponent createOptionsPanel() {
final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.simple.setter.in.class.ignore.option"),
"ignoreSetterCallsOnOtherObjects");
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.private.setter.in.class.option"),
"onlyReportPrivateSetter");
return optionsPanel;
}
@Override
public InspectionGadgetsFix buildFix(Object... infos) {
return new InlineCallFix();
}
private static class InlineCallFix extends InspectionGadgetsFix {
@Override
@NotNull
public String getName() {
return InspectionGadgetsBundle.message("call.to.simple.setter.in.class.inline.quickfix");
}
@NotNull
@Override
public String getFamilyName() {
return getName();
}
@Override
public void doFix(Project project, ProblemDescriptor descriptor)
throws IncorrectOperationException {
final PsiElement methodIdentifier = descriptor.getPsiElement();
final PsiReferenceExpression methodExpression = (PsiReferenceExpression)methodIdentifier.getParent();
if (methodExpression == null) {
return;
}
final PsiMethodCallExpression call = (PsiMethodCallExpression)methodExpression.getParent();
if (call == null) {
return;
}
final PsiExpressionList argumentList = call.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
final PsiExpression argument = arguments[0];
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
final PsiCodeBlock body = method.getBody();
if (body == null) {
return;
}
final PsiStatement[] statements = body.getStatements();
final PsiExpressionStatement assignmentStatement = (PsiExpressionStatement)statements[0];
final PsiAssignmentExpression assignment = (PsiAssignmentExpression)assignmentStatement.getExpression();
final PsiExpression qualifier = methodExpression.getQualifierExpression();
final PsiReferenceExpression lhs = (PsiReferenceExpression)assignment.getLExpression();
final PsiField field = (PsiField)lhs.resolve();
if (field == null) {
return;
}
final String fieldName = field.getName();
if (qualifier == null) {
final JavaPsiFacade manager = JavaPsiFacade.getInstance(call.getProject());
final PsiResolveHelper resolveHelper = manager.getResolveHelper();
final PsiVariable variable = resolveHelper.resolveReferencedVariable(fieldName, call);
if (variable == null) {
return;
}
@NonNls final String newExpression;
if (variable.equals(field)) {
newExpression = fieldName + " = " + argument.getText();
}
else {
newExpression = "this." + fieldName + " = " + argument.getText();
}
PsiReplacementUtil.replaceExpression(call, newExpression);
}
else {
final String newExpression = qualifier.getText() + '.' + fieldName + " = " + argument.getText();
PsiReplacementUtil.replaceExpression(call, newExpression);
}
}
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new CallToSimpleSetterInClassVisitor();
}
private class CallToSimpleSetterInClassVisitor extends BaseInspectionVisitor {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
super.visitMethodCallExpression(call);
final PsiClass containingClass = ClassUtils.getContainingClass(call);
if (containingClass == null) {
return;
}
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
if (!containingClass.equals(method.getContainingClass())) {
return;
}
final PsiReferenceExpression methodExpression = call.getMethodExpression();
final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
if (ignoreSetterCallsOnOtherObjects) {
return;
}
final PsiType type = qualifier.getType();
if (!(type instanceof PsiClassType)) {
return;
}
final PsiClassType classType = (PsiClassType)type;
final PsiClass qualifierClass = classType.resolve();
if (!containingClass.equals(qualifierClass)) {
return;
}
}
if (!PropertyUtil.isSimpleSetter(method)) {
return;
}
if (onlyReportPrivateSetter && !method.hasModifierProperty(PsiModifier.PRIVATE)) {
return;
}
final Query<PsiMethod> query = OverridingMethodsSearch.search(method, true);
final PsiMethod overridingMethod = query.findFirst();
if (overridingMethod != null) {
return;
}
registerMethodCallError(call);
}
}
}
@@ -0,0 +1,103 @@
/*
* Copyright 2000-2014 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.performance;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.ClassUtils;
import org.jetbrains.annotations.NotNull;
public class CallToSimpleSetterInClassInspectionBase extends BaseInspection {
@SuppressWarnings("UnusedDeclaration")
public boolean ignoreSetterCallsOnOtherObjects = false;
@SuppressWarnings("UnusedDeclaration")
public boolean onlyReportPrivateSetter = false;
@Override
@NotNull
public String getID() {
return "CallToSimpleSetterFromWithinClass";
}
@Override
@NotNull
public String getDisplayName() {
return InspectionGadgetsBundle.message("call.to.simple.setter.in.class.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message("call.to.simple.setter.in.class.problem.descriptor");
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new CallToSimpleSetterInClassVisitor();
}
private class CallToSimpleSetterInClassVisitor extends BaseInspectionVisitor {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
super.visitMethodCallExpression(call);
final PsiClass containingClass = ClassUtils.getContainingClass(call);
if (containingClass == null) {
return;
}
final PsiMethod method = call.resolveMethod();
if (method == null) {
return;
}
if (!containingClass.equals(method.getContainingClass())) {
return;
}
final PsiReferenceExpression methodExpression = call.getMethodExpression();
final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier != null && !(qualifier instanceof PsiThisExpression)) {
if (ignoreSetterCallsOnOtherObjects) {
return;
}
final PsiType type = qualifier.getType();
if (!(type instanceof PsiClassType)) {
return;
}
final PsiClassType classType = (PsiClassType)type;
final PsiClass qualifierClass = classType.resolve();
if (!containingClass.equals(qualifierClass)) {
return;
}
}
if (!PropertyUtil.isSimpleSetter(method)) {
return;
}
if (onlyReportPrivateSetter && !method.hasModifierProperty(PsiModifier.PRIVATE)) {
return;
}
final Query<PsiMethod> query = OverridingMethodsSearch.search(method, true);
final PsiMethod overridingMethod = query.findFirst();
if (overridingMethod != null) {
return;
}
registerMethodCallError(call);
}
}
}
@@ -16,52 +16,54 @@
package com.siyeh.ig.fixes;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiMethodCallExpression;
import com.intellij.psi.PsiReferenceExpression;
import com.intellij.refactoring.JavaRefactoringActionHandlerFactory;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.inline.InlineMethodProcessor;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.InspectionGadgetsFix;
import org.jetbrains.annotations.NotNull;
public class InlineCallFix extends InspectionGadgetsFix {
@Override
@NotNull
public String getFamilyName() {
return getName();
}
private String myName;
public InlineCallFix(String name) {
myName = name;
}
public InlineCallFix() {
this(InspectionGadgetsBundle.message("inline.call.quickfix"));
}
@Override
@NotNull
public String getFamilyName() {
return myName;
}
@Override
@NotNull
public String getName() {
return InspectionGadgetsBundle.message("inline.call.quickfix");
return getFamilyName();
}
@Override
public void doFix(final Project project, ProblemDescriptor descriptor) {
final PsiElement nameElement = descriptor.getPsiElement();
final PsiReferenceExpression methodExpression =
(PsiReferenceExpression)nameElement.getParent();
assert methodExpression != null;
final PsiMethodCallExpression methodCallExpression =
(PsiMethodCallExpression)methodExpression.getParent();
final JavaRefactoringActionHandlerFactory factory =
JavaRefactoringActionHandlerFactory.getInstance();
final RefactoringActionHandler inlineHandler = factory.createInlineHandler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
inlineHandler.invoke(project, new PsiElement[]{methodCallExpression}, null);
}
};
if (ApplicationManager.getApplication().isUnitTestMode()) {
runnable.run();
}
else {
ApplicationManager.getApplication().invokeLater(runnable, project.getDisposed());
}
final PsiReferenceExpression methodExpression = (PsiReferenceExpression)nameElement.getParent();
if (methodExpression == null) return;
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)methodExpression.getParent();
final PsiMethod method = methodCallExpression.resolveMethod();
if (method == null) return;
inline(project, methodExpression, method);
}
protected void inline(Project project, PsiReferenceExpression methodExpression, PsiMethod method) {
new InlineMethodProcessor(project, method, methodExpression, null, true,
JavaRefactoringSettings.getInstance().RENAME_SEARCH_IN_COMMENTS_FOR_METHOD,
JavaRefactoringSettings.getInstance().RENAME_SEARCH_FOR_TEXT_FOR_METHOD).inlineMethodCall(methodExpression);
}
}
@@ -0,0 +1,63 @@
/*
* Copyright 2003-2011 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.
* 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.performance;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiExpressionStatement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiReferenceExpression;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.InlineCallFix;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class CallToSimpleGetterInClassInspection extends CallToSimpleGetterInClassInspectionBase {
@Override
@Nullable
public JComponent createOptionsPanel() {
final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.simple.getter.in.class.ignore.option"),
"ignoreGetterCallsOnOtherObjects");
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.private.simple.getter.in.class.option"),
"onlyReportPrivateGetter");
return optionsPanel;
}
@Override
public InspectionGadgetsFix buildFix(Object... infos) {
return new InlineOrDeleteCallFix(InspectionGadgetsBundle.message("call.to.simple.getter.in.class.inline.quickfix"));
}
private static class InlineOrDeleteCallFix extends InlineCallFix {
public InlineOrDeleteCallFix(String name) {
super(name);
}
@Override
protected void inline(Project project, PsiReferenceExpression methodExpression, PsiMethod method) {
final PsiElement statement = methodExpression.getParent().getParent();
if (statement instanceof PsiExpressionStatement) {
statement.delete();
} else {
super.inline(project, methodExpression, method);
}
}
}
}
@@ -0,0 +1,43 @@
/*
* Copyright 2003-2011 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.
* 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.performance;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.InlineCallFix;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class CallToSimpleSetterInClassInspection extends CallToSimpleSetterInClassInspectionBase {
@Override
@Nullable
public JComponent createOptionsPanel() {
final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.simple.setter.in.class.ignore.option"),
"ignoreSetterCallsOnOtherObjects");
optionsPanel.addCheckbox(InspectionGadgetsBundle.message("call.to.private.setter.in.class.option"),
"onlyReportPrivateSetter");
return optionsPanel;
}
@Override
public InspectionGadgetsFix buildFix(Object... infos) {
return new InlineCallFix(InspectionGadgetsBundle.message("call.to.simple.setter.in.class.inline.quickfix"));
}
}