#ref in enum ''{0}''
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NonFinalFieldInEnumInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NonFinalFieldInEnumInspection.java
new file mode 100644
index 000000000000..967ab5f5c944
--- /dev/null
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NonFinalFieldInEnumInspection.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2000-2012 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.classlayout;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiField;
+import com.intellij.psi.PsiModifier;
+import com.siyeh.InspectionGadgetsBundle;
+import com.siyeh.ig.BaseInspection;
+import com.siyeh.ig.BaseInspectionVisitor;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class NonFinalFieldInEnumInspection extends BaseInspection {
+
+ @Nls
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return InspectionGadgetsBundle.message("non.final.field.in.enum.display.name");
+ }
+
+ @NotNull
+ @Override
+ protected String buildErrorString(Object... infos) {
+ final PsiClass enumClass = (PsiClass)infos[0];
+ return InspectionGadgetsBundle.message("non.final.field.in.enum.problem.descriptor", enumClass.getName());
+ }
+
+ @Override
+ public BaseInspectionVisitor buildVisitor() {
+ return new NonFinalFieldInEnumVisitor();
+ }
+
+ private static class NonFinalFieldInEnumVisitor extends BaseInspectionVisitor {
+
+ @Override
+ public void visitField(PsiField field) {
+ super.visitField(field);
+ final PsiClass containingClass = field.getContainingClass();
+ if (containingClass == null || !containingClass.isEnum()) {
+ return;
+ }
+ if (field.hasModifierProperty(PsiModifier.FINAL)) {
+ return;
+ }
+ registerFieldError(field, containingClass);
+ }
+ }
+}
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java
index b7239520d5ec..107b3ec5749c 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java
@@ -170,18 +170,34 @@ public class ClassUtils {
@Nullable
public static PsiClass getContainingStaticClass(PsiElement element) {
- PsiClass aClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
- if (aClass == null) {
- return null;
- }
- PsiClass containingClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class);
- while (containingClass != null && !containingClass.hasModifierProperty(PsiModifier.STATIC) && !containingClass.isInterface()) {
- aClass = containingClass;
- containingClass = aClass.getContainingClass();
+ PsiClass aClass = PsiTreeUtil.getParentOfType(element, PsiClass.class, false, PsiFile.class);
+ while (isNonStaticClass(aClass)) {
+ aClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true, PsiFile.class);
}
return aClass;
}
+ public static boolean isNonStaticClass(@Nullable PsiClass aClass) {
+ if (aClass == null) {
+ return false;
+ }
+ if (aClass.hasModifierProperty(PsiModifier.STATIC) || aClass.isInterface() || aClass.isEnum()) {
+ return false;
+ }
+ if (aClass instanceof PsiAnonymousClass) {
+ return true;
+ }
+ final PsiElement parent = aClass.getParent();
+ if (parent == null || parent instanceof PsiFile) {
+ return false;
+ }
+ if (!(parent instanceof PsiClass)) {
+ return true;
+ }
+ final PsiClass parentClass = (PsiClass)parent;
+ return !parentClass.isInterface();
+ }
+
public static boolean isClassVisibleFromClass(PsiClass baseClass,
PsiClass referencedClass) {
if (referencedClass.hasModifierProperty(PsiModifier.PUBLIC)) {
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/NonFinalFieldInEnum.html b/plugins/InspectionGadgets/src/inspectionDescriptions/NonFinalFieldInEnum.html
new file mode 100644
index 000000000000..b8d4d271100f
--- /dev/null
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/NonFinalFieldInEnum.html
@@ -0,0 +1,7 @@
+
+
+This inspection reports non-final fields in enumeration types. A non-final field in an enum is rarely needed.
+
+New in 12, Powered by InspectionGadgets
+
+
\ No newline at end of file
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsTest.java
deleted file mode 100644
index 7871b33e31e2..000000000000
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2000-2009 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 org.jetbrains.idea.maven.execution;
-
-import com.intellij.openapi.command.WriteCommandAction;
-import org.jetbrains.idea.maven.MavenImportingTestCase;
-import com.intellij.openapi.projectRoots.ProjectJdkTable;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.application.ApplicationManager;
-
-public class MavenRunnerSettingsTest extends MavenImportingTestCase {
- private Sdk[] myOldJdks;
-
- @Override
- protected void setUpInWriteAction() throws Exception {
- super.setUpInWriteAction();
- myOldJdks = ProjectJdkTable.getInstance().getAllJdks();
- for (Sdk each : myOldJdks) {
- ProjectJdkTable.getInstance().removeJdk(each);
- }
- }
-
- @Override
- protected void tearDown() throws Exception {
- ApplicationManager.getApplication().runWriteAction(new Runnable() {
- @Override
- public void run() {
- for (Sdk each : myOldJdks) {
- ProjectJdkTable.getInstance().addJdk(each);
- }
- }
- });
- super.tearDown();
- }
-
- public void testUsingLatestAvailableJdk() throws Exception {
- new WriteCommandAction.Simple(myProject) {
- @Override
- protected void run() throws Throwable {
- Sdk jdk3 = createJdk("Java 1.3");
- Sdk jdk4 = createJdk("Java 1.4");
- Sdk jdk5 = createJdk("Java 1.5");
- ProjectJdkTable.getInstance().addJdk(jdk3);
- ProjectJdkTable.getInstance().addJdk(jdk5);
- ProjectJdkTable.getInstance().addJdk(jdk4);
-
- try {
- MavenRunnerSettings settings = new MavenRunnerSettings();
- assertEquals("Java 1.5", settings.getJreName());
- }
- finally {
- ProjectJdkTable.getInstance().removeJdk(jdk3);
- ProjectJdkTable.getInstance().removeJdk(jdk4);
- ProjectJdkTable.getInstance().removeJdk(jdk5);
- }
- }
- }.execute().throwException();
- }
-
- public void testUsingInternalJdkIfNoOtherIsDefined() throws Exception {
- MavenRunnerSettings settings = new MavenRunnerSettings();
- assertEquals(MavenRunnerSettings.USE_INTERNAL_JAVA, settings.getJreName());
- }
-}
diff --git a/plugins/tasks/tasks-core/src/META-INF/plugin.xml b/plugins/tasks/tasks-core/src/META-INF/plugin.xml
index 5fdb35cd09cb..48e19c22d032 100644
--- a/plugins/tasks/tasks-core/src/META-INF/plugin.xml
+++ b/plugins/tasks/tasks-core/src/META-INF/plugin.xml
@@ -33,7 +33,7 @@