summaryrefslogtreecommitdiff
path: root/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java')
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java102
1 files changed, 81 insertions, 21 deletions
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java
index e4e91685878b..fca66288aaef 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/CStyleArrayDeclarationInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 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,20 +16,24 @@
package com.siyeh.ig.style;
import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiType;
-import com.intellij.psi.PsiTypeElement;
-import com.intellij.psi.PsiVariable;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.psi.*;
+import com.intellij.psi.codeStyle.CodeStyleManager;
+import com.intellij.psi.tree.IElementType;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
public class CStyleArrayDeclarationInspection extends BaseInspection {
+ public boolean ignoreVariables = false;
+
@Override
@NotNull
public String getDisplayName() {
@@ -40,8 +44,18 @@ public class CStyleArrayDeclarationInspection extends BaseInspection {
@Override
@NotNull
protected String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "c.style.array.declaration.problem.descriptor");
+ final Object info = infos[0];
+ if (info instanceof PsiMethod) {
+ return InspectionGadgetsBundle.message("cstyle.array.method.declaration.problem.descriptor");
+ }
+ final int choice = info instanceof PsiField ? 1 : info instanceof PsiParameter ? 2 : 3;
+ return InspectionGadgetsBundle.message("cstyle.array.variable.declaration.problem.descriptor", Integer.valueOf(choice));
+ }
+
+ @Nullable
+ @Override
+ public JComponent createOptionsPanel() {
+ return new SingleCheckboxOptionsPanel("Ignore C-style declarations in variables", this, "ignoreVariables");
}
@Override
@@ -65,12 +79,38 @@ public class CStyleArrayDeclarationInspection extends BaseInspection {
}
@Override
- public void doFix(Project project, ProblemDescriptor descriptor)
- throws IncorrectOperationException {
- final PsiElement nameElement = descriptor.getPsiElement();
- final PsiVariable var = (PsiVariable)nameElement.getParent();
- assert var != null;
- var.normalizeDeclaration();
+ public void doFix(Project project, ProblemDescriptor descriptor) {
+ final PsiElement element = descriptor.getPsiElement().getParent();
+ if (element instanceof PsiVariable) {
+ final PsiVariable variable = (PsiVariable)element;
+ variable.normalizeDeclaration();
+ CodeStyleManager.getInstance(project).reformat(variable);
+ }
+ else if (element instanceof PsiMethod) {
+ final PsiMethod method = (PsiMethod)element;
+ final PsiTypeElement returnTypeElement = method.getReturnTypeElement();
+ if (returnTypeElement == null) {
+ return;
+ }
+ final PsiType returnType = method.getReturnType();
+ if (returnType == null) {
+ return;
+ }
+ PsiElement child = method.getParameterList();
+ while (!(child instanceof PsiCodeBlock)) {
+ final PsiElement element1 = child;
+ child = child.getNextSibling();
+ if (element1 instanceof PsiJavaToken) {
+ final PsiJavaToken token = (PsiJavaToken)element1;
+ final IElementType tokenType = token.getTokenType();
+ if (JavaTokenType.LBRACKET.equals(tokenType) || JavaTokenType.RBRACKET.equals(tokenType)) {
+ token.delete();
+ }
+ }
+ }
+ final PsiTypeElement typeElement = JavaPsiFacade.getElementFactory(project).createTypeElement(returnType);
+ returnTypeElement.replace(typeElement);
+ }
}
}
@@ -79,17 +119,19 @@ public class CStyleArrayDeclarationInspection extends BaseInspection {
return new CStyleArrayDeclarationVisitor();
}
- private static class CStyleArrayDeclarationVisitor
- extends BaseInspectionVisitor {
+ private class CStyleArrayDeclarationVisitor extends BaseInspectionVisitor {
@Override
- public void visitVariable(@NotNull PsiVariable var) {
- super.visitVariable(var);
- final PsiType declaredType = var.getType();
+ public void visitVariable(@NotNull PsiVariable variable) {
+ super.visitVariable(variable);
+ if (ignoreVariables) {
+ return;
+ }
+ final PsiType declaredType = variable.getType();
if (declaredType.getArrayDimensions() == 0) {
return;
}
- final PsiTypeElement typeElement = var.getTypeElement();
+ final PsiTypeElement typeElement = variable.getTypeElement();
if (typeElement == null) {
return; // Could be true for enum constants.
}
@@ -97,7 +139,25 @@ public class CStyleArrayDeclarationInspection extends BaseInspection {
if (elementType.equals(declaredType)) {
return;
}
- registerVariableError(var);
+ registerVariableError(variable, variable);
+ }
+
+ @Override
+ public void visitMethod(PsiMethod method) {
+ super.visitMethod(method);
+ final PsiType returnType = method.getReturnType();
+ if (returnType == null || returnType.getArrayDimensions() == 0) {
+ return;
+ }
+ final PsiTypeElement typeElement = method.getReturnTypeElement();
+ if (typeElement == null) {
+ return;
+ }
+ final PsiType type = typeElement.getType();
+ if (type.equals(returnType)) {
+ return;
+ }
+ registerMethodError(method, method);
}
}
} \ No newline at end of file