diff --git a/.idea/libraries/XStream.xml b/.idea/libraries/XStream.xml index 1ae2bba6df3e..6b84f434a446 100644 --- a/.idea/libraries/XStream.xml +++ b/.idea/libraries/XStream.xml @@ -1,9 +1,11 @@ - + - + + + \ No newline at end of file diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant index ba54f552fc99..818aa55c8ac4 100644 --- a/build/scripts/layouts.gant +++ b/build/scripts/layouts.gant @@ -625,7 +625,7 @@ def layout_core_upsource(String home, String target) { include(name: "cli-parser-1.1.jar") include(name: "jna.jar") include(name: "log4j.jar") - include(name: "xstream.jar") + include(name: "xstream-1.4.3.jar") include(name: "xpp3-1.1.4-min.jar") include(name: "jdom.jar") } diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant index 28c3a310a364..9c17b415877f 100644 --- a/build/scripts/libLicenses.gant +++ b/build/scripts/libLicenses.gant @@ -231,7 +231,7 @@ libraryLicense(name: "Xerces", version: "2.9.1", license: "Apache 2.0", url: "ht libraryLicense(name: "XML Commons (xml-apis.jar, resolver.jar)", version: "", license: "Apache 2.0, W3C Software License , public domain", url: "http://xml.apache.org/commons/", licenseUrl: "http://xml.apache.org/commons/licenses.html") libraryLicense(name: "XMLBeans", libraryName: "XmlBeans", version: "2.3.0", license: "Apache 2.0", url: "http://xmlbeans.apache.org/", licenseUrl: "http://svn.jetbrains.org/idea/Trunk/bundled/WebServices/resources/lib/xmlbeans-2.3.0/xmlbeans.LICENSE") libraryLicense(name: "XML-RPC", libraryName: "XmlRPC", version: "2.0", license: "Apache 2.0", url: "http://ws.apache.org/xmlrpc/xmlrpc2/", licenseUrl: "http://ws.apache.org/xmlrpc/xmlrpc2/license.html") -libraryLicense(name: "XStream", version: "1.2.1", license: "BSD", url: "http://xstream.codehaus.org/", licenseUrl: "http://xstream.codehaus.org/license.html") +libraryLicense(name: "XStream", version: "1.4.3", license: "BSD", url: "http://xstream.codehaus.org/", licenseUrl: "http://xstream.codehaus.org/license.html") libraryLicense(name: "YourKit Java Profiler", libraryName: "yjp-controller-api-redist.jar", version: "8.0.x", license: "link (commercial license)", url: "http://yourkit.com/", licenseUrl: "http://www.yourkit.com/purchase/license.html") libraryLicense(name: "protobuf", version: "2.3.0", license: "New BSD", url: "http://code.google.com/p/protobuf/", licenseUrl: "http://code.google.com/p/protobuf/source/browse/trunk/COPYING.txt?r=367") libraryLicense(name: "Netty", libraryName: "Netty", version: "3.5.8", license: "Apache 2.0", url: "http://netty.io", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0") diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilerAPIConfiguration.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilerAPIConfiguration.java index 4f7181776757..0784a676700e 100755 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilerAPIConfiguration.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilerAPIConfiguration.java @@ -20,6 +20,7 @@ import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.components.StorageScheme; +import com.intellij.openapi.project.Project; @State( name = "CompilerAPISettings", @@ -29,4 +30,7 @@ import com.intellij.openapi.components.StorageScheme; } ) public class CompilerAPIConfiguration extends JavacConfiguration { + public CompilerAPIConfiguration(Project project) { + super(project); + } } \ No newline at end of file diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfiguration.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfiguration.java index e36054c56392..8777add6bb67 100755 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfiguration.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/javac/JavacConfiguration.java @@ -30,10 +30,18 @@ import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions; ) public class JavacConfiguration implements PersistentStateComponent { private final JpsJavaCompilerOptions mySettings = new JpsJavaCompilerOptions(); + private final Project myProject; + + public JavacConfiguration(Project project) { + myProject = project; + } @NotNull public JpsJavaCompilerOptions getState() { - return mySettings; + JpsJavaCompilerOptions state = new JpsJavaCompilerOptions(); + XmlSerializerUtil.copyBean(mySettings, state); + state.ADDITIONAL_OPTIONS_STRING = PathMacroManager.getInstance(myProject).collapsePathsRecursively(state.ADDITIONAL_OPTIONS_STRING); + return state; } public void loadState(JpsJavaCompilerOptions state) { @@ -41,6 +49,6 @@ public class JavacConfiguration implements PersistentStateComponent aClass) { - return ServiceManager.getService(project, aClass).getState(); + return ServiceManager.getService(project, aClass).mySettings; } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/usageView/UsageContextCallHierarchyPanel.java b/java/java-impl/src/com/intellij/usageView/UsageContextCallHierarchyPanel.java index 1f4e04752b34..877530d44de8 100644 --- a/java/java-impl/src/com/intellij/usageView/UsageContextCallHierarchyPanel.java +++ b/java/java-impl/src/com/intellij/usageView/UsageContextCallHierarchyPanel.java @@ -25,11 +25,10 @@ import com.intellij.openapi.progress.util.ProgressIndicatorBase; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiReference; import com.intellij.usages.PsiElementUsageTarget; +import com.intellij.usages.UsageContextPanel; import com.intellij.usages.UsageTarget; import com.intellij.usages.UsageView; -import com.intellij.usages.UsageContextPanel; import com.intellij.usages.impl.UsageContextPanelBase; import com.intellij.usages.impl.UsageViewImpl; import org.jetbrains.annotations.NotNull; @@ -91,7 +90,7 @@ public class UsageContextCallHierarchyPanel extends UsageContextPanelBase { myBrowser = null; } if (element != null) { - myBrowser = createPanel(element); + myBrowser = createCallHierarchyPanel(element); if (myBrowser == null) { element = null; } @@ -113,19 +112,6 @@ public class UsageContextCallHierarchyPanel extends UsageContextPanelBase { } } - @Nullable - private static HierarchyBrowser createPanel(@NotNull PsiElement element) { - PsiElement resolve; - - HierarchyBrowser result = null; - if (element instanceof PsiReference && (resolve = ((PsiReference)element).resolve()) != null) { - result = createCallHierarchyPanel(resolve); - } - if (result == null) result = createCallHierarchyPanel(element); - - return result; - } - @Nullable private static HierarchyBrowser createCallHierarchyPanel(@NotNull PsiElement element) { HierarchyProvider provider = LanguageCallHierarchy.INSTANCE.forLanguage(element.getLanguage()); diff --git a/java/openapi/src/com/intellij/util/xml/converters/AbstractMemberResolveConverter.java b/java/openapi/src/com/intellij/util/xml/converters/AbstractMemberResolveConverter.java index ff8037f7f705..230fa140d0a3 100644 --- a/java/openapi/src/com/intellij/util/xml/converters/AbstractMemberResolveConverter.java +++ b/java/openapi/src/com/intellij/util/xml/converters/AbstractMemberResolveConverter.java @@ -119,7 +119,7 @@ public abstract class AbstractMemberResolveConverter extends ResolvingConverter< public LocalQuickFix[] getQuickFixes(final ConvertContext context) { final String targetName = ((GenericValue)context.getInvocationElement()).getStringValue(); - if (targetName == null) return super.getQuickFixes(context); + if (!JavaPsiFacade.getInstance(context.getProject()).getNameHelper().isIdentifier(targetName)) return super.getQuickFixes(context); final PsiClass targetClass = getTargetClass(context); if (targetClass == null) return super.getQuickFixes(context); final PropertyMemberType memberType = getMemberTypes(context)[0]; diff --git a/jps/model-api/src/org/jetbrains/jps/model/JpsProject.java b/jps/model-api/src/org/jetbrains/jps/model/JpsProject.java index 16ea595874c9..cd1e6a3e815b 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/JpsProject.java +++ b/jps/model-api/src/org/jetbrains/jps/model/JpsProject.java @@ -52,4 +52,7 @@ public interface JpsProject extends JpsCompositeElement, JpsReferenceableElement @NotNull String getName(); void setName(@NotNull String name); + + @NotNull + JpsModel getModel(); } diff --git a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsGlobalImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsGlobalImpl.java index 55a5a1335856..349b8fb718b8 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsGlobalImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsGlobalImpl.java @@ -15,7 +15,7 @@ import org.jetbrains.jps.model.library.sdk.JpsSdkType; public class JpsGlobalImpl extends JpsRootElementBase implements JpsGlobal { private final JpsLibraryCollectionImpl myLibraryCollection; - public JpsGlobalImpl(JpsModel model, JpsEventDispatcher eventDispatcher) { + public JpsGlobalImpl(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) { super(model, eventDispatcher); myLibraryCollection = new JpsLibraryCollectionImpl(myContainer.setChild(JpsLibraryRole.LIBRARIES_COLLECTION_ROLE)); myContainer.setChild(JpsFileTypesConfigurationImpl.ROLE, new JpsFileTypesConfigurationImpl()); diff --git a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsProjectImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsProjectImpl.java index b405c1bbf56f..c10959b83bf2 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsProjectImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsProjectImpl.java @@ -34,7 +34,7 @@ public class JpsProjectImpl extends JpsRootElementBase implement private final JpsLibraryCollection myLibraryCollection; private String myName = ""; - public JpsProjectImpl(JpsModel model, JpsEventDispatcher eventDispatcher) { + public JpsProjectImpl(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) { super(model, eventDispatcher); myContainer.setChild(JpsModuleRole.MODULE_COLLECTION_ROLE); myContainer.setChild(EXTERNAL_REFERENCES_COLLECTION_ROLE); diff --git a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsRootElementBase.java b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsRootElementBase.java index 6ffafc14e136..cf8e65823336 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsRootElementBase.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/impl/JpsRootElementBase.java @@ -12,7 +12,7 @@ public abstract class JpsRootElementBase> extend private final JpsModel myModel; private final JpsEventDispatcher myEventDispatcher; - protected JpsRootElementBase(JpsModel model, JpsEventDispatcher eventDispatcher) { + protected JpsRootElementBase(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) { super(); myModel = model; myEventDispatcher = eventDispatcher; @@ -29,8 +29,9 @@ public abstract class JpsRootElementBase> extend return myEventDispatcher; } + @NotNull @Override - protected JpsModel getModel() { + public JpsModel getModel() { return myModel; } diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java index e90fd123223a..716fce0e34e5 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java @@ -259,7 +259,7 @@ public class JpsProjectLoader extends JpsLoaderBase { } } } - JpsFacetSerializer.loadFacets(module, JDomSerializationUtil.findComponent(moduleRoot, "FacetManager"), baseModulePath); + JpsFacetSerializer.loadFacets(module, JDomSerializationUtil.findComponent(moduleRoot, "FacetManager")); return module; } diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetConfigurationSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetConfigurationSerializer.java index 67206a3b10a4..f8fb2e6761e3 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetConfigurationSerializer.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetConfigurationSerializer.java @@ -27,14 +27,12 @@ public abstract class JpsFacetConfigurationSerializer { return myFacetTypeId; } - public E loadExtension(final Element configurationElement, final String facetName, JpsModule module, - String baseModulePath, JpsElement parentFacet) { - final E e = loadExtension(configurationElement, facetName, baseModulePath, parentFacet, module); + public E loadExtension(final Element configurationElement, final String facetName, JpsModule module, JpsElement parentFacet) { + final E e = loadExtension(configurationElement, facetName, parentFacet, module); return module.getContainer().setChild(myRole, e); } - protected abstract E loadExtension(@NotNull Element facetConfigurationElement, String name, String baseModulePath, JpsElement parent, - JpsModule module); + protected abstract E loadExtension(@NotNull Element facetConfigurationElement, String name, JpsElement parent, JpsModule module); public boolean hasExtension(JpsModule module) { return module.getContainer().getChild(myRole) != null; diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetSerializer.java index 10e0640db0d0..3998dab413bb 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetSerializer.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/facet/JpsFacetSerializer.java @@ -23,11 +23,11 @@ public class JpsFacetSerializer { @NonNls public static final String CONFIGURATION_TAG = "configuration"; @NonNls public static final String NAME_ATTRIBUTE = "name"; - public static void loadFacets(JpsModule module, @Nullable Element facetManagerElement, final String baseModulePath) { + public static void loadFacets(JpsModule module, @Nullable Element facetManagerElement) { if (facetManagerElement == null) return; final FacetManagerState state = XmlSerializer.deserialize(facetManagerElement, FacetManagerState.class); if (state != null) { - addFacets(module, state.getFacets(), null, baseModulePath); + addFacets(module, state.getFacets(), null); } } @@ -43,20 +43,19 @@ public class JpsFacetSerializer { XmlSerializer.serializeInto(managerState, facetManagerElement, new SkipDefaultValuesSerializationFilters()); } - private static void addFacets(JpsModule module, List facets, @Nullable final JpsElement parentFacet, - final String baseModulePath) { + private static void addFacets(JpsModule module, List facets, @Nullable final JpsElement parentFacet) { for (FacetState facetState : facets) { final JpsFacetConfigurationSerializer serializer = getModuleExtensionSerializer(facetState.getFacetType()); if (serializer != null) { - final JpsElement element = addExtension(module, serializer, facetState, parentFacet, baseModulePath); - addFacets(module, facetState.getSubFacets(), element, baseModulePath); + final JpsElement element = addExtension(module, serializer, facetState, parentFacet); + addFacets(module, facetState.getSubFacets(), element); } } } private static E addExtension(JpsModule module, JpsFacetConfigurationSerializer serializer, FacetState facet, - JpsElement parentFacet, final String baseModulePath) { - return serializer.loadExtension(facet.getConfiguration(), facet.getName(), module, baseModulePath, parentFacet); + JpsElement parentFacet) { + return serializer.loadExtension(facet.getConfiguration(), facet.getName(), module, parentFacet); } @Nullable diff --git a/lib/required_for_dist.txt b/lib/required_for_dist.txt index 9ef3ea59ed7d..eda832c63687 100644 --- a/lib/required_for_dist.txt +++ b/lib/required_for_dist.txt @@ -43,7 +43,7 @@ xbean.jar xerces.jar xmlrpc-2.0.jar xpp3-1.1.4-min.jar -xstream.jar +xstream-1.4.3.jar swingx-core-1.6.2.jar netty-3.5.8.Final.jar protobuf-2.4.1.jar diff --git a/lib/src/xstream-1.4.3-src.zip b/lib/src/xstream-1.4.3-src.zip new file mode 100644 index 000000000000..7a9e93a1761a Binary files /dev/null and b/lib/src/xstream-1.4.3-src.zip differ diff --git a/lib/xstream-1.4.3.jar b/lib/xstream-1.4.3.jar new file mode 100644 index 000000000000..815ed039b3a1 Binary files /dev/null and b/lib/xstream-1.4.3.jar differ diff --git a/lib/xstream.jar b/lib/xstream.jar deleted file mode 100644 index e43240a50219..000000000000 Binary files a/lib/xstream.jar and /dev/null differ diff --git a/platform/icons/src/ide/hectorNo_dark.png b/platform/icons/src/ide/hectorNo_dark.png new file mode 100644 index 000000000000..1344ead7d7aa Binary files /dev/null and b/platform/icons/src/ide/hectorNo_dark.png differ diff --git a/platform/icons/src/ide/hectorOff_dark.png b/platform/icons/src/ide/hectorOff_dark.png new file mode 100644 index 000000000000..292f12363424 Binary files /dev/null and b/platform/icons/src/ide/hectorOff_dark.png differ diff --git a/platform/icons/src/ide/hectorOn_dark.png b/platform/icons/src/ide/hectorOn_dark.png new file mode 100644 index 000000000000..8a3a2eb6300f Binary files /dev/null and b/platform/icons/src/ide/hectorOn_dark.png differ diff --git a/platform/icons/src/ide/hectorSyntax_dark.png b/platform/icons/src/ide/hectorSyntax_dark.png new file mode 100644 index 000000000000..ef670f284aa3 Binary files /dev/null and b/platform/icons/src/ide/hectorSyntax_dark.png differ diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CutHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CutHandler.java index 984d68ff97fd..1d16268cd329 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CutHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CutHandler.java @@ -65,9 +65,20 @@ public class CutHandler extends EditorWriteActionHandler { if (!selectionModel.hasSelection()) return; } + int start = selectionModel.getSelectionStart(); + int end = selectionModel.getSelectionEnd(); + EditorActionManager.getInstance().getActionHandler(IdeActions.ACTION_EDITOR_COPY).execute(editor, dataContext); - EditorModificationUtil.deleteSelectedText(editor); + if (start != end) { + // There is a possible case that 'sticky selection' is active. It's automatically removed on copying then, so, we explictly + // remove the text. + editor.getDocument().deleteString(start, end); + } + else { + EditorModificationUtil.deleteSelectedText(editor); + } + if (positionToRestore != null) { editor.getCaretModel().moveToVisualPosition(positionToRestore); } diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java index 349ff7b16bda..d203580fe6a0 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java @@ -97,10 +97,15 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme protected void appendActions(@NotNull DefaultActionGroup actionGroup, @Nullable String helpID) { actionGroup.add(myAutoScrollToSourceHandler.createToggleAction()); actionGroup.add(ActionManager.getInstance().getAction(IdeActions.ACTION_EXPAND_ALL)); - if (myContent != null) { // sometimes there is no content to close, e.g. in usage view preview - actionGroup.add(PinToolwindowTabAction.getPinAction()); - actionGroup.add(new CloseAction()); - } + actionGroup.add(new PinToolwindowTabAction(){ + @Override + public void update(AnActionEvent event) { + super.update(event); + // sometimes there is no content to close, e.g. in usage view preview + event.getPresentation().setVisible(myContent != null); + } + }); + actionGroup.add(new CloseAction()); if (helpID != null) { actionGroup.add(new ContextHelpAction(helpID)); } @@ -162,7 +167,8 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme return list.toArray(new HierarchyNodeDescriptor[list.size()]); } - private PsiElement[] getSelectedElements() { + @NotNull + protected PsiElement[] getSelectedElements() { HierarchyNodeDescriptor[] descriptors = getSelectedDescriptors(); ArrayList elements = new ArrayList(); for (HierarchyNodeDescriptor descriptor : descriptors) { @@ -244,9 +250,14 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme } myContent.getManager().removeContent(myContent, true); } + + @Override + public void update(AnActionEvent e) { + e.getPresentation().setVisible(myContent != null); + } } - protected void configureTree(Tree tree) { + protected void configureTree(@NotNull Tree tree) { tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); tree.setToggleClickCount(-1); tree.setCellRenderer(new HierarchyNodeRenderer()); diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java index a1297e0ec558..212c1418da1a 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBaseEx.java @@ -45,7 +45,6 @@ import com.intellij.pom.Navigatable; import com.intellij.psi.*; import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; -import com.intellij.psi.util.PsiUtilCore; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.Alarm; @@ -66,7 +65,6 @@ import java.util.*; import java.util.List; public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implements OccurenceNavigator { - private static final Logger LOG = Logger.getInstance("#com.intellij.ide.hierarchy.HierarchyBrowserBaseEx"); @NonNls private static final String HELP_ID = "reference.toolWindows.hierarchy"; @@ -463,16 +461,6 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem return myCurrentViewType; } - private PsiElement[] getSelectedElements() { - HierarchyNodeDescriptor[] descriptors = getSelectedDescriptors(); - ArrayList elements = new ArrayList(); - for (HierarchyNodeDescriptor descriptor : descriptors) { - PsiElement element = getElementFromDescriptor(descriptor); - if (element != null) elements.add(element); - } - return PsiUtilCore.toPsiElementArray(elements); - } - @Override public Object getData(final String dataId) { if (getBrowserDataKey().equals(dataId)) { @@ -641,7 +629,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem } } - protected class RefreshAction extends com.intellij.ide.actions.RefreshAction { + private class RefreshAction extends com.intellij.ide.actions.RefreshAction { public RefreshAction() { super(IdeBundle.message("action.refresh"), IdeBundle.message("action.refresh"), AllIcons.Actions.Refresh); } @@ -737,7 +725,6 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem @Override public final void actionPerformed(final AnActionEvent e) { selectScope(myScopeType); - } } diff --git a/platform/lang-impl/src/com/intellij/ide/util/PsiElementModuleRenderer.java b/platform/lang-impl/src/com/intellij/ide/util/PsiElementModuleRenderer.java index 32fb869cc4bf..1af48d24cdf7 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/PsiElementModuleRenderer.java +++ b/platform/lang-impl/src/com/intellij/ide/util/PsiElementModuleRenderer.java @@ -100,7 +100,7 @@ public class PsiElementModuleRenderer extends DefaultListCellRenderer{ } myText = module.getName(); if (inTestSource) { - setIcon(AllIcons.Nodes.TestSourceFolder); + setIcon(AllIcons.Modules.TestSourceFolder); } else { setIcon(ModuleType.get(module).getIcon()); diff --git a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java index f377479f8577..b71570b82738 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java @@ -330,7 +330,7 @@ public class IdeEventQueue extends EventQueue { myCurrentEvent = e; try { - _dispatchEvent(e, true); + _dispatchEvent(e, false); } catch (ProcessCanceledException pce) { throw pce; diff --git a/platform/platform-impl/src/com/intellij/ide/actions/RefreshAction.java b/platform/platform-impl/src/com/intellij/ide/actions/RefreshAction.java index d66dea5d64cf..430966ffcf2a 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/RefreshAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/RefreshAction.java @@ -37,6 +37,7 @@ public class RefreshAction extends AnAction implements DumbAware { super(text, description, icon); } + @Override public void actionPerformed(AnActionEvent e) { // empty } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java index f3af69675fd6..3c1d9d5ebe66 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java @@ -51,29 +51,30 @@ import java.util.List; public abstract class ContentChooser extends DialogWrapper { private List myAllContents; - private Editor myViewer; + private Editor myViewer; private final boolean myUseIdeaEditor; - private final JList myList; - private final Splitter mySplitter; - private final Project myProject; - private final boolean myAllowMultipleSelections; - private final Alarm myUpdateAlarm; + private final JList myList; + private final JBSplitter mySplitter; + private final Project myProject; + private final boolean myAllowMultipleSelections; + private final Alarm myUpdateAlarm; private Icon myListEntryIcon = AllIcons.FileTypes.Text; public ContentChooser(Project project, String title, boolean useIdeaEditor) { this(project, title, useIdeaEditor, false); } - + public ContentChooser(Project project, String title, boolean useIdeaEditor, boolean allowMultipleSelections) { super(project, true); myProject = project; myUseIdeaEditor = useIdeaEditor; myAllowMultipleSelections = allowMultipleSelections; myUpdateAlarm = new Alarm(getDisposable()); - mySplitter = new Splitter(true, 0.3f); - myList = new JBList(); + mySplitter = new JBSplitter(true, 0.3f); + mySplitter.setSplitterProportionKey(getDimensionServiceKey() + ".splitter"); + myList = new JBList(); setOKButtonText(CommonBundle.getOkButtonText()); setTitle(title); diff --git a/platform/platform-impl/src/com/intellij/ui/content/tabs/PinToolwindowTabAction.java b/platform/platform-impl/src/com/intellij/ui/content/tabs/PinToolwindowTabAction.java index 8df01edb8dae..acb2e8ab47ef 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/tabs/PinToolwindowTabAction.java +++ b/platform/platform-impl/src/com/intellij/ui/content/tabs/PinToolwindowTabAction.java @@ -23,13 +23,15 @@ import com.intellij.openapi.wm.impl.content.ToolWindowContentUi; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; import com.intellij.ui.content.TabbedPaneContentUI; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author spleaner */ public class PinToolwindowTabAction extends ToggleAction implements DumbAware { - public static final String ACTION_NAME = "PinToolwindowTab"; + @NonNls public static final String ACTION_NAME = "PinToolwindowTab"; public static AnAction getPinAction() { return ActionManager.getInstance().getAction(ACTION_NAME); @@ -40,7 +42,7 @@ public class PinToolwindowTabAction extends ToggleAction implements DumbAware { } @Nullable - private static Content getContextContent(AnActionEvent event) { + private static Content getContextContent(@NotNull AnActionEvent event) { final ToolWindow window = PlatformDataKeys.TOOL_WINDOW.getData(event.getDataContext()); if (window != null) { final ContentManager contentManager = window.getContentManager(); @@ -52,16 +54,19 @@ public class PinToolwindowTabAction extends ToggleAction implements DumbAware { return null; } + @Override public boolean isSelected(AnActionEvent event) { final Content content = getContextContent(event); return content != null && content.isPinned(); } + @Override public void setSelected(AnActionEvent event, boolean flag) { final Content content = getContextContent(event); if (content != null) content.setPinned(flag); } + @Override public void update(AnActionEvent event) { super.update(event); Presentation presentation = event.getPresentation(); diff --git a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties index 325d8619bba7..a280d532add6 100644 --- a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties +++ b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties @@ -430,7 +430,7 @@ powered.by=Powered by powered.by.plugin=''{0}'' plugin. error.cannot.convert.default.message=Invalid value: ''{0}'' error.cannot.resolve.default.message=Cannot resolve symbol ''{0}'' -error.cannot.resolve.0.1=Cannot resolve {0} {1} +error.cannot.resolve.0.1=Cannot resolve {0} ''{1}'' error.unknown.enum.value.message=Unknown enum value ''{0}'' i18nize.cant.create.properties.file.because.its.name.is.associated=Can''t create properties file ''{0}'' because its name is associated with the {1}. i18nize.error.creating.properties.file=Error creating properties file diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroManager.java b/platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroManager.java index b3f66965ab38..33f7312611b6 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroManager.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroManager.java @@ -31,5 +31,7 @@ public abstract class PathMacroManager implements PathMacroSubstitutor { public abstract void collapsePathsRecursively(Element element); + public abstract String collapsePathsRecursively(String text); + public abstract TrackingPathMacroSubstitutor createTrackingSubstitutor(); } 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 449a49523f8d..5a52773ba4c4 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 @@ -110,6 +110,11 @@ public class BasePathMacroManager extends PathMacroManager { getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, true); } + @Override + public String collapsePathsRecursively(final String text) { + return getReplacePathMap().substituteRecursively(text, SystemInfo.isFileSystemCaseSensitive); + } + public void expandPaths(final Element element) { getExpandMacroMap().substitute(element, SystemInfo.isFileSystemCaseSensitive); } diff --git a/platform/usageView/src/com/intellij/usages/impl/rules/UsageScopeGroupingRule.java b/platform/usageView/src/com/intellij/usages/impl/rules/UsageScopeGroupingRule.java index 1ed9eb5fb524..6529a0f00433 100644 --- a/platform/usageView/src/com/intellij/usages/impl/rules/UsageScopeGroupingRule.java +++ b/platform/usageView/src/com/intellij/usages/impl/rules/UsageScopeGroupingRule.java @@ -15,6 +15,7 @@ */ package com.intellij.usages.impl.rules; +import com.intellij.icons.AllIcons; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vcs.FileStatus; @@ -58,7 +59,7 @@ public class UsageScopeGroupingRule implements UsageGroupingRule { private static final UsageScopeGroup TEST = new UsageScopeGroup(0) { @Override public Icon getIcon(boolean isOpen) { - return PlatformIcons.TEST_SOURCE_FOLDER; + return AllIcons.Modules.TestSourceFolder; } @Override diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UnversionedViewDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UnversionedViewDialog.java index 31035c8308ee..844f17fa5097 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UnversionedViewDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/UnversionedViewDialog.java @@ -58,7 +58,7 @@ public class UnversionedViewDialog extends DialogWrapper { public UnversionedViewDialog(final Project project) { super(project, true); - setTitle("Unversioned files"); + setTitle("Unversioned Files"); myProject = project; final Runnable closer = new Runnable() { public void run() { diff --git a/plugins/android/jps-plugin/android-jps-plugin.iml b/plugins/android/jps-plugin/android-jps-plugin.iml index 0f00a0b60824..a4d0b0482d49 100644 --- a/plugins/android/jps-plugin/android-jps-plugin.iml +++ b/plugins/android/jps-plugin/android-jps-plugin.iml @@ -14,6 +14,7 @@ + diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java index cc310e8c1c0a..47f3e080d314 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java @@ -17,6 +17,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.model.serialization.JpsModelSerializationDataService; import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; @@ -35,6 +36,7 @@ import org.jetbrains.jps.model.JpsSimpleElement; import org.jetbrains.jps.model.java.JavaSourceRootType; import org.jetbrains.jps.model.java.JpsJavaClasspathKind; import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.model.java.impl.JpsJavaDependenciesEnumerationHandler; import org.jetbrains.jps.model.library.JpsLibrary; import org.jetbrains.jps.model.library.JpsLibraryRoot; import org.jetbrains.jps.model.library.JpsOrderRootType; @@ -73,8 +75,9 @@ public class AndroidJpsUtil { } private static boolean shouldProcessDependenciesRecursively(JpsModule module) { - // todo: return false for mavenized modules - return true; + return JpsJavaDependenciesEnumerationHandler.shouldProcessDependenciesRecursively( + JpsJavaDependenciesEnumerationHandler.createHandlers( + Collections.singletonList(module))); } @Nullable @@ -575,8 +578,8 @@ public class AndroidJpsUtil { return new File(outputDirForPackagedArtifacts, getApkName(module)).getPath(); } - final String moduleDirPath = extension.getBaseModulePath(); - return moduleDirPath != null ? FileUtil.toSystemDependentName(moduleDirPath + apkRelativePath) : null; + File moduleBaseDirectory = JpsModelSerializationDataService.getBaseDirectory(module); + return moduleBaseDirectory != null ? FileUtil.toSystemDependentName(moduleBaseDirectory.getAbsolutePath() + apkRelativePath) : null; } @NotNull diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/JpsAndroidModuleExtension.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/JpsAndroidModuleExtension.java index f9435c5a62cb..080d9fe2ca5a 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/JpsAndroidModuleExtension.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/JpsAndroidModuleExtension.java @@ -60,8 +60,6 @@ public interface JpsAndroidModuleExtension extends JpsElement { String getApkRelativePath(); - String getBaseModulePath(); - String getCustomDebugKeyStorePath(); List getAdditionalNativeLibs(); diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModelSerializerExtension.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModelSerializerExtension.java index 366d3ce8991d..eb9e58a416f7 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModelSerializerExtension.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModelSerializerExtension.java @@ -44,9 +44,8 @@ public class JpsAndroidModelSerializerExtension extends JpsModelSerializerExtens @Override public JpsAndroidModuleExtension loadExtension(@NotNull Element facetConfigurationElement, String name, - String baseModulePath, JpsElement parent, JpsModule module) { - return new JpsAndroidModuleExtensionImpl(XmlSerializer.deserialize(facetConfigurationElement, JpsAndroidModuleProperties.class), baseModulePath); + return new JpsAndroidModuleExtensionImpl(XmlSerializer.deserialize(facetConfigurationElement, JpsAndroidModuleProperties.class)); } @Override diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModuleExtensionImpl.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModuleExtensionImpl.java index 88b51ef463d2..7fd5134eec0f 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModuleExtensionImpl.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/model/impl/JpsAndroidModuleExtensionImpl.java @@ -20,6 +20,7 @@ import com.intellij.util.xmlb.XmlSerializerUtil; import org.jetbrains.android.util.AndroidNativeLibData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jps.model.serialization.JpsModelSerializationDataService; import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; import org.jetbrains.jps.model.ex.JpsElementBase; @@ -37,11 +38,9 @@ import java.util.List; public class JpsAndroidModuleExtensionImpl extends JpsElementBase implements JpsAndroidModuleExtension { public static final JpsElementChildRoleBase KIND = JpsElementChildRoleBase.create("android extension"); private final JpsAndroidModuleProperties myProperties; - private final String myBaseModulePath; - public JpsAndroidModuleExtensionImpl(JpsAndroidModuleProperties properties, String baseModulePath) { + public JpsAndroidModuleExtensionImpl(JpsAndroidModuleProperties properties) { myProperties = properties; - myBaseModulePath = baseModulePath; } @Override @@ -52,7 +51,7 @@ public class JpsAndroidModuleExtensionImpl extends JpsElementBase myListeners = new ArrayList(); @@ -138,6 +138,7 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { } + Log.LogLevel logLevel = null; String tag = null; String pid = null; String message = text; @@ -145,16 +146,21 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { final Matcher matcher = ANDROID_LOG_MESSAGE_PATTERN.matcher(text); if (matcher.matches()) { String s = matcher.group(1).trim(); + if (s.length() > 0) { + logLevel = getLogLevel(s); + } + + s = matcher.group(2).trim(); if (s.length() > 0) { tag = s; } - s = matcher.group(2).trim(); + s = matcher.group(3).trim(); if (s.length() > 0) { pid = s; } - s = matcher.group(3).trim(); + s = matcher.group(4).trim(); if (s.length() > 0) { message = s; } @@ -167,8 +173,10 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { if (pid == null) { pid = myPrevPid; } - - return configuredFilterName.isApplicable(message, tag, pid, getLogLevel(text)); + if (logLevel == null) { + logLevel = myPrevMessageLogLevel; + } + return configuredFilterName.isApplicable(message, tag, pid, logLevel); } public List getLogFilters() { @@ -185,18 +193,27 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { @Override public boolean isAcceptable(String line) { - Log.LogLevel logLevel = getLogLevel(line); + final Matcher matcher = ANDROID_LOG_MESSAGE_PATTERN.matcher(line); + Log.LogLevel logLevel = null; + + if (matcher.matches()) { + logLevel = getLogLevel(matcher.group(1)); + } + if (logLevel == null) { + logLevel = myPrevMessageLogLevel; + } return logLevel != null && logLevel.getPriority() >= myLogLevel.getPriority(); } } @Nullable - Log.LogLevel getLogLevel(String line) { - Log.LogLevel logLevel = AndroidLogcatUtil.getLogLevel(line); - if (logLevel == null) { - logLevel = myPrevMessageLogLevel; + private static Log.LogLevel getLogLevel(@NotNull String name) { + for (Log.LogLevel level : Log.LogLevel.values()) { + if (name.equals(level.name())) { + return level; + } } - return logLevel; + return null; } public boolean isFilterSelected(LogFilter filter) { @@ -226,24 +243,24 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { final boolean messageHeader = matcher.matches(); if (messageHeader) { - String s = matcher.group(1).trim(); + String s = matcher.group(1); + if (s.length() > 0) { + final Log.LogLevel logLevel = getLogLevel(s); + if (logLevel != null) { + myPrevMessageLogLevel = logLevel; + } + } + + s = matcher.group(2).trim(); if (s.length() > 0) { myPrevTag = s; } - s = matcher.group(2).trim(); + s = matcher.group(3).trim(); if (s.length() > 0) { myPrevPid = s; } } - - Log.LogLevel logLevel = AndroidLogcatUtil.getLogLevel(line); - if (logLevel != null) { - myPrevMessageLogLevel = logLevel; - } - final Key key = myPrevMessageLogLevel != null ? getProcessOutputType(myPrevMessageLogLevel) : ProcessOutputTypes.STDOUT; - - final boolean applicable = isApplicable(line); final boolean applicableByCustomFilter = isApplicableByCustomFilter(line); @@ -266,6 +283,7 @@ public abstract class AndroidLogFilterModel extends LogFilterModel { myFullMessageApplicable = myFullMessageApplicable || applicable; myFullMessageApplicableByCustomFilter = myFullMessageApplicableByCustomFilter || applicableByCustomFilter; } + final Key key = myPrevMessageLogLevel != null ? getProcessOutputType(myPrevMessageLogLevel) : ProcessOutputTypes.STDOUT; return new MyProcessingResult(key, myFullMessageApplicable && myFullMessageApplicableByCustomFilter, diff --git a/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatUtil.java b/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatUtil.java index 7df2620e4fcc..ba5065aee3a8 100644 --- a/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatUtil.java +++ b/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatUtil.java @@ -45,36 +45,21 @@ import java.util.Map; */ public class AndroidLogcatUtil { private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.run.AndroidDebugRunner"); - private static Map LOG_LEVELS; - private static int minLogLevelNameLength; - private static int maxLogLevelNameLength; + private static Map ourLogLevels; private AndroidLogcatUtil() { } @Nullable - public synchronized static Log.LogLevel getLogLevel(String message) { - if (LOG_LEVELS == null) { - LOG_LEVELS = new HashMap(); + public synchronized static Log.LogLevel getLogLevel(String s) { + if (ourLogLevels == null) { + ourLogLevels = new HashMap(); + for (Log.LogLevel level : Log.LogLevel.values()) { - String name = level.name(); - if (minLogLevelNameLength == 0 || name.length() < minLogLevelNameLength) { - minLogLevelNameLength = name.length(); - } - if (name.length() > maxLogLevelNameLength) { - maxLogLevelNameLength = name.length(); - } - LOG_LEVELS.put(name, level); + ourLogLevels.put(level.name(), level); } } - for (int i = 0, n = message.length(); i < n; i++) { - for (int j = i + minLogLevelNameLength; j <= i + maxLogLevelNameLength && j < n; j++) { - String s = message.substring(i, j); - Log.LogLevel logLevel = LOG_LEVELS.get(s); - if (logLevel != null) return logLevel; - } - } - return null; + return ourLogLevels.get(s); } private static void startLogging(IDevice device, AndroidOutputReceiver receiver) diff --git a/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java b/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java index 438adb8adc62..f3d52dd47bc4 100644 --- a/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java +++ b/plugins/android/src/org/jetbrains/android/logcat/EditLogFilterDialog.java @@ -143,12 +143,12 @@ class EditLogFilterDialog extends DialogWrapper { continue; } - final String tag = matcher.group(1).trim(); + final String tag = matcher.group(2).trim(); if (tag != null && tag.length() > 0) { tagSet.add(tag); } - final String pid = matcher.group(2).trim(); + final String pid = matcher.group(3).trim(); if (pid != null && pid.length() > 0) { try { Integer.parseInt(pid); diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkDialog.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkDialog.java new file mode 100644 index 000000000000..2cc06c662407 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkDialog.java @@ -0,0 +1,46 @@ +package org.jetbrains.android.sdk; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.ui.CollectionComboBoxModel; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.util.List; + +/** + * @author Eugene.Kudelevsky + */ +public class AndroidNewSdkDialog extends DialogWrapper { + private JPanel myContentPanel; + private JComboBox myInternalJdkComboBox; + private JComboBox myBuildTargetComboBox; + + protected AndroidNewSdkDialog(@Nullable Project project, + @NotNull List javaSdkNames, + @NotNull String selectedJavaSdkName, + @NotNull List targetNames, + @NotNull String selectedTargetName) { + super(project); + setTitle("Create New Android SDK"); + myInternalJdkComboBox.setModel(new CollectionComboBoxModel(javaSdkNames, selectedJavaSdkName)); + myBuildTargetComboBox.setModel(new CollectionComboBoxModel(targetNames, selectedTargetName)); + + init(); + } + + @Nullable + @Override + protected JComponent createCenterPanel() { + return myContentPanel; + } + + public int getSelectedJavaSdkIndex() { + return myInternalJdkComboBox.getSelectedIndex(); + } + + public int getSelectedTargetIndex() { + return myBuildTargetComboBox.getSelectedIndex(); + } +} diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurableForm.form b/plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkForm.form similarity index 81% rename from plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurableForm.form rename to plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkForm.form index abd6c673d3d2..ca0fdb83dd8c 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurableForm.form +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidNewSdkForm.form @@ -1,9 +1,9 @@ -
- + + - + @@ -38,6 +38,11 @@ + + + + + diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java index a72cbae0b817..784b83bbea64 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java @@ -20,7 +20,6 @@ import com.android.sdklib.IAndroidTarget; import com.intellij.CommonBundle; import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.ui.Messages; -import com.intellij.util.ArrayUtil; import icons.AndroidIcons; import org.jdom.Element; import org.jetbrains.android.util.AndroidBundle; @@ -30,6 +29,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -102,17 +102,6 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { return false; } - int choice = Messages - .showChooseDialog("Please select Java SDK", "Select Internal Java Platform", ArrayUtil.toStringArray(javaSdks), javaSdks.get(0), - Messages.getQuestionIcon()); - - if (choice == -1) { - return false; - } - - final String name = javaSdks.get(choice); - final Sdk jdk = sdkModel.findSdk(name); - MessageBuildingSdkLog log = new MessageBuildingSdkLog(); AndroidSdkData sdkData = AndroidSdkData.parse(sdk.getHomePath(), log); @@ -144,16 +133,17 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { } } - choice = - Messages.showChooseDialog("Select build target", "Create New Android SDK", targetNames, - newestPlatform != null ? newestPlatform : targetNames[0], Messages.getQuestionIcon()); + final AndroidNewSdkDialog dialog = + new AndroidNewSdkDialog(null, javaSdks, javaSdks.get(0), Arrays.asList(targetNames), + newestPlatform != null ? newestPlatform : targetNames[0]); + dialog.show(); - if (choice == -1) { + if (!dialog.isOK()) { return false; } - - AndroidSdkUtils.setUpSdk(sdk, jdk, sdks, targets[choice], true); - + final String name = javaSdks.get(dialog.getSelectedJavaSdkIndex()); + final Sdk jdk = sdkModel.findSdk(name); + AndroidSdkUtils.setUpSdk(sdk, jdk, sdks, targets[dialog.getSelectedTargetIndex()], true); return true; } diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java index 5ae25345cba0..e2e5c5ba43cd 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java @@ -123,7 +123,7 @@ public class AndroidTargetData { } @Nullable - public RenderServiceFactory getRenderServiceFactory(@NotNull Project project) throws RenderingException, IOException { + public synchronized RenderServiceFactory getRenderServiceFactory(@NotNull Project project) throws RenderingException, IOException { if (myRenderServiceFactory == null) { final AttributeDefinitionsImpl attrDefs = getAttrDefsImpl(project); if (attrDefs == null) { diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java index 68118496f5fc..72f297deaf50 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java @@ -179,7 +179,7 @@ public class RenderUtil { reportMissingClassesWarning(warnMessages, callback.getMissingClasses()); - reportBrokenClassesWarning(warnMessages, callback.getBrokenClasses()); + reportBrokenClassesWarning(project, warnMessages, callback.getBrokenClasses()); final Result result = session.getResult(); if (!result.isSuccess()) { @@ -232,21 +232,33 @@ public class RenderUtil { return projectResources; } - private static void reportBrokenClassesWarning(@NotNull List warnMessages, + private static void reportBrokenClassesWarning(@NotNull final Project project, + @NotNull List warnMessages, @NotNull Map brokenClasses) { if (brokenClasses.size() > 0) { - final StringBuilder builder = new StringBuilder(); + if (brokenClasses.size() > 1) { + final StringBuilder builder = new StringBuilder(); builder.append("Unable to initialize:\n"); - for (String brokenClass : brokenClasses.keySet()) { - builder.append("       ").append(brokenClass).append('\n'); + + for (Map.Entry entry : brokenClasses.entrySet()) { + builder.append("       ").append(entry.getKey()).append('\n'); } + removeLastNewLineChar(builder); + // todo: show stack traces + warnMessages.add(new FixableIssueMessage(builder.toString())); } else { - builder.append("Unable to initialize ").append(brokenClasses.keySet().iterator().next()); + final Map.Entry entry = brokenClasses.entrySet().iterator().next(); + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") + final Throwable t = entry.getValue(); + warnMessages.add(new FixableIssueMessage("Unable to initialize " + entry.getKey() + ' ', "Details", "", new Runnable() { + @Override + public void run() { + AndroidUtils.showStackStace(project, new Throwable[] {t}); + } + })); } - removeLastNewLineChar(builder); - warnMessages.add(new FixableIssueMessage(builder.toString())); } } diff --git a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java index 9c865365e405..bb3fef56de2c 100644 --- a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java +++ b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java @@ -23,10 +23,9 @@ import org.jdom.Element; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.eclipse.*; import org.jetbrains.jps.model.JpsElementFactory; -import org.jetbrains.jps.model.JpsModel; -import org.jetbrains.jps.model.JpsProject; import org.jetbrains.jps.model.java.*; import org.jetbrains.jps.model.library.JpsLibrary; +import org.jetbrains.jps.model.library.JpsLibraryReference; import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.model.module.*; import org.jetbrains.jps.model.serialization.JpsMacroExpander; @@ -67,11 +66,10 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader())); + ref.set(new MavenExecutionResult(project, result.getExceptions())); } catch (Exception e) { ref.set(handleException(e)); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java index 634b6006f32b..a99f69c6ba0b 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java @@ -34,7 +34,7 @@ public class PaletteGroupComponent extends JCheckBox { setText(group.getName()); setSelected(true); setIcon(AllIcons.Nodes.TreeClosed); - setSelectedIcon(AllIcons.Nodes.TreeOpen); + setSelectedIcon(AllIcons.Nodes.Folder); setFont(getFont().deriveFont(Font.BOLD)); setFocusPainted(false); setMargin(new Insets(0, 3, 0, 3)); diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/extractTemplate/XsltExtractTemplateAction.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/extractTemplate/XsltExtractTemplateAction.java index 50d8b0295526..9f3160762d09 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/extractTemplate/XsltExtractTemplateAction.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/extractTemplate/XsltExtractTemplateAction.java @@ -96,7 +96,9 @@ public class XsltExtractTemplateAction extends XsltRefactoringActionBase { if (start == null || end == null) { return false; } - if (!(start.getParent() instanceof XmlTag)) { + + final PsiElement parent = start.getParent(); + if (!(parent instanceof XmlTag || parent instanceof XmlComment)) { return false; } @@ -114,7 +116,7 @@ public class XsltExtractTemplateAction extends XsltRefactoringActionBase { return true; } } else { - final XmlTag startTag = PsiTreeUtil.getParentOfType(start, XmlTag.class); + final XmlElement startTag = PsiTreeUtil.getParentOfType(start, XmlTag.class, XmlComment.class); if (startTag == null) { return false; } @@ -122,7 +124,7 @@ public class XsltExtractTemplateAction extends XsltRefactoringActionBase { return false; } - final XmlTag endTag = PsiTreeUtil.getParentOfType(end, XmlTag.class); + final XmlElement endTag = PsiTreeUtil.getParentOfType(end, XmlTag.class, XmlComment.class); if (endTag == null) { return false; } diff --git a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltRefactoringTest.java b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltRefactoringTest.java index f088ac2cff2d..402cf8ae78ea 100644 --- a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltRefactoringTest.java +++ b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltRefactoringTest.java @@ -49,6 +49,10 @@ public class XsltRefactoringTest extends TestBase { doExtractTemplate(); } + public void testExtractTemplateWithComment() throws Throwable { + doExtractTemplate(); + } + public void testExtractTemplateOneVar() throws Throwable { doExtractTemplate(); } diff --git a/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment.xsl b/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment.xsl new file mode 100644 index 000000000000..57a17767295b --- /dev/null +++ b/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment.xsl @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment_after.xsl b/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment_after.xsl new file mode 100644 index 000000000000..d57287d3eae4 --- /dev/null +++ b/plugins/xpath/xpath-lang/testData/xslt/refactoring/extractTemplateWithComment_after.xsl @@ -0,0 +1,10 @@ + + + + + + + + + +