From 63a059b8b53b6c604ab3ff1538b9f8675f677887 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 16 Feb 2011 17:08:14 +0100 Subject: [PATCH 1/2] IDEA-65290 (Add configuration option to inspection "Serializable class without 'readObject()' and 'writeObject()'" to ignore anonymous inner classes.) IDEA-65287 (Add configuration option to inspection "Serializable class without 'serialVersionUID' to ignore anonymous inner classes.) --- .../siyeh/InspectionGadgetsBundle.properties | 6 +- ...bleFieldInSerializableClassInspection.java | 13 +++- .../siyeh/ig/serialization/Serializable.form | 47 ------------- ...bleHasSerialVersionUIDFieldInspection.java | 8 ++- ...ableHasSerializationMethodsInspection.java | 8 +++ ...rClassHasSerialVersionUIDFieldVisitor.java | 12 +++- ...sWithNonSerializableOuterClassVisitor.java | 9 ++- .../serialization/SerializableInspection.java | 69 ++++++++++++------- 8 files changed, 90 insertions(+), 82 deletions(-) delete mode 100644 plugins/InspectionGadgets/src/com/siyeh/ig/serialization/Serializable.form diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties index 5734a1f02ef7..0a9522cf8c9c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties @@ -268,7 +268,7 @@ instance.variable.may.not.be.initialized.display.name=Instance field may not be instance.variable.may.not.be.initialized.problem.descriptor=Instance field #ref may not be initialized during object construction #loc instance.Variable.may.not.be.initialized.problem.descriptor.junit=Instance field #ref may not be initialized during object construction or 'setUp()' call #loc primitive.fields.ignore.option=Ignore primitive fields -instance.variable.used.before.initialized.display.name=Instance field used before initialized +instance.variable.used.before.initialized.display.name=Instance field used before initialization instance.variable.used.before.initialized.problem.descriptor=Instance field #ref used before initialized #loc non.final.static.variable.initialization.display.name=Non-final static field is used during class initialization non.final.static.variable.initialization.problem.descriptor=Non-final static field #ref used during class initialization #loc @@ -1841,4 +1841,6 @@ package.dot.html.may.be.package.info.problem.descriptor=package.html -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java index 2bec2c00829f..0d1a8ebd457a 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers + * 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. @@ -22,11 +22,13 @@ import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.fixes.AddSerialVersionUIDFix; import com.siyeh.ig.psiutils.SerializationUtils; +import org.intellij.lang.annotations.Pattern; import org.jetbrains.annotations.NotNull; public class SerializableHasSerialVersionUIDFieldInspection extends SerializableInspection { + @Pattern("[a-zA-Z_0-9.-]+") @Override @NotNull public String getID() { @@ -70,6 +72,10 @@ public class SerializableHasSerialVersionUIDFieldInspection aClass instanceof PsiEnumConstantInitializer) { return; } + if (ignoreAnonymousInnerClasses && + aClass instanceof PsiAnonymousClass) { + return; + } final PsiField serialVersionUIDField = aClass.findFieldByName( HardcodedMethodConstants.SERIAL_VERSION_UID, false); if (serialVersionUIDField != null) { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerializationMethodsInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerializationMethodsInspection.java index fd39f8b830ba..fa3ed0d17fc9 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerializationMethodsInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerializationMethodsInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.serialization; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiEnumConstantInitializer; import com.intellij.psi.PsiTypeParameter; @@ -26,12 +27,14 @@ import org.jetbrains.annotations.NotNull; public class SerializableHasSerializationMethodsInspection extends SerializableInspection { + @Override @NotNull public String getDisplayName() { return InspectionGadgetsBundle.message( "serializable.has.serialization.methods.display.name"); } + @Override @NotNull public String buildErrorString(Object... infos) { final boolean hasReadObject = ((Boolean)infos[0]).booleanValue(); @@ -48,6 +51,7 @@ public class SerializableHasSerializationMethodsInspection } } + @Override public BaseInspectionVisitor buildVisitor() { return new SerializableHasSerializationMethodsVisitor(); } @@ -65,6 +69,10 @@ public class SerializableHasSerializationMethodsInspection aClass instanceof PsiEnumConstantInitializer) { return; } + if (ignoreAnonymousInnerClasses && + aClass instanceof PsiAnonymousClass) { + return; + } if (!SerializationUtils.isSerializable(aClass)) { return; } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java index d1e758bafc86..a7d26d7aa874 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * 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. @@ -15,6 +15,7 @@ */ package com.siyeh.ig.serialization; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifier; @@ -28,7 +29,8 @@ class SerializableInnerClassHasSerialVersionUIDFieldVisitor private final SerializableInspection inspection; - public SerializableInnerClassHasSerialVersionUIDFieldVisitor(SerializableInspection inspection) { + public SerializableInnerClassHasSerialVersionUIDFieldVisitor( + SerializableInspection inspection) { this.inspection = inspection; } @@ -38,6 +40,10 @@ class SerializableInnerClassHasSerialVersionUIDFieldVisitor aClass.isEnum()) { return; } + if (inspection.ignoreAnonymousInnerClasses && + aClass instanceof PsiAnonymousClass) { + return; + } if (hasSerialVersionUIDField(aClass)) { return; } @@ -57,7 +63,7 @@ class SerializableInnerClassHasSerialVersionUIDFieldVisitor registerClassError(aClass); } - private boolean hasSerialVersionUIDField(PsiClass aClass) { + private static boolean hasSerialVersionUIDField(PsiClass aClass) { final PsiField[] fields = aClass.getFields(); boolean hasSerialVersionUID = false; for (PsiField field : fields) { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java index c404b45afb58..b9accba4ab2e 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.serialization; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiModifier; import com.siyeh.ig.BaseInspectionVisitor; @@ -24,10 +25,10 @@ import org.jetbrains.annotations.NotNull; class SerializableInnerClassWithNonSerializableOuterClassVisitor extends BaseInspectionVisitor { - private final SerializableInnerClassWithNonSerializableOuterClassInspection inspection; + private final SerializableInspection inspection; public SerializableInnerClassWithNonSerializableOuterClassVisitor( - SerializableInnerClassWithNonSerializableOuterClassInspection inspection) { + SerializableInspection inspection) { this.inspection = inspection; } @@ -36,6 +37,10 @@ class SerializableInnerClassWithNonSerializableOuterClassVisitor aClass.isEnum()) { return; } + if (inspection.ignoreAnonymousInnerClasses && + aClass instanceof PsiAnonymousClass) { + return; + } final PsiClass containingClass = aClass.getContainingClass(); if (containingClass == null) { return; diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInspection.java index dfecdac65843..cea1a5826af0 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableInspection.java @@ -19,22 +19,29 @@ import com.intellij.codeInspection.ui.AddAction; import com.intellij.codeInspection.ui.ListTable; import com.intellij.codeInspection.ui.ListWrappingTableModel; import com.intellij.codeInspection.ui.RemoveAction; +import com.intellij.openapi.actionSystem.ActionToolbar; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.PsiClass; import com.intellij.psi.util.InheritanceUtil; +import com.intellij.ui.ScrollPaneFactory; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.psiutils.SerializationUtils; +import com.siyeh.ig.ui.CheckBox; +import com.siyeh.ig.ui.UiUtils; import org.jdom.Element; import javax.swing.*; +import java.awt.*; import java.util.ArrayList; import java.util.List; public abstract class SerializableInspection extends BaseInspection { - /** @noinspection PublicField */ + @SuppressWarnings({"PublicField"}) + public boolean ignoreAnonymousInnerClasses = false; + @SuppressWarnings({"PublicField"}) public String superClassString = "java.awt.Component"; protected List superClassList = new ArrayList(); @@ -44,8 +51,41 @@ public abstract class SerializableInspection extends BaseInspection { @Override public JComponent createOptionsPanel() { - final Form form = new Form(); - return form.getContentPanel(); + final JComponent panel = new JPanel(new GridBagLayout()); + + final ListTable table = new ListTable(new ListWrappingTableModel( + superClassList, InspectionGadgetsBundle.message( + "ignore.classes.in.hierarchy.column.name"))); + final JScrollPane scrollPane = + ScrollPaneFactory.createScrollPane(table); + final ActionToolbar toolbar = + UiUtils.createAddRemoveTreeAnnotationChooserToolbar(table, + InspectionGadgetsBundle.message( + "choose.super.class.to.ignore")); + final CheckBox checkBox = new CheckBox(InspectionGadgetsBundle.message( + "ignore.anonymous.inner.classes"), this, + "ignoreAnonymousInnerClasses"); + + final GridBagConstraints constraints = new GridBagConstraints(); + constraints.gridx = 0; + constraints.gridy = 0; + constraints.insets.left = 4; + constraints.insets.right = 4; + constraints.fill = GridBagConstraints.HORIZONTAL; + panel.add(toolbar.getComponent(), constraints); + + constraints.gridy = 1; + constraints.weightx = 1.0; + constraints.weighty = 1.0; + constraints.fill = GridBagConstraints.BOTH; + panel.add(scrollPane, constraints); + + constraints.gridy = 2; + constraints.weighty = 0.0; + constraints.fill = GridBagConstraints.HORIZONTAL; + panel.add(checkBox, constraints); + + return panel; } @Override @@ -71,27 +111,4 @@ public abstract class SerializableInspection extends BaseInspection { } return false; } - - private class Form { - - private JPanel contentPanel; - private ListTable table; - private JButton addButton; - private JButton removeButton; - - Form() { - addButton.setAction(new AddAction(table)); - removeButton.setAction(new RemoveAction(table)); - } - - private void createUIComponents() { - table = new ListTable(new ListWrappingTableModel(superClassList, - InspectionGadgetsBundle.message( - "ignore.classes.in.hierarchy.column.name"))); - } - - public JPanel getContentPanel() { - return contentPanel; - } - } } \ No newline at end of file From d3a08b9513255906dca7d795d948125feb84ecb1 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Wed, 16 Feb 2011 19:50:31 +0300 Subject: [PATCH 2/2] heavyweight editor hints look fix --- .../com/intellij/codeInsight/lookup/impl/LookupImpl.java | 2 -- .../src/com/intellij/codeInsight/hint/HintManagerImpl.java | 2 +- .../platform-impl/src/com/intellij/ui/LightweightHint.java | 6 +++--- platform/platform-resources-en/src/misc/registry.properties | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 68e544cc82f8..9e8ae7915aec 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -1158,8 +1158,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { panel.remove(0); panel.add(hintComponent); } - //todo[kirillk] comment the following line - HintManagerImpl.adjustEditorHintPosition(myAutopopupHint, editor, bestPoint); } } diff --git a/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java b/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java index e8abfbfcd70b..c9291dc10394 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/codeInsight/hint/HintManagerImpl.java @@ -369,7 +369,7 @@ public class HintManagerImpl extends HintManager implements Disposable { p = rectangle.getLocation(); SwingUtilities.convertPointFromScreen(p, layeredPane); } - else if ((layeredPane.getWidth() < p.x + size.width) && !hintInfo.isAwtTooltip()) { + else if ((layeredPane.getWidth() < p.x + size.width) && !hintInfo.isAwtTooltip() && !hint.isRealPopup()) { p.x = Math.max(0, layeredPane.getWidth() - size.width); } diff --git a/platform/platform-impl/src/com/intellij/ui/LightweightHint.java b/platform/platform-impl/src/com/intellij/ui/LightweightHint.java index 8743c13f8324..a95522649c04 100644 --- a/platform/platform-impl/src/com/intellij/ui/LightweightHint.java +++ b/platform/platform-impl/src/com/intellij/ui/LightweightHint.java @@ -185,11 +185,11 @@ public class LightweightHint extends UserDataHolderBase implements Hint { .setMovable(myTitle != null) .setTitle(myTitle) .setModalContext(false) - .setShowShadow(!myForceLightweightPopup && myForceShowAsPopup) + .setShowShadow(isRealPopup()) .setCancelKeyEnabled(false) .setCancelOnClickOutside(myCancelOnClickOutside) .setCancelOnOtherWindowOpen(myCancelOnOtherWindowOpen) - .setForceHeavyweight(!myForceLightweightPopup && myForceShowAsPopup) + .setForceHeavyweight(!myForceLightweightPopup && isRealPopup()) .createPopup(); beforeShow(); @@ -241,7 +241,7 @@ public class LightweightHint extends UserDataHolderBase implements Hint { } public final boolean isRealPopup() { - return myIsRealPopup; + return myIsRealPopup | myForceShowAsPopup; } public void hide() { diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 7e58a12cb257..314156f91f45 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -35,7 +35,7 @@ ide.debugMode=false ide.debugMode.description=Record additonal information to make bug reports more informative ide.forcedShowTooltip=alt ide.forcedShowTooltip.description=Shortcut for forced show tooltip -ide.popup.dropShadow=false +ide.popup.dropShadow=true ide.consumeKnownToolkitBugs=true ide.appIcon.progress=true