diff --git a/.idea/runConfigurations/Generate_icon_classes__ex_icons_gant_.xml b/.idea/runConfigurations/Generate_icon_classes__ex_icons_gant_.xml new file mode 100644 index 000000000000..2448d1d44be0 --- /dev/null +++ b/.idea/runConfigurations/Generate_icon_classes__ex_icons_gant_.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Optimize_images_for_tips_tricks.xml b/.idea/runConfigurations/Optimize_images_for_tips_tricks.xml new file mode 100644 index 000000000000..a0e7db6f4f19 --- /dev/null +++ b/.idea/runConfigurations/Optimize_images_for_tips_tricks.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/RegExpSupport/gen/icons/RegExpSupportIcons.java b/RegExpSupport/gen/icons/RegExpSupportIcons.java index f279180e3d5e..e3b02ce7b614 100644 --- a/RegExpSupport/gen/icons/RegExpSupportIcons.java +++ b/RegExpSupport/gen/icons/RegExpSupportIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class RegExpSupportIcons { private static Icon load(String path) { diff --git a/RegExpSupport/src/inspectionDescriptions/EmptyAlternationBranch.html b/RegExpSupport/src/inspectionDescriptions/EmptyAlternationBranch.html index ce8d8852ed5a..568497f65d5e 100644 --- a/RegExpSupport/src/inspectionDescriptions/EmptyAlternationBranch.html +++ b/RegExpSupport/src/inspectionDescriptions/EmptyAlternationBranch.html @@ -1,6 +1,8 @@ -Reports empty branches in a RegExp alternation. For example:
a| +Reports empty branches in a RegExp alternation. For example:
a||b +

An empty branch will only match the empty string, and in most cases that is not what is desired. +This inspection will not report a single empty branch at the start or the end of an alternation.

New in 2017.2 diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java index eee2dfab3c41..02773b4acc5f 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java @@ -57,29 +57,28 @@ public class EmptyAlternationBranchInspection extends LocalInspectionTool { if (branches.length < 2) { return; } - boolean nonEmptyBranchSeen = false; - for (final RegExpBranch branch : branches) { - if (branch.getAtoms().length != 0) { - nonEmptyBranchSeen = true; + boolean emptyBranchSeen = false; + for (int i = 0; i < branches.length; i++) { + final RegExpBranch branch = branches[i]; + if (branch.getAtoms().length > 0) { continue; } - final DuplicateAlternationBranchFix fix = new DuplicateAlternationBranchFix(nonEmptyBranchSeen); - final PsiElement element = nonEmptyBranchSeen ? branch.getPrevSibling() : branch.getNextSibling(); - if (element != null) { - myHolder.registerProblem(element, "Empty branch in alternation", fix); + if (i == 0) { + // empty branch at beginning allowed + emptyBranchSeen = true; + continue; } + if (!emptyBranchSeen && i == branches.length - 1) { + // empty branch at end allowed, if no empty branch at beginning + continue; + } + myHolder.registerProblem(branch.getPrevSibling(), "Empty branch in alternation", new DuplicateAlternationBranchFix()); } } } private static class DuplicateAlternationBranchFix implements LocalQuickFix { - private final boolean myDeleteNext; - - public DuplicateAlternationBranchFix(boolean deleteNext) { - myDeleteNext = deleteNext; - } - @Nls @NotNull @Override @@ -90,12 +89,7 @@ public class EmptyAlternationBranchInspection extends LocalInspectionTool { @Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement element = descriptor.getPsiElement(); - if (myDeleteNext) { - element.getNextSibling().delete(); - } - else { - element.getPrevSibling().delete(); - } + element.getNextSibling().delete(); element.delete(); } } diff --git a/RegExpSupport/test/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspectionTest.java b/RegExpSupport/test/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspectionTest.java index 1eb93ca7c92f..33709b3dec41 100644 --- a/RegExpSupport/test/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspectionTest.java +++ b/RegExpSupport/test/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspectionTest.java @@ -28,11 +28,23 @@ public class EmptyAlternationBranchInspectionTest extends RegExpInspectionTestCa } public void testEmptyLeft() { - quickfixTest("|right", "right", "Remove empty branch"); + highlightTest("|right"); } public void testEmptyRight() { - quickfixTest("left|", "left", "Remove empty branch"); + highlightTest("left|"); + } + + public void testEmptyLeftAndRight() { + quickfixTest("|m|", "|m", "Remove empty branch"); + } + + public void testEmptyMiddle() { + quickfixTest("a||b", "a|b", "Remove empty branch"); + } + + public void testLogbackUnit() { + highlightTest("(|kb|mb|gb)s?"); } @NotNull diff --git a/images/src/icons/ImagesIcons.java b/images/src/icons/ImagesIcons.java index 68a099029a90..179b45f9a5e5 100644 --- a/images/src/icons/ImagesIcons.java +++ b/images/src/icons/ImagesIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class ImagesIcons { private static Icon load(String path) { diff --git a/java/openapi/src/icons/OpenapiIcons.java b/java/openapi/src/icons/OpenapiIcons.java index eb9eb75de85a..148413d3eea0 100644 --- a/java/openapi/src/icons/OpenapiIcons.java +++ b/java/openapi/src/icons/OpenapiIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class OpenapiIcons { private static Icon load(String path) { diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/IconsClassGenerator.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/IconsClassGenerator.kt index 221f8e84b14f..bfae5657e9b0 100644 --- a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/IconsClassGenerator.kt +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/IconsClassGenerator.kt @@ -125,7 +125,7 @@ class IconsClassGenerator(val projectHome: File, val util: JpsModule) { // please do corresponding changes in IconsGeneratedSourcesFilter as well append(answer, "/**", 0) append(answer, " * NOTE THIS FILE IS AUTO-GENERATED", 0) - append(answer, " * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead", 0) + append(answer, " * DO NOT EDIT IT BY HAND, run \"Generate icon classes\" configuration instead", 0) append(answer, " */", 0) append(answer, "public class $className {", 0) diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/generateIconClasses.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/generateIconClasses.kt new file mode 100644 index 000000000000..cf3345be3edb --- /dev/null +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/generateIconClasses.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2000-2017 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.intellij.build.images + +import com.intellij.openapi.application.PathManager +import org.jetbrains.jps.model.serialization.JpsSerializationManager +import java.io.File + +fun main(args: Array) { + val homePath = PathManager.getHomePath() + val home = File(homePath) + val project = JpsSerializationManager.getInstance().loadModel(homePath, null).project + + val util = project.modules.find { it.name == "util" } ?: throw IllegalStateException("Can't load module 'util'") + + val generator = IconsClassGenerator(home, util) + project.modules.forEach { module -> + generator.processModule(module) + } + generator.printStats() + + val optimizer = ImageSizeOptimizer(home) + project.modules.forEach { module -> + optimizer.optimizeIcons(module) + } + optimizer.printStats() + + val checker = ImageSanityChecker(home) + project.modules.forEach { module -> + checker.check(module) + } +// checker.printInfo() + checker.printWarnings() + + println() + println("Done") +} \ No newline at end of file diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/optimizeTipsImages.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/optimizeTipsImages.kt new file mode 100644 index 000000000000..be1a1a7305b4 --- /dev/null +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/optimizeTipsImages.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2017 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.intellij.build.images + +import com.intellij.openapi.application.PathManager +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes +import org.jetbrains.jps.model.serialization.JpsSerializationManager +import java.io.File + +fun main(args: Array) { + val homePath = PathManager.getHomePath() + val home = File(homePath) + val project = JpsSerializationManager.getInstance().loadModel(homePath, null).project + + val optimizer = ImageSizeOptimizer(home) + project.modules.forEach { module -> + module.sourceRoots.forEach { root -> + val imagesDir = File(root.file, "tips/images") + if (JavaModuleSourceRootTypes.PRODUCTION.contains(root.rootType) && imagesDir.isDirectory) { + val images = optimizer.optimizeImages(imagesDir) + println("Processed root ${root.file} with $images images") + } + } + } + optimizer.printStats() + + println() + println("Done") +} \ No newline at end of file diff --git a/platform/dvcs-impl/src/icons/DvcsImplIcons.java b/platform/dvcs-impl/src/icons/DvcsImplIcons.java index 63b4e6cb3d5b..c98ca83bbbda 100644 --- a/platform/dvcs-impl/src/icons/DvcsImplIcons.java +++ b/platform/dvcs-impl/src/icons/DvcsImplIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class DvcsImplIcons { private static Icon load(String path) { diff --git a/platform/external-system-impl/src/icons/ExternalSystemIcons.java b/platform/external-system-impl/src/icons/ExternalSystemIcons.java index 38dd0388ff2b..2a6604d062ea 100644 --- a/platform/external-system-impl/src/icons/ExternalSystemIcons.java +++ b/platform/external-system-impl/src/icons/ExternalSystemIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class ExternalSystemIcons { private static Icon load(String path) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java index 2a5317ef6d70..02b66a5afdf4 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java @@ -28,8 +28,6 @@ import com.intellij.ide.ui.laf.darcula.DarculaLookAndFeelInfo; import com.intellij.openapi.Disposable; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.JBPopupMenu; import com.intellij.openapi.ui.Messages; @@ -39,11 +37,8 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.ui.JBColor; import com.intellij.ui.ScreenUtil; -import com.intellij.ui.content.Content; import com.intellij.ui.mac.MacPopupMenuUI; import com.intellij.ui.popup.OurHeavyWeightPopup; import com.intellij.util.IJSwingUtilities; @@ -476,8 +471,6 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC fixSeparatorColor(uiDefaults); - updateToolWindows(); - for (Frame frame : Frame.getFrames()) { // OSX/Aqua fix: Some image caching components like ToolWindowHeader use // com.apple.laf.AquaNativeResources$CColorPaintUIResource @@ -533,25 +526,6 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC defaults.put("hidpi.scaleFactor", JBUI.scale(1f)); } - public static void updateToolWindows() { - for (Project project : ProjectManager.getInstance().getOpenProjects()) { - final ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project); - for (String id : toolWindowManager.getToolWindowIds()) { - final ToolWindow toolWindow = toolWindowManager.getToolWindow(id); - for (Content content : toolWindow.getContentManager().getContents()) { - final JComponent component = content.getComponent(); - if (component != null) { - IJSwingUtilities.updateComponentTreeUI(component); - } - } - final JComponent c = toolWindow.getComponent(); - if (c != null) { - IJSwingUtilities.updateComponentTreeUI(c); - } - } - } - } - private static void fixMenuIssues(UIDefaults uiDefaults) { if (UIUtil.isUnderAquaLookAndFeel() || (SystemInfo.isMac && UIUtil.isUnderIntelliJLaF())) { // update ui for popup menu to get round corners diff --git a/platform/platform-impl/src/com/intellij/internal/inspector/UiInspectorAction.java b/platform/platform-impl/src/com/intellij/internal/inspector/UiInspectorAction.java index 8a8f833f3fd1..d22546ea5cc2 100644 --- a/platform/platform-impl/src/com/intellij/internal/inspector/UiInspectorAction.java +++ b/platform/platform-impl/src/com/intellij/internal/inspector/UiInspectorAction.java @@ -59,7 +59,10 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.UIResource; import javax.swing.table.*; -import javax.swing.tree.*; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.*; import java.lang.reflect.Field; @@ -1322,17 +1325,15 @@ public class UiInspectorAction extends ToggleAction implements DumbAware { JTree tree = (JTree)component; TreePath path = tree.getClosestPathForLocation(me.getX(), me.getY()); if (path != null) { - TreeNode value = ((TreeNode)path.getLastPathComponent()); - if (value instanceof DefaultMutableTreeNode) { - DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; - - Component rendererComponent = tree.getCellRenderer() - .getTreeCellRendererComponent(tree, node, tree.getSelectionModel().isPathSelected(path), - tree.isExpanded(path), node.isLeaf(), tree.getRowForPath(path), tree.hasFocus()); - clickInfo.add(new PropertyBean(RENDERER_BOUNDS, tree.getPathBounds(path))); - clickInfo.addAll(new InspectorTableModel(rendererComponent).myProperties); - return clickInfo; - } + Object object = path.getLastPathComponent(); + Component rendererComponent = tree.getCellRenderer().getTreeCellRendererComponent( + tree, object, tree.getSelectionModel().isPathSelected(path), + tree.isExpanded(path), + tree.getModel().isLeaf(object), + tree.getRowForPath(path), tree.hasFocus()); + clickInfo.add(new PropertyBean(RENDERER_BOUNDS, tree.getPathBounds(path))); + clickInfo.addAll(new InspectorTableModel(rendererComponent).myProperties); + return clickInfo; } } return null; diff --git a/platform/platform-impl/src/icons/PlatformImplIcons.java b/platform/platform-impl/src/icons/PlatformImplIcons.java index 87dd75428d01..90c0aeaf600c 100644 --- a/platform/platform-impl/src/icons/PlatformImplIcons.java +++ b/platform/platform-impl/src/icons/PlatformImplIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class PlatformImplIcons { private static Icon load(String path) { diff --git a/platform/remote-servers/impl/src/icons/RemoteServersIcons.java b/platform/remote-servers/impl/src/icons/RemoteServersIcons.java index f6771e969f28..69ee0f28e83c 100644 --- a/platform/remote-servers/impl/src/icons/RemoteServersIcons.java +++ b/platform/remote-servers/impl/src/icons/RemoteServersIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class RemoteServersIcons { private static Icon load(String path) { diff --git a/platform/tasks-platform-impl/src/icons/TasksIcons.java b/platform/tasks-platform-impl/src/icons/TasksIcons.java index e41f14b0b2ac..b1d34bf2bec7 100644 --- a/platform/tasks-platform-impl/src/icons/TasksIcons.java +++ b/platform/tasks-platform-impl/src/icons/TasksIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class TasksIcons { private static Icon load(String path) { diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 046115c1c497..bbfca2751db6 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -907,6 +907,9 @@ cidr.show.compiler.info=false cidr.show.clangtidy.info=false cidr.cygwin.cmakePermissionsFix=true cidr.cygwin.cmakePermissionsFix.description=Update permissions for the bin/ folder inside the installed IDE so that the bundled CMake could run +cidr.indexer.thread.count=0 +cidr.indexer.thread.count.description=Number of CPU cores which will be used to build symbols. Zero and negative values determine \ + how many cores should NOT be involved, e.g. "0" equals to "use every available CPU core", "-1" means "use every core but one". cidr.max.intellisense.file.length=500000 cidr.max.intellisense.file.length.description=Maximum length of C-based language file (in characters) IDE should provide code assistance for. cidr.cmake.cacheResetFix=true diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 8e6f48012167..bbfaf69771d8 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class AllIcons { diff --git a/platform/vcs-log/impl/gen/icons/VcsLogIcons.java b/platform/vcs-log/impl/gen/icons/VcsLogIcons.java index 5dd12556640f..a6ea1ba49013 100644 --- a/platform/vcs-log/impl/gen/icons/VcsLogIcons.java +++ b/platform/vcs-log/impl/gen/icons/VcsLogIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class VcsLogIcons { private static Icon load(String path) { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index 7cdbcc9fd110..7b3abe371173 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -2018,8 +2018,8 @@ missing.package.info.problem.descriptor=Package ''{0}'' is missing a packa missing.package.html.problem.descriptor=Package ''{0}'' is missing a package.html file package.info.java.without.package.display.name='package-info.java' without 'package' statement package.info.without.package.problem.descriptor='package-info.java' does not have a 'package' statement -package.info.without.package.quickfix=add ''package {0};'' -package.info.without.package.family.quickfix=add package statement +package.info.without.package.quickfix=Add ''package {0};'' +package.info.without.package.family.quickfix=Add package statement auto.closeable.resource.display.name=AutoCloseable used without 'try'-with-resources auto.closeable.resource.problem.descriptor=''{0}'' used without ''try''-with-resources statement #loc auto.closeable.resource.quickfix=Ignore 'AutoCloseable' returned by this method diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/PackageInfoWithoutPackageInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/PackageInfoWithoutPackageInspection.java index b0a36b3a6b4d..2d4d46a62354 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/PackageInfoWithoutPackageInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/PackageInfoWithoutPackageInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -77,9 +77,13 @@ public class PackageInfoWithoutPackageInspection extends BaseInspection { return; } final PsiJavaFile file = (PsiJavaFile)element; - final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - final PsiPackageStatement packageStatement = factory.createPackageStatement(myPackageName); - file.add(packageStatement); + // can't use file.setPackageName(myPackageName) here because it will put the package in the wrong place and screw up formatting. + PsiElement anchor = file.getFirstChild(); + while (anchor instanceof PsiWhiteSpace || anchor instanceof PsiComment) { + anchor = anchor.getNextSibling(); + } + final PsiPackageStatement packageStatement = JavaPsiFacade.getElementFactory(project).createPackageStatement(myPackageName); + file.addBefore(packageStatement, anchor); } } @@ -100,9 +104,8 @@ public class PackageInfoWithoutPackageInspection extends BaseInspection { if (packageStatement != null) { return; } - final JavaDirectoryService directoryService = JavaDirectoryService.getInstance(); final PsiDirectory directory = file.getContainingDirectory(); - final PsiPackage aPackage = directoryService.getPackage(directory); + final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(directory); if (aPackage == null) { return; } diff --git a/plugins/ant/src/icons/AntIcons.java b/plugins/ant/src/icons/AntIcons.java index 601738c1ebd7..9018c3c99a01 100644 --- a/plugins/ant/src/icons/AntIcons.java +++ b/plugins/ant/src/icons/AntIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class AntIcons { private static Icon load(String path) { diff --git a/plugins/devkit/gen/icons/DevkitIcons.java b/plugins/devkit/gen/icons/DevkitIcons.java index 224887594efb..ef2b3c847bc2 100644 --- a/plugins/devkit/gen/icons/DevkitIcons.java +++ b/plugins/devkit/gen/icons/DevkitIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class DevkitIcons { private static Icon load(String path) { diff --git a/plugins/devkit/src/internal/IconsGeneratedSourcesFilter.java b/plugins/devkit/src/internal/IconsGeneratedSourcesFilter.java index 8b065b5b1b2c..cfed7ba88724 100644 --- a/plugins/devkit/src/internal/IconsGeneratedSourcesFilter.java +++ b/plugins/devkit/src/internal/IconsGeneratedSourcesFilter.java @@ -33,7 +33,10 @@ public class IconsGeneratedSourcesFilter extends GeneratedSourcesFilter { for (PsiClass aClass : ((PsiJavaFile)psiFile).getClasses()) { if (aClass.isValid() && aClass.hasModifierProperty(PsiModifier.PUBLIC)) { PsiDocComment comment = aClass.getDocComment(); - return comment != null && comment.getText().contains("run build/scripts/icons.gant instead"); + if (comment == null) return false; + String docText = comment.getText(); + return docText.contains("NOTE THIS FILE IS AUTO-GENERATED") && + docText.contains("DO NOT EDIT IT BY HAND"); } } } diff --git a/plugins/devkit/testSources/internal/IconsGeneratedSourcesTest.java b/plugins/devkit/testSources/internal/IconsGeneratedSourcesTest.java index 1118f872540f..b3bf2163438d 100644 --- a/plugins/devkit/testSources/internal/IconsGeneratedSourcesTest.java +++ b/plugins/devkit/testSources/internal/IconsGeneratedSourcesTest.java @@ -29,6 +29,16 @@ public class IconsGeneratedSourcesTest extends LightCodeInsightFixtureTestCase { assertTrue(new IconsGeneratedSourcesFilter().isGeneratedSource(file.getVirtualFile(), myFixture.getProject())); } + public void testNewGeneratedFile() { + PsiFile file = myFixture.configureByText("MyIcons.java", "package icons;\n" + + "/**\n" + + " * NOTE THIS FILE IS AUTO-GENERATED\n" + + " * DO NOT EDIT IT BY HAND, run \"Generate icon classes\" configuration instead\n" + + " */\n" + + "public class RubyIcons {}"); + assertTrue(new IconsGeneratedSourcesFilter().isGeneratedSource(file.getVirtualFile(), myFixture.getProject())); + } + public void testFilterByName() { PsiFile file = myFixture.configureByText("MyIconsTest.java", "package icons;\n" + "/**\n" + diff --git a/plugins/eclipse/gen/icons/EclipseIcons.java b/plugins/eclipse/gen/icons/EclipseIcons.java index 891304281e9e..5832d35be7c4 100644 --- a/plugins/eclipse/gen/icons/EclipseIcons.java +++ b/plugins/eclipse/gen/icons/EclipseIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class EclipseIcons { private static Icon load(String path) { diff --git a/plugins/editorconfig/src/icons/EditorconfigIcons.java b/plugins/editorconfig/src/icons/EditorconfigIcons.java index ff1eb313974c..ac0c6c28aa13 100644 --- a/plugins/editorconfig/src/icons/EditorconfigIcons.java +++ b/plugins/editorconfig/src/icons/EditorconfigIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class EditorconfigIcons { private static Icon load(String path) { diff --git a/plugins/git4idea/gen/icons/Git4ideaIcons.java b/plugins/git4idea/gen/icons/Git4ideaIcons.java index 86254bc316cf..fe0b0aab7184 100644 --- a/plugins/git4idea/gen/icons/Git4ideaIcons.java +++ b/plugins/git4idea/gen/icons/Git4ideaIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class Git4ideaIcons { private static Icon load(String path) { diff --git a/plugins/github/src/icons/GithubIcons.java b/plugins/github/src/icons/GithubIcons.java index db320d210ed2..6048db74d954 100644 --- a/plugins/github/src/icons/GithubIcons.java +++ b/plugins/github/src/icons/GithubIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class GithubIcons { private static Icon load(String path) { diff --git a/plugins/google-app-engine/gen/icons/GoogleAppEngineIcons.java b/plugins/google-app-engine/gen/icons/GoogleAppEngineIcons.java index c4721a6e166e..93335cbec6b4 100644 --- a/plugins/google-app-engine/gen/icons/GoogleAppEngineIcons.java +++ b/plugins/google-app-engine/gen/icons/GoogleAppEngineIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class GoogleAppEngineIcons { private static Icon load(String path) { diff --git a/plugins/gradle/src/icons/GradleIcons.java b/plugins/gradle/src/icons/GradleIcons.java index 19f20258d467..02ea3e52d47e 100644 --- a/plugins/gradle/src/icons/GradleIcons.java +++ b/plugins/gradle/src/icons/GradleIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class GradleIcons { private static Icon load(String path) { diff --git a/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java b/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java index cbb29a97011a..eb0fb68dc080 100644 --- a/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java +++ b/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class JetgroovyIcons { private static Icon load(String path) { diff --git a/plugins/maven/src/main/java/icons/MavenIcons.java b/plugins/maven/src/main/java/icons/MavenIcons.java index 2ec453969286..6fa5ececdd99 100644 --- a/plugins/maven/src/main/java/icons/MavenIcons.java +++ b/plugins/maven/src/main/java/icons/MavenIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class MavenIcons { private static Icon load(String path) { diff --git a/plugins/properties/properties-psi-api/gen/icons/PropertiesIcons.java b/plugins/properties/properties-psi-api/gen/icons/PropertiesIcons.java index b75bc8bb5695..67a39b7deb80 100644 --- a/plugins/properties/properties-psi-api/gen/icons/PropertiesIcons.java +++ b/plugins/properties/properties-psi-api/gen/icons/PropertiesIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class PropertiesIcons { private static Icon load(String path) { diff --git a/plugins/svn4idea/gen/icons/SvnIcons.java b/plugins/svn4idea/gen/icons/SvnIcons.java index 461b0465b2af..5d0393219456 100644 --- a/plugins/svn4idea/gen/icons/SvnIcons.java +++ b/plugins/svn4idea/gen/icons/SvnIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class SvnIcons { private static Icon load(String path) { diff --git a/plugins/tasks/tasks-core/src/icons/TasksCoreIcons.java b/plugins/tasks/tasks-core/src/icons/TasksCoreIcons.java index e74b495f8cd4..cb524c46803b 100644 --- a/plugins/tasks/tasks-core/src/icons/TasksCoreIcons.java +++ b/plugins/tasks/tasks-core/src/icons/TasksCoreIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class TasksCoreIcons { private static Icon load(String path) { diff --git a/plugins/terminal/src/icons/TerminalIcons.java b/plugins/terminal/src/icons/TerminalIcons.java index 72884f72e3c6..76fc07769ce7 100644 --- a/plugins/terminal/src/icons/TerminalIcons.java +++ b/plugins/terminal/src/icons/TerminalIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class TerminalIcons { private static Icon load(String path) { diff --git a/plugins/testng/src/icons/TestngIcons.java b/plugins/testng/src/icons/TestngIcons.java index 48ec5480204b..8fa9edfe8ff5 100644 --- a/plugins/testng/src/icons/TestngIcons.java +++ b/plugins/testng/src/icons/TestngIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class TestngIcons { private static Icon load(String path) { diff --git a/plugins/ui-designer-core/src/icons/UIDesignerNewIcons.java b/plugins/ui-designer-core/src/icons/UIDesignerNewIcons.java index c8316b9c811d..e0fa077ea96d 100644 --- a/plugins/ui-designer-core/src/icons/UIDesignerNewIcons.java +++ b/plugins/ui-designer-core/src/icons/UIDesignerNewIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class UIDesignerNewIcons { private static Icon load(String path) { diff --git a/plugins/ui-designer/src/icons/UIDesignerIcons.java b/plugins/ui-designer/src/icons/UIDesignerIcons.java index 4cf4314f10f7..53fca269157c 100644 --- a/plugins/ui-designer/src/icons/UIDesignerIcons.java +++ b/plugins/ui-designer/src/icons/UIDesignerIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class UIDesignerIcons { private static Icon load(String path) { diff --git a/plugins/xpath/xpath-lang/gen/icons/XpathIcons.java b/plugins/xpath/xpath-lang/gen/icons/XpathIcons.java index 665242778b6e..502aeb6707e5 100644 --- a/plugins/xpath/xpath-lang/gen/icons/XpathIcons.java +++ b/plugins/xpath/xpath-lang/gen/icons/XpathIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class XpathIcons { private static Icon load(String path) { diff --git a/plugins/xslt-debugger/src/icons/XsltDebuggerIcons.java b/plugins/xslt-debugger/src/icons/XsltDebuggerIcons.java index 5cadd01ce85a..066c0aa69541 100644 --- a/plugins/xslt-debugger/src/icons/XsltDebuggerIcons.java +++ b/plugins/xslt-debugger/src/icons/XsltDebuggerIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class XsltDebuggerIcons { private static Icon load(String path) { diff --git a/python/educational-core/src/icons/EducationalCoreIcons.java b/python/educational-core/src/icons/EducationalCoreIcons.java index 44359a05bf4d..aa3563e74c70 100644 --- a/python/educational-core/src/icons/EducationalCoreIcons.java +++ b/python/educational-core/src/icons/EducationalCoreIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class EducationalCoreIcons { private static Icon load(String path) { diff --git a/python/educational-python/gen/icons/PythonEducationalIcons.java b/python/educational-python/gen/icons/PythonEducationalIcons.java index 2b58edd5162a..251b72c67c6d 100644 --- a/python/educational-python/gen/icons/PythonEducationalIcons.java +++ b/python/educational-python/gen/icons/PythonEducationalIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class PythonEducationalIcons { private static Icon load(String path) { diff --git a/python/gen/icons/PythonIcons.java b/python/gen/icons/PythonIcons.java index 656b78bee289..96603fa94042 100644 --- a/python/gen/icons/PythonIcons.java +++ b/python/gen/icons/PythonIcons.java @@ -21,7 +21,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class PythonIcons { private static Icon load(String path) { diff --git a/python/psi-api/src/icons/PythonPsiApiIcons.java b/python/psi-api/src/icons/PythonPsiApiIcons.java index c00205b59f26..c92a1d08da2e 100644 --- a/python/psi-api/src/icons/PythonPsiApiIcons.java +++ b/python/psi-api/src/icons/PythonPsiApiIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class PythonPsiApiIcons { private static Icon load(String path) { diff --git a/python/rest/gen/icons/RestIcons.java b/python/rest/gen/icons/RestIcons.java index cca5b1100e54..a69a475accc0 100644 --- a/python/rest/gen/icons/RestIcons.java +++ b/python/rest/gen/icons/RestIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class RestIcons { private static Icon load(String path) { diff --git a/spellchecker/gen/icons/SpellcheckerIcons.java b/spellchecker/gen/icons/SpellcheckerIcons.java index ae57fb6c0fb5..40e56397aa3f 100644 --- a/spellchecker/gen/icons/SpellcheckerIcons.java +++ b/spellchecker/gen/icons/SpellcheckerIcons.java @@ -6,7 +6,7 @@ import javax.swing.*; /** * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead */ public class SpellcheckerIcons { private static Icon load(String path) {