diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfigurationMacroFilter.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfigurationMacroFilter.java new file mode 100644 index 000000000000..5ca3b9c75ea2 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfigurationMacroFilter.java @@ -0,0 +1,38 @@ +/* + * Copyright 2000-2013 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.intellij.compiler.impl.javaCompiler.javac; + +import com.intellij.openapi.application.PathMacroFilter; +import org.jdom.Attribute; +import org.jdom.Element; + +/** + * @author nik + */ +public class JavacConfigurationMacroFilter extends PathMacroFilter { + @Override + public boolean recursePathMacros(Attribute attribute) { + if (attribute.getName().equals("value")) { + Element parent = attribute.getParent(); + if (parent != null && "option".equals(parent.getName()) && "ADDITIONAL_OPTIONS_STRING".equals(parent.getAttributeValue("name"))) { + Element grandParent = parent.getParentElement(); + return grandParent != null && grandParent.getName().equals("component") + && grandParent.getAttributeValue("name").equals("JavacSettings"); + } + } + return false; + } +} diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java index bd17eabcb801..c264f409a155 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java @@ -468,6 +468,9 @@ public class StandardInstructionVisitor extends InstructionVisitor { return true; } } + if (PsiTreeUtil.findChildOfType(element, PsiAssignmentExpression.class) != null) { + return true; + } return false; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 340f4ea3a464..6dc59284748f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -620,6 +620,9 @@ public class JavaCompletionUtil { if (element instanceof PsiJavaCodeReferenceElement) { return mayHaveSideEffects(((PsiJavaCodeReferenceElement)element).getQualifier()); } + if (element instanceof PsiParenthesizedExpression) { + return mayHaveSideEffects(((PsiParenthesizedExpression)element).getExpression()); + } return true; } diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java index 0d4959121739..6d9423a6fcd9 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionAncientTest.java @@ -119,5 +119,5 @@ public class DataFlowInspectionAncientTest extends InspectionTestCase { public void testSwitchEnumCases() { doTest15(); } public void testSCR15406() { doTest(); } - //public void testIDEADEV11033() { doTest15(); } // added by max, 2007 + public void testIDEADEV11033() { doTest15(); } } diff --git a/platform/analysis-api/src/com/intellij/codeInspection/ex/InspectionToolWrapper.java b/platform/analysis-api/src/com/intellij/codeInspection/ex/InspectionToolWrapper.java index d7c353bb1afc..54ec3939ef54 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/ex/InspectionToolWrapper.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/ex/InspectionToolWrapper.java @@ -19,6 +19,7 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel; import com.intellij.codeInspection.GlobalInspectionContext; import com.intellij.codeInspection.InspectionEP; import com.intellij.codeInspection.InspectionProfileEntry; +import com.intellij.lang.Language; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -85,6 +86,10 @@ public abstract class InspectionToolWrapper getDialects() { return myDialects; } diff --git a/platform/platform-api/src/com/intellij/util/KeyedLazyInstanceEP.java b/platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java similarity index 100% rename from platform/platform-api/src/com/intellij/util/KeyedLazyInstanceEP.java rename to platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java index 7ab561569058..05812a578e72 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java @@ -5,6 +5,7 @@ import com.intellij.execution.ExecutionException; import com.intellij.execution.ExecutionResult; import com.intellij.execution.Executor; import com.intellij.execution.configurations.*; +import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.filters.TextConsoleBuilderImpl; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.process.ProcessOutputTypes; @@ -28,7 +29,6 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.wm.ToolWindowId; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.net.NetUtils; import com.intellij.util.xmlb.XmlSerializer; @@ -109,7 +109,7 @@ public class ExternalSystemRunConfiguration extends RunConfigurationBase impleme @Nullable @Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { - return new MyRunnableState(mySettings, getProject(), ToolWindowId.DEBUG.equals(executor.getId())); + return new MyRunnableState(mySettings, getProject(), DefaultDebugExecutor.EXECUTOR_ID.equals(executor.getId())); } @Override diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java index 60b9a8039bc6..eb1b98627828 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java @@ -21,12 +21,12 @@ import com.intellij.execution.Executor; import com.intellij.execution.configurations.RemoteConnection; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; +import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.ToolWindowId; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -46,7 +46,7 @@ public class ExternalSystemTaskDebugRunner extends GenericDebuggerRunner { @Override public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) { - return profile instanceof ExternalSystemRunConfiguration && ToolWindowId.DEBUG.equals(executorId); + return profile instanceof ExternalSystemRunConfiguration && DefaultDebugExecutor.EXECUTOR_ID.equals(executorId); } @Nullable diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskRunner.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskRunner.java index bbb9a8dc4496..9ecec598550a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskRunner.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskRunner.java @@ -20,13 +20,13 @@ import com.intellij.execution.ExecutionResult; import com.intellij.execution.Executor; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; +import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.GenericProgramRunner; import com.intellij.execution.runners.RunContentBuilder; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.ToolWindowId; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +44,7 @@ public class ExternalSystemTaskRunner extends GenericProgramRunner { @Override public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) { - return profile instanceof ExternalSystemRunConfiguration && ToolWindowId.RUN.equals(executorId); + return profile instanceof ExternalSystemRunConfiguration && DefaultRunExecutor.EXECUTOR_ID.equals(executorId); } @Nullable diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTreeModel.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTreeModel.java index 45883387386c..1d502cfe0b85 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTreeModel.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/ExternalSystemTasksTreeModel.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.externalSystem.service.task.ui; +import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.ExternalSystemUiAware; import com.intellij.openapi.externalSystem.model.ProjectSystemId; @@ -23,7 +24,6 @@ import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecution import com.intellij.openapi.externalSystem.model.execution.ExternalTaskPojo; import com.intellij.openapi.externalSystem.model.project.ExternalProjectPojo; import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil; -import com.intellij.openapi.wm.ToolWindowId; import com.intellij.util.containers.ContainerUtilRt; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.NotNull; @@ -220,7 +220,7 @@ public class ExternalSystemTasksTreeModel extends DefaultTreeModel { settings.setExternalProjectPath(task.getLinkedExternalProjectPath()); settings.setTaskNames(Collections.singletonList(task.getName())); settings.setExternalSystemIdString(myExternalSystemId.toString()); - return new ExternalTaskExecutionInfo(settings, ToolWindowId.RUN); + return new ExternalTaskExecutionInfo(settings, DefaultRunExecutor.EXECUTOR_ID); } @SuppressWarnings("unchecked") diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java index 2e79fbfbe4eb..9ade559abe3f 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java @@ -17,6 +17,8 @@ package com.intellij.openapi.externalSystem.util; import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.executors.DefaultDebugExecutor; +import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.rmi.RemoteUtil; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; @@ -56,7 +58,6 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowEP; -import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.ex.ToolWindowManagerEx; import com.intellij.openapi.wm.impl.ToolWindowImpl; @@ -90,8 +91,8 @@ public class ExternalSystemUtil { @NotNull private static final Map RUNNER_IDS = ContainerUtilRt.newHashMap(); static { - RUNNER_IDS.put(ToolWindowId.RUN, ExternalSystemConstants.RUNNER_ID); - RUNNER_IDS.put(ToolWindowId.DEBUG, ExternalSystemConstants.DEBUG_RUNNER_ID); + RUNNER_IDS.put(DefaultRunExecutor.EXECUTOR_ID, ExternalSystemConstants.RUNNER_ID); + RUNNER_IDS.put(DefaultDebugExecutor.EXECUTOR_ID, ExternalSystemConstants.DEBUG_RUNNER_ID); } private ExternalSystemUtil() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index c007bd230837..f77cb58cce7d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -729,6 +729,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass List enabled = new ArrayList(); final InspectionToolWrapper[] toolWrappers = profile.getInspectionTools(element); InspectionProfileWrapper.checkInspectionsDuplicates(toolWrappers); + Language language = myFile.getLanguage(); for (InspectionToolWrapper toolWrapper : toolWrappers) { if (!profile.isToolEnabled(HighlightDisplayKey.find(toolWrapper.getShortName()), element)) continue; LocalInspectionToolWrapper wrapper = null; @@ -736,8 +737,10 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass wrapper = (LocalInspectionToolWrapper)toolWrapper; } if (wrapper == null) continue; - if (myIgnoreSuppressed && InspectionManagerEx.inspectionResultSuppressed(myFile, wrapper.getTool())) { - continue; + if (myIgnoreSuppressed) { + if (wrapper.isApplicable(language) && InspectionManagerEx.inspectionResultSuppressed(myFile, wrapper.getTool())) { + continue; + } } enabled.add(wrapper); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index 0dfdfbb584e4..5567db3a7597 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -24,6 +24,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.ex.CustomComponentAction; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; @@ -31,9 +32,15 @@ import com.intellij.openapi.ui.GraphicsConfig; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiNamedElement; import com.intellij.psi.codeStyle.MinusculeMatcher; import com.intellij.psi.codeStyle.NameUtil; +import com.intellij.psi.util.PsiUtilCore; +import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.SearchTextField; import com.intellij.ui.components.JBList; @@ -48,7 +55,9 @@ import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author Konstantin Bulenkov @@ -75,6 +84,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA createSearchField(); } }); + myList.setCellRenderer(new MyListRenderer()); } @@ -123,6 +133,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA public void focusLost(FocusEvent e) { editor.setColumns(7); myAlarm.cancelAllRequests(); + myList.setModel(new DefaultListModel()); //noinspection SSBasedInspection SwingUtilities.invokeLater(new Runnable() { @@ -151,13 +162,44 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA myActions = myActionModel.getNames(true); } - List classes = ContainerUtil.getFirstItems(collectResults(pattern, myClasses, myClassModel), 20); - List files = ContainerUtil.getFirstItems(collectResults(pattern, myFiles, myFileModel), 20); - List actions = ContainerUtil.getFirstItems(collectResults(pattern, myActions, myActionModel), 20); + List classes = ContainerUtil.getFirstItems(collectResults(pattern, myClasses, myClassModel), 30); + List files = ContainerUtil.getFirstItems(collectResults(pattern, myFiles, myFileModel), 30); + List actions = ContainerUtil.getFirstItems(collectResults(pattern, myActions, myActionModel), 30); final DefaultListModel listModel = new DefaultListModel(); - for (MatchResult o : classes) listModel.addElement(o); - for (MatchResult o : files) listModel.addElement(o); - for (MatchResult o : actions) listModel.addElement(o); + Set alreadyAddedFiles = new HashSet(); + for (MatchResult o : classes) { + Object[] objects = myClassModel.getElementsByName(o.elementName, false, pattern); + for (Object object : objects) { + if (!listModel.contains(object)) { + listModel.addElement(object); + if (object instanceof PsiElement) { + VirtualFile file = PsiUtilCore.getVirtualFile((PsiElement)object); + if (file != null) { + alreadyAddedFiles.add(file); + } + } + } + } + } + for (MatchResult o : files) { + Object[] objects = myFileModel.getElementsByName(o.elementName, false, pattern); + for (Object object : objects) { + if (!listModel.contains(object)) { + if (object instanceof PsiFile) { + object = ((PsiFile)object).getVirtualFile(); + } + if (!alreadyAddedFiles.contains(object)) { + listModel.addElement(object); + } + } + } + } + for (MatchResult o : actions) { + Object[] objects = myActionModel.getElementsByName(o.elementName, true, pattern); + for (Object object : objects) { + listModel.addElement(object); + } + } myList.setModel(listModel); if (myPopup == null || !myPopup.isVisible()) { @@ -243,4 +285,32 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } } } + + private class MyListRenderer extends ColoredListCellRenderer { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + } + + @Override + protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { + AccessToken token = ApplicationManager.getApplication().acquireReadActionLock(); + try { + if (value instanceof PsiNamedElement) { + String name = ((PsiNamedElement)value).getName(); + assert name != null; + append(name); + } + else if (value instanceof VirtualFile) { + append(((VirtualFile)value).getName()); + } + else { + append(value.toString()); + } + } + finally { + token.finish(); + } + } + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java index 07edd91caf3c..ba025f6c06a6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java @@ -88,15 +88,15 @@ public class InlineProgressIndicator extends ProgressIndicatorBase implements Di textAndProgress.add(myText, BorderLayout.CENTER); final NonOpaquePanel progressWrapper = new NonOpaquePanel(new GridBagLayout()); - progressWrapper.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + progressWrapper.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); final GridBagConstraints c = new GridBagConstraints(); c.weightx = 1; c.weighty = 1; - c.insets = new Insets(SystemInfo.isMacOSLion ? 1 : 0, 0, 1, 4); + c.insets = new Insets(SystemInfo.isMacOSLion ? 1 : 0, 0, 1, myInfo.isCancellable() ? 0 : 4); c.fill = GridBagConstraints.HORIZONTAL; progressWrapper.add(myProgress, c); - textAndProgress.add(progressWrapper, BorderLayout.WEST); + textAndProgress.add(progressWrapper, BorderLayout.EAST); myComponent.add(textAndProgress, BorderLayout.CENTER); myComponent.add(myCancelButton, BorderLayout.EAST); myComponent.setToolTipText(processInfo.getTitle() + ". " + IdeBundle.message("progress.text.clickToViewProgressWindow")); diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/BasePathMacroManager.java b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/BasePathMacroManager.java index 48cf3fc571b3..d90f2d53b9a2 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/BasePathMacroManager.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/BasePathMacroManager.java @@ -15,12 +15,15 @@ */ package com.intellij.openapi.components.impl; +import com.intellij.application.options.PathMacrosCollector; import com.intellij.application.options.PathMacrosImpl; import com.intellij.application.options.ReplacePathToMacroMap; import com.intellij.openapi.application.PathMacros; +import com.intellij.openapi.components.CompositePathMacroFilter; import com.intellij.openapi.components.ExpandMacroToPathMap; import com.intellij.openapi.components.PathMacroManager; import com.intellij.openapi.components.TrackingPathMacroSubstitutor; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -37,6 +40,7 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil; import java.util.*; public class BasePathMacroManager extends PathMacroManager { + private static CompositePathMacroFilter ourFilter = new CompositePathMacroFilter(Extensions.getExtensions(PathMacrosCollector.MACRO_FILTER_EXTENSION_POINT_NAME)); private PathMacrosImpl myPathMacros; public BasePathMacroManager(@Nullable PathMacros pathMacros) { @@ -183,7 +187,7 @@ public class BasePathMacroManager extends PathMacroManager { @Override public void collapsePaths(final Element element) { - getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive); + getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, false, ourFilter); } public int hashCode() { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/TypeMayBeWeakenedInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/TypeMayBeWeakenedInspection.java index 6220d96b5d33..f036539dcd37 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/TypeMayBeWeakenedInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/TypeMayBeWeakenedInspection.java @@ -19,6 +19,7 @@ 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.codeStyle.JavaCodeStyleManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.util.Query; @@ -52,8 +53,7 @@ public class TypeMayBeWeakenedInspection extends BaseInspection { @Override @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message( - "type.may.be.weakened.display.name"); + return InspectionGadgetsBundle.message("type.may.be.weakened.display.name"); } @Override @@ -180,7 +180,9 @@ public class TypeMayBeWeakenedInspection extends BaseInspection { type = factory.createTypeByFQClassName(fqClassName, scope); } final PsiJavaCodeReferenceElement referenceElement = factory.createReferenceElementByType(type); - componentReferenceElement.replace(referenceElement); + final PsiElement replacement = componentReferenceElement.replace(referenceElement); + final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(project); + javaCodeStyleManager.shortenClassReferences(replacement); } } @@ -222,7 +224,7 @@ public class TypeMayBeWeakenedInspection extends BaseInspection { } } if (isOnTheFly() && variable instanceof PsiField) { - // checking variables with greater visibiltiy is too expensive + // checking variables with greater visibility is too expensive // for error checking in the editor if (!variable.hasModifierProperty(PsiModifier.PRIVATE)) { return; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.after.java new file mode 100644 index 000000000000..9bacc0be74b6 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.after.java @@ -0,0 +1,13 @@ +package com.siyeh.igfixes.abstraction.type_may_be_weakened; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class Shorten { + + private static void m() { + Collection players = new ArrayList(); + players.add("new Player()"); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.java new file mode 100644 index 000000000000..417146d4fca1 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/abstraction/type_may_be_weakened/Shorten.java @@ -0,0 +1,12 @@ +package com.siyeh.igfixes.abstraction.type_may_be_weakened; + +import java.util.ArrayList; +import java.util.List; + +public class Shorten { + + private static void m() { + List players = new ArrayList(); + players.add("new Player()"); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/abstraction/TypeMayBeWeakenedFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/abstraction/TypeMayBeWeakenedFixTest.java new file mode 100644 index 000000000000..58373f3a3955 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/abstraction/TypeMayBeWeakenedFixTest.java @@ -0,0 +1,21 @@ +package com.siyeh.ig.fixes.abstraction; + +import com.siyeh.InspectionGadgetsBundle; +import com.siyeh.ig.IGQuickFixesTestCase; +import com.siyeh.ig.abstraction.TypeMayBeWeakenedInspection; + +/** + * @author Bas Leijdekkers + */ +public class TypeMayBeWeakenedFixTest extends IGQuickFixesTestCase { + + @Override + public void setUp() throws Exception { + super.setUp(); + myFixture.enableInspections(new TypeMayBeWeakenedInspection()); + myRelativePath = "abstraction/type_may_be_weakened"; + } + + public void testShorten() { doTest(InspectionGadgetsBundle.message("type.may.be.weakened.quickfix", "java.util.Collection")); } + +} diff --git a/plugins/git4idea/src/git4idea/GitTaskHandler.java b/plugins/git4idea/src/git4idea/GitTaskHandler.java index 659a3daef438..a3d6796c024c 100644 --- a/plugins/git4idea/src/git4idea/GitTaskHandler.java +++ b/plugins/git4idea/src/git4idea/GitTaskHandler.java @@ -66,7 +66,7 @@ public class GitTaskHandler extends VcsTaskHandler { MultiMap map = new MultiMap(); if (!problems.isEmpty()) { if (ApplicationManager.getApplication().isUnitTestMode() || - Messages.showDialog("The following repositories already have specified branch " + taskName + ":
" + + Messages.showDialog(myProject, "The following repositories already have specified branch " + taskName + ":
" + StringUtil.join(problems, "
") + ".
" + "Do you want to checkout existing branch?", "Branch Already Exists", new String[]{Messages.YES_BUTTON, Messages.NO_BUTTON}, 0, diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java index 0c775d2430a7..4586e128c437 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java @@ -78,8 +78,6 @@ public abstract class TaskManager { public abstract LocalTask activateTask(@NotNull Task task, boolean clearContext); - public abstract void activateInVcs(LocalTask task, @Nullable LocalTask previousActive, VcsOperation operation, String name); - @NotNull public abstract LocalTask getActiveTask(); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form index 66ebb517d011..bab20f294310 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form @@ -73,22 +73,17 @@ - + + + + - - - - - - - - @@ -99,14 +94,6 @@ - - - - - - - - @@ -117,23 +104,24 @@ - + - + - + + + + + + + + + - - - - - - - diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java index dced5ebee9cd..1eba2638564c 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java @@ -25,12 +25,10 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.ValidationInfo; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.VcsType; -import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.tasks.*; import com.intellij.tasks.impl.TaskManagerImpl; import com.intellij.tasks.impl.TaskUtil; -import com.intellij.ui.IdeBorderFactory; -import com.intellij.util.ui.RadioButtonEnumModel; +import com.intellij.ui.components.JBCheckBox; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -53,11 +51,11 @@ public class OpenTaskDialog extends DialogWrapper { private JPanel myVcsPanel; private JTextField myBranchName; private JTextField myChangelistName; - private ButtonGroup myVcsGroup; + private JBCheckBox myCreateBranchJBCheckBox; + private JBCheckBox myCreateChangelistJBCheckBox; private final Project myProject; private final Task myTask; - private final RadioButtonEnumModel myButtonEnumModel; public OpenTaskDialog(@NotNull final Project project, @NotNull final Task task) { super(project, false); @@ -81,54 +79,48 @@ public class OpenTaskDialog extends DialogWrapper { TaskManagerImpl.Config state = taskManager.getState(); myClearContext.setSelected(state.clearContext); - myButtonEnumModel = RadioButtonEnumModel.bindEnum(TaskManager.VcsOperation.class, myVcsGroup); AbstractVcs vcs = manager.getActiveVcs(); if (vcs == null) { myVcsPanel.setVisible(false); } else { - if (vcs.getType() != VcsType.distributed) { - myButtonEnumModel.getButton(TaskManager.VcsOperation.CREATE_BRANCH).setVisible(false); - myBranchName.setVisible(false); - } - if (state.vcsOperation == -1) { - state.vcsOperation = vcs.getType() == VcsType.distributed - ? TaskManager.VcsOperation.CREATE_BRANCH.ordinal() - : TaskManager.VcsOperation.CREATE_CHANGELIST.ordinal(); - } - myVcsPanel.setBorder(IdeBorderFactory.createTitledBorder(vcs.getDisplayName() + " operations", false)); - myBranchName.setText(taskManager.suggestBranchName(task)); - myChangelistName.setText(taskManager.getChangelistName(task)); - myButtonEnumModel.addActionListener(new ActionListener() { + ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - TaskManager.VcsOperation selected = myButtonEnumModel.getSelected(); - myChangelistName.setEnabled(false); - myBranchName.setEnabled(false); - if (selected == TaskManager.VcsOperation.CREATE_BRANCH) { - myBranchName.setEnabled(true); - myBranchName.requestFocus(); - } - else if (selected == TaskManager.VcsOperation.CREATE_CHANGELIST) { - myChangelistName.setEnabled(true); - IdeFocusManager.getInstance(myProject).requestFocus(myChangelistName, true); - myChangelistName.requestFocus(); - } + updateFields(); } - }); - myButtonEnumModel.setSelected(state.vcsOperation); + }; + myCreateChangelistJBCheckBox.addActionListener(listener); + myCreateBranchJBCheckBox.addActionListener(listener); + myCreateChangelistJBCheckBox.setSelected(manager.getState().createChangelist); + myCreateBranchJBCheckBox.setSelected(manager.getState().createBranch); + + if (vcs.getType() != VcsType.distributed) { + myCreateBranchJBCheckBox.setSelected(false); + myCreateBranchJBCheckBox.setVisible(false); + myBranchName.setVisible(false); + } + + myBranchName.setText(taskManager.suggestBranchName(task)); + myChangelistName.setText(taskManager.getChangelistName(task)); + updateFields(); } init(); } + private void updateFields() { + myBranchName.setEnabled(myCreateBranchJBCheckBox.isSelected()); + myChangelistName.setEnabled(myCreateChangelistJBCheckBox.isSelected()); + } + @Override protected void doOKAction() { TaskManagerImpl taskManager = (TaskManagerImpl)TaskManager.getManager(myProject); taskManager.getState().markAsInProgress = isMarkAsInProgress(); - TaskManager.VcsOperation operation = getVcsOperation(); - taskManager.getState().vcsOperation = operation.ordinal(); + taskManager.getState().createChangelist = myCreateChangelistJBCheckBox.isSelected(); + taskManager.getState().createBranch = myCreateBranchJBCheckBox.isSelected(); TaskRepository repository = myTask.getRepository(); if (isMarkAsInProgress() && repository != null) { @@ -142,7 +134,7 @@ public class OpenTaskDialog extends DialogWrapper { } LocalTask localTask = taskManager.activateTask(myTask, isClearContext()); LocalTask activeTask = taskManager.getActiveTask(); - taskManager.activateInVcs(localTask, activeTask, operation, myBranchName.getText()); + taskManager.createBranch(localTask, activeTask, myBranchName.getText()); if (myTask.getType() == TaskType.EXCEPTION && AnalyzeTaskStacktraceAction.hasTexts(myTask)) { AnalyzeTaskStacktraceAction.analyzeStacktrace(myTask, myProject); } @@ -152,24 +144,22 @@ public class OpenTaskDialog extends DialogWrapper { @Nullable @Override protected ValidationInfo doValidate() { - switch (myButtonEnumModel.getSelected()) { - case CREATE_BRANCH: - String branchName = myBranchName.getText().trim(); - if (branchName.isEmpty()) { - return new ValidationInfo("Branch name should not be empty", myBranchName); - } - else if (branchName.contains(" ")) { - return new ValidationInfo("Branch name should not contain spaces"); - } - else { - return null; - } - case CREATE_CHANGELIST: - if (myChangelistName.getText().trim().isEmpty()) { - return new ValidationInfo("Changelist name should not be empty"); - } - case DO_NOTHING: + if (myCreateBranchJBCheckBox.isSelected()) { + String branchName = myBranchName.getText().trim(); + if (branchName.isEmpty()) { + return new ValidationInfo("Branch name should not be empty", myBranchName); + } + else if (branchName.contains(" ")) { + return new ValidationInfo("Branch name should not contain spaces"); + } + else { return null; + } + } + if (myCreateChangelistJBCheckBox.isSelected()) { + if (myChangelistName.getText().trim().isEmpty()) { + return new ValidationInfo("Changelist name should not be empty"); + } } return null; } @@ -178,15 +168,6 @@ public class OpenTaskDialog extends DialogWrapper { return myClearContext.isSelected(); } - private TaskManager.VcsOperation getVcsOperation() { - if (myVcsPanel.isVisible()) { - return myButtonEnumModel.getSelected(); - } - else { - return TaskManager.VcsOperation.DO_NOTHING; - } - } - private boolean isMarkAsInProgress() { return myMarkAsInProgressBox.isSelected() && myMarkAsInProgressBox.isVisible(); } @@ -198,13 +179,10 @@ public class OpenTaskDialog extends DialogWrapper { @Override public JComponent getPreferredFocusedComponent() { - TaskManager.VcsOperation operation = getVcsOperation(); - if (operation == TaskManager.VcsOperation.CREATE_BRANCH) { - myBranchName.setEnabled(true); + if (myCreateBranchJBCheckBox.isSelected()) { return myBranchName; } - else if (operation == TaskManager.VcsOperation.CREATE_CHANGELIST) { - myChangelistName.setEnabled(true); + else if (myCreateChangelistJBCheckBox.isSelected()) { return myChangelistName; } else return null; diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java index 49d0eed1e7da..98c7f38da483 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -387,20 +387,13 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe return task; } - @Override - public void activateInVcs(LocalTask task, LocalTask previousActive, VcsOperation operation, String name) { - if (operation == VcsOperation.CREATE_CHANGELIST) { - String comment = TaskUtil.getChangeListComment(task); - createChangeList(task, name, comment); - } - else if (operation == VcsOperation.CREATE_BRANCH) { - VcsTaskHandler[] handlers = VcsTaskHandler.getAllHandlers(myProject); - for (VcsTaskHandler handler : handlers) { - if (previousActive != null) { - addBranches(previousActive, handler.getActiveTask()); - } - addBranches(task, handler.startNewTask(name)); + public void createBranch(LocalTask task, LocalTask previousActive, String name) { + VcsTaskHandler[] handlers = VcsTaskHandler.getAllHandlers(myProject); + for (VcsTaskHandler handler : handlers) { + if (previousActive != null) { + addBranches(previousActive, handler.getActiveTask()); } + addBranches(task, handler.startNewTask(name)); } } @@ -933,7 +926,8 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe public boolean clearContext = true; - public int vcsOperation = -1; + public boolean createChangelist = true; + public boolean createBranch = true; public boolean saveContextOnCommit = true; public boolean trackContextForNewChangelist = false; diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java index b18ad3d459f4..399eed191e82 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java @@ -19,7 +19,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vcs.VcsTaskHandler; import com.intellij.tasks.BranchInfo; import com.intellij.tasks.LocalTask; -import com.intellij.tasks.TaskManager; import com.intellij.tasks.TaskManagerTestCase; import com.intellij.tasks.impl.LocalTaskImpl; import com.intellij.util.Function; @@ -76,7 +75,7 @@ public class TaskBranchesTest extends TaskManagerTestCase { assertNotNull(defaultTask); LocalTaskImpl foo = myTaskManager.createLocalTask("foo"); LocalTask localTask = myTaskManager.activateTask(foo, false); - myTaskManager.activateInVcs(localTask, defaultTask, TaskManager.VcsOperation.CREATE_BRANCH, myTaskManager.suggestBranchName(localTask)); + myTaskManager.createBranch(localTask, defaultTask, myTaskManager.suggestBranchName(localTask)); List branches = localTask.getBranches(); assertEquals(2, branches.size()); assertEquals(2, defaultTask.getBranches().size()); @@ -86,7 +85,7 @@ public class TaskBranchesTest extends TaskManagerTestCase { foo = myTaskManager.createLocalTask("foo"); localTask = myTaskManager.activateTask(foo, false); - myTaskManager.activateInVcs(localTask, defaultTask, TaskManager.VcsOperation.CREATE_BRANCH, myTaskManager.suggestBranchName(localTask)); + myTaskManager.createBranch(localTask, defaultTask, myTaskManager.suggestBranchName(localTask)); assertEquals("foo", repositories.get(0).getCurrentBranch().getName()); } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java index a1044b3e4088..428521ddbbfd 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskVcsTest.java @@ -192,11 +192,9 @@ public class TaskVcsTest extends CodeInsightFixtureTestCase { } private void activateAndCreateChangelist(Task task) { - LocalTask activeTask = myTaskManager.getActiveTask(); LocalTask localTask = myTaskManager.activateTask(task, false); if (localTask.getChangeLists().isEmpty()) { - myTaskManager.activateInVcs(localTask, activeTask, TaskManager.VcsOperation.CREATE_CHANGELIST, - myTaskManager.getChangelistName(localTask)); + myTaskManager.createChangeList(localTask, myTaskManager.getChangelistName(localTask)); } } diff --git a/resources/src/idea/RichPlatformPlugin.xml b/resources/src/idea/RichPlatformPlugin.xml index 609b0103aca0..c3bea58101cd 100644 --- a/resources/src/idea/RichPlatformPlugin.xml +++ b/resources/src/idea/RichPlatformPlugin.xml @@ -223,6 +223,7 @@ serviceImplementation="com.intellij.compiler.impl.rmiCompiler.RmicConfiguration"/> +