diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant index 972fdeca469d..66a2888dd6a4 100644 --- a/build/scripts/libLicenses.gant +++ b/build/scripts/libLicenses.gant @@ -187,7 +187,7 @@ libraryLicense(name: "Antlr", libraryName: "antlr.jar", version: "3.1.3", licens libraryLicense(name: "Guava", version: "14.0.1", license: "Apache 2.0", url: "http://code.google.com/p/guava-libraries/", licenseUrl: "http://ant.apache.org/license.html") libraryLicense(name: "Guava", libraryName: "guava-tools", version: "14.0.1", license: "Apache 2.0", url: "http://code.google.com/p/guava-libraries/", licenseUrl: "http://ant.apache.org/license.html") libraryLicense(name: "Groovy", version: "2.2.1", license: "Apache 2.0", url: "http://groovy.codehaus.org/") -libraryLicense(name: "Gson", libraryName: "gson", license: "Apache 2.0", url: "http://code.google.com/p/google-gson/") +libraryLicense(name: "Gson", version: "2.2.4", libraryName: "gson", license: "Apache 2.0", url: "http://code.google.com/p/google-gson/") libraryLicense(name: "ini4j", libraryName: "ini4j-0.5.2-patched", version: "0.5.2 (with a patch by JetBrains)", license: "Apache 2.0", url: "http://ini4j.sourceforge.net/", attachedTo: "git4idea") libraryLicense(name: "ISO RELAX", libraryName: "isorelax.jar", license: "MIT License", url: "http://sourceforge.net/projects/iso-relax/", licenseUrl: "http://www.opensource.org/licenses/mit-license.html") libraryLicense(name: "JavaCVS", attachedTo: "javacvs-src", version: "no version number available (with patches by JetBrains)", license: "Sun Public License", url: "http://javacvs.netbeans.org/library/", licenseUrl: "http://www.netbeans.org/about/legal/spl.html") diff --git a/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java b/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java index ffeaa0536060..e59370e06e0b 100644 --- a/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java +++ b/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java @@ -27,6 +27,8 @@ import com.intellij.navigation.ItemPresentationProviders; import com.intellij.openapi.Disposable; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.fileTypes.PlainTextLanguage; +import com.intellij.openapi.fileTypes.PlainTextParserDefinition; import com.intellij.openapi.projectRoots.JavaVersionService; import com.intellij.openapi.util.ClassExtension; import com.intellij.openapi.util.Disposer; @@ -40,6 +42,7 @@ import com.intellij.psi.impl.compiled.ClsStubBuilderFactory; import com.intellij.psi.impl.compiled.DefaultClsStubBuilderFactory; import com.intellij.psi.impl.file.PsiPackageImplementationHelper; import com.intellij.psi.impl.source.tree.CoreJavaASTFactory; +import com.intellij.psi.impl.source.tree.PlainTextASTFactory; import com.intellij.psi.presentation.java.*; import com.intellij.psi.stubs.BinaryFileStubBuilders; @@ -55,6 +58,9 @@ public class JavaCoreApplicationEnvironment extends CoreApplicationEnvironment { registerFileType(ArchiveFileType.INSTANCE, "jar;zip"); registerFileType(PlainTextFileType.INSTANCE, "txt;sh;bat;cmd;policy;log;cgi;MF;jad;jam;htaccess;rb"); + addExplicitExtension(LanguageASTFactory.INSTANCE, PlainTextLanguage.INSTANCE, new PlainTextASTFactory()); + addExplicitExtension(LanguageParserDefinitions.INSTANCE, PlainTextLanguage.INSTANCE, new PlainTextParserDefinition()); + addExplicitExtension(FileTypeFileViewProviders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileViewProviderFactory()); addExplicitExtension(BinaryFileStubBuilders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileStubBuilder()); diff --git a/platform/lang-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java b/platform/core-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java similarity index 97% rename from platform/lang-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java rename to platform/core-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java index fb5bbfc5b70f..5be539039ecf 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java +++ b/platform/core-impl/src/com/intellij/openapi/fileTypes/PlainTextParserDefinition.java @@ -37,7 +37,7 @@ import com.intellij.psi.util.PsiUtilCore; import org.jetbrains.annotations.NotNull; public class PlainTextParserDefinition implements ParserDefinition { - private static final IFileElementType PLAIN_FILE_ELEMENT_TYPE = new IFileElementType(FileTypes.PLAIN_TEXT.getLanguage()) { + private static final IFileElementType PLAIN_FILE_ELEMENT_TYPE = new IFileElementType(PlainTextFileType.INSTANCE.getLanguage()) { @Override public ASTNode parseContents(ASTNode chameleon) { final CharSequence chars = chameleon.getChars(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/OwnBufferLeafPsiElement.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/OwnBufferLeafPsiElement.java similarity index 100% rename from platform/lang-impl/src/com/intellij/psi/impl/source/tree/OwnBufferLeafPsiElement.java rename to platform/core-impl/src/com/intellij/psi/impl/source/tree/OwnBufferLeafPsiElement.java diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/PlainTextASTFactory.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/PlainTextASTFactory.java similarity index 100% rename from platform/lang-impl/src/com/intellij/psi/impl/source/tree/PlainTextASTFactory.java rename to platform/core-impl/src/com/intellij/psi/impl/source/tree/PlainTextASTFactory.java diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/PsiPlainTextImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/PsiPlainTextImpl.java similarity index 100% rename from platform/lang-impl/src/com/intellij/psi/impl/source/tree/PsiPlainTextImpl.java rename to platform/core-impl/src/com/intellij/psi/impl/source/tree/PsiPlainTextImpl.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java index 9d6426fa02ee..5b29b0413299 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -279,7 +279,7 @@ public class TemplateBuilderImpl implements TemplateBuilder { public void run() { final Project project = myFile.getProject(); VirtualFile file = myFile.getVirtualFile(); - assert file != null: "Virtual file is null for " + file; + assert file != null: "Virtual file is null for " + myFile; OpenFileDescriptor descriptor = new OpenFileDescriptor(project, file); final Editor editor = FileEditorManager.getInstance(project).openTextEditor(descriptor, true); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeIndex.java b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeIndex.java index 3db77867cfa8..43bc2facc8a8 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeIndex.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeIndex.java @@ -26,6 +26,7 @@ import com.intellij.util.containers.FactoryMap; import com.intellij.util.containers.MultiMap; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; +import com.intellij.util.io.IOUtil; import com.intellij.util.io.KeyDescriptor; import org.jetbrains.annotations.NotNull; @@ -129,7 +130,7 @@ public class FileIncludeIndex extends FileBasedIndexExtension= MAX_FILES_TO_PROCESS_OUTSIDE_PROJECT) continue; + + if ((indexableFilesFilter != null && // project files filtering + file instanceof VirtualFileWithId && + !indexableFilesFilter.containsFileId(((VirtualFileWithId)file).getId()) + ) || + filter != null && !filter.accept(file) || + restrictedTo != null && restrictedTo != file + ) { + if (filesProcessedOutsideScope >= MAX_FILES_TO_PROCESS_OUTSIDE_SCOPE) continue; // In order to have myFilesToUpdate empty for avoiding contention on scanning large concurrent set - // we need eventually to process all files in it including the ones that do not belong to any project - // e.g. the files that have vfs built but avoided due to project exclusion: files under .git / user home / etc - ++filesProcessedOutsideProject; - forceProcessFile = true; - } else { - forceProcessFile = Comparing.equal(file, restrictedTo); + // we need eventually to process all files in it including the ones that do not belong to any project or current scope + // e.g. the files that have vfs built but avoided due to project / scope exclusion: workspace.xml / files under .git / user home / etc + ++filesProcessedOutsideScope; } - - if (filter == null || filter.accept(file) || forceProcessFile) { - try { - updateSemaphore.down(); - // process only files that can affect result - processFileImpl(project, new com.intellij.ide.caches.FileContent(file), onlyRemoveOutdatedData); - } - catch (ProcessCanceledException e) { - updateSemaphore.reportUpdateCanceled(); - throw e; - } - finally { - updateSemaphore.up(); - } + + try { + updateSemaphore.down(); + // process only files that can affect result + processFileImpl(project, new com.intellij.ide.caches.FileContent(file), onlyRemoveOutdatedData); } + catch (ProcessCanceledException e) { + updateSemaphore.reportUpdateCanceled(); + throw e; + } + finally { + updateSemaphore.up(); + } } // If several threads entered the method at the same time and there were files to update, diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessPopup.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessPopup.java index cc509138c209..aadf11c0a565 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessPopup.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessPopup.java @@ -129,7 +129,6 @@ public class ProcessPopup { builder.setResizable(true); builder.setTitle(IdeBundle.message("progress.window.title")); builder.setDimensionServiceKey(null, "ProcessPopupWindow", true); - builder.setMinSize(getMinSize()); builder.setCancelOnClickOutside(false); builder.setRequestFocus(requestFocus); builder.setBelongsToGlobalPopupStack(false); @@ -138,15 +137,14 @@ public class ProcessPopup { builder.setCancelButton(new MinimizeButton("Hide")); JFrame frame = (JFrame)UIUtil.findUltimateParent(myProgressPanel); - Dimension contentSize = myRootContent.getPreferredSize(); if (frame != null) { + Dimension contentSize = myRootContent.getPreferredSize(); Rectangle bounds = frame.getBounds(); int width = Math.max(bounds.width / 4, contentSize.width); int height = Math.min(bounds.height / 4, contentSize.height); int x = (int)(bounds.getMaxX() - width); int y = (int)(bounds.getMaxY() - height); - builder.setMinSize(new Dimension(width, height)); myPopup = builder.createPopup(); StatusBarEx sb = (StatusBarEx)((IdeFrame)frame).getStatusBar(); @@ -154,7 +152,6 @@ public class ProcessPopup { y -= sb.getSize().height; } - myPopup.showInScreenCoordinates(myProgressPanel.getRootPane(), new Point(x - 5, y - 5)); } else { myPopup = builder.createPopup(); @@ -191,13 +188,6 @@ public class ProcessPopup { return size; } - private static Dimension getMinSize() { - final Dimension size = ScreenUtil.getMainScreenBounds().getSize(); - size.width *= 0.1d; - size.height *= 0.1d; - return size; - } - public void hide() { if (myPopup != null) { final JBPopup popup = myPopup; diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index 0c7bf390a5e2..0c2d7bec1c1a 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -164,8 +164,6 @@ public class AbstractPopup implements JBPopup { private UiActivity myActivityKey; private Disposable myProjectDisposable; - - AbstractPopup() { } @@ -700,17 +698,9 @@ public class AbstractPopup implements JBPopup { sizeToSet = myForcedSize; } - if (myMinSize == null) { - myMinSize = myContent.getMinimumSize(); - } - - if (sizeToSet == null) { - sizeToSet = myContent.getPreferredSize(); - } - if (sizeToSet != null) { - sizeToSet.width = Math.max(sizeToSet.width, myMinSize.width); - sizeToSet.height = Math.max(sizeToSet.height, myMinSize.height); + sizeToSet.width = Math.max(sizeToSet.width, myContent.getMinimumSize().width); + sizeToSet.height = Math.max(sizeToSet.height, myContent.getMinimumSize().height); myContent.setSize(sizeToSet); myContent.setPreferredSize(sizeToSet); @@ -838,6 +828,7 @@ public class AbstractPopup implements JBPopup { } } + setMinimumSize(myMinSize); final Runnable afterShow = new Runnable() { @Override @@ -1656,7 +1647,16 @@ public class AbstractPopup implements JBPopup { @Override public void setMinimumSize(Dimension size) { - myMinSize = size; + if (size == null) { + myMinSize = myHeaderPanel.getPreferredSize(); + } else { + myMinSize.setSize(Math.min(size.width, myHeaderPanel.getPreferredSize().width), + Math.min(size.height, myHeaderPanel.getPreferredSize().height)); + } + + if (myWindow != null) { + myWindow.setMinimumSize(myMinSize); + } } public Runnable getFinalRunnable() { diff --git a/platform/platform-resources/src/brokenPlugins.txt b/platform/platform-resources/src/brokenPlugins.txt index c31f13045d75..9116bbd62b98 100644 --- a/platform/platform-resources/src/brokenPlugins.txt +++ b/platform/platform-resources/src/brokenPlugins.txt @@ -3,8 +3,9 @@ // If plugin name or version contains a space you can quote it like in command line. NodeJS 134.680 134.31 134.307 134.262 134.198 134.125 -com.jetbrains.php 133.51 133.326 131.98 131.374 131.332 131.235 131.205 130.1639 130.1481 130.1176 129.91 129.814 129.672 129.362 127.67 127.100 126.334 123.66 122.875 121.62 121.390 121.215 121.12 +com.jetbrains.php 133.679 133.51 133.326 131.98 131.374 131.332 131.235 131.205 130.1639 130.1481 130.1176 129.91 129.814 129.672 129.362 127.67 127.100 126.334 123.66 122.875 121.62 121.390 121.215 121.12 com.jetbrains.lang.ejs 131.17 131.12 com.jetbrains.twig 133.51 130.1639 Karma 134.686 134.31 +org.intellij.scala 0.32.512 org.jetbrains.kannotator 0.2.420 diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index 159cf16beb4f..9dd97fa42ddb 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -1037,7 +1037,7 @@ non.synchronized.method.overrides.synchronized.method.problem.descriptor=Unsynch public.field.accessed.in.synchronized.context.problem.descriptor=Non-private field #ref accessed in synchronized context #loc field.accessed.synchronized.and.unsynchronized.problem.descriptor=Field #ref is accessed in both synchronized and unsynchronized contexts #loc extended.for.statement.problem.descriptor=Extended #ref statement #loc -object.allocation.in.loop.problem.descriptor=Object allocation #ref in loop #loc +object.allocation.in.loop.problem.descriptor=Object allocation new #ref() in loop #loc instantiating.object.to.get.class.object.problem.descriptor=Instantiating object to get Class object #loc field.may.be.static.problem.descriptor=Field #ref may be 'static' #loc method.may.be.static.problem.descriptor=Method #ref() may be 'static' #loc @@ -1045,15 +1045,15 @@ class.initializer.may.be.static.problem.descriptor=Class initializer may be 'sta map.replaceable.by.enum.map.problem.descriptor=#ref replaceable with 'EnumMap' #loc set.replaceable.by.enum.set.problem.descriptor=#ref replaceable with 'EnumSet' #loc inner.class.may.be.static.problem.descriptor=Inner class #ref may be 'static' #loc -string.buffer.must.have.initial.capacity.problem.descriptor=#ref without initial capacity #loc +string.buffer.must.have.initial.capacity.problem.descriptor=new #ref() without initial capacity #loc string.buffer.replaceable.by.string.builder.problem.descriptor=StringBuffer #ref may be declared as 'StringBuilder' #loc string.buffer.replaceable.by.string.problem.descriptor={0} #ref can be replaced with ''String'' #loc new.string.buffer.replaceable.by.string.problem.descriptor=#ref can be replaced with 'String' #loc string.replaceable.by.string.buffer.problem.descriptor=Non-constant String #ref should probably be declared as ''StringBuilder'' #loc -collections.must.have.initial.capacity.problem.descriptor=#ref without initial capacity #loc +collections.must.have.initial.capacity.problem.descriptor=new #ref() without initial capacity #loc string.concatenation.in.loops.problem.descriptor=String concatenation #ref in loop #loc string.concatenation.inside.string.buffer.append.problem.descriptor=String concatenation as argument to {0}.#ref() call #loc -boolean.constructor.problem.descriptor=Boolean constructor call #ref #loc +boolean.constructor.problem.descriptor=Boolean constructor call #loc string.to.string.problem.descriptor=#ref is redundant #loc substring.zero.problem.descriptor=#ref is redundant #loc string.buffer.to.string.in.concatenation.problem.descriptor=Calls to StringBuffer.#ref() in concatenation #loc diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/BooleanConstructorInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/BooleanConstructorInspection.java index eeb5e4751f9b..1a560a01b1db 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/BooleanConstructorInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/BooleanConstructorInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -173,7 +173,7 @@ public class BooleanConstructorInspection extends BaseInspection { if (expressions.length != 1) { return; } - registerError(expression); + registerNewExpressionError(expression); } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ObjectAllocationInLoopInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ObjectAllocationInLoopInspection.java index 15919d42b791..e0024e078d04 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ObjectAllocationInLoopInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ObjectAllocationInLoopInspection.java @@ -71,7 +71,7 @@ public class ObjectAllocationInLoopInspection extends BaseInspection { if (isAllocatedOnlyOnce(expression)) { return; } - registerError(expression); + registerNewExpressionError(expression); } private static boolean isAllocatedOnlyOnce( diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspection.java index 554b2f33b42e..ebc8c448f1fd 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -72,7 +72,7 @@ public class StringBufferMustHaveInitialCapacityInspection if (args.length != 0) { return; } - registerError(expression); + registerNewExpressionError(expression); } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/CollectionsMustHaveInitialCapacityInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/CollectionsMustHaveInitialCapacityInspection.java deleted file mode 100644 index 56e19ae5e399..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/CollectionsMustHaveInitialCapacityInspection.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.siyeh.igtest.performance; - -import java.io.IOException; -import java.util.*; - -public class CollectionsMustHaveInitialCapacityInspection -{ - public CollectionsMustHaveInitialCapacityInspection() - { - } - - public void foo() throws IOException - { - // new HashMap(); - // new HashMap(3); - - new HashMap(); - new HashMap(3); - - new WeakHashMap(); - new WeakHashMap(3); - - new HashSet(); - new HashSet(3); - - new Hashtable(); - new Hashtable(3); - - new BitSet(); - new BitSet(3); - - new Vector(); - new Vector(3); - - new ArrayList(); - new ArrayList(3); - - - } -} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/StringBufferMustHaveInitialCapacityInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/StringBufferMustHaveInitialCapacityInspection.java deleted file mode 100644 index 7fe4ae3ae367..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/StringBufferMustHaveInitialCapacityInspection.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.siyeh.igtest.performance; - -import java.io.IOException; - -public class StringBufferMustHaveInitialCapacityInspection -{ - public StringBufferMustHaveInitialCapacityInspection() - { - } - - public void foo() throws IOException - { - new StringBuffer(); - new StringBuffer(3); - new StringBuffer("foo"); - new StringBuilder(); - new StringBuilder(3); - new StringBuilder("foo"); - - } -} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/boolean_constructor/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/boolean_constructor/expected.xml index d7cc45f68716..f7bc79d46bc1 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/boolean_constructor/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/boolean_constructor/expected.xml @@ -4,14 +4,14 @@ BooleanConstructor.java 7 Boolean constructor call - Boolean constructor call <code>new Boolean(b)</code> #loc + Boolean constructor call #loc BooleanConstructor.java 8 Boolean constructor call - Boolean constructor call <code>new Boolean(true)</code> #loc + Boolean constructor call #loc \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_allocation_in_loop/ObjectAllocationInLoop.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_allocation_in_loop/ObjectAllocationInLoop.java new file mode 100644 index 000000000000..58581dfe2e3a --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_allocation_in_loop/ObjectAllocationInLoop.java @@ -0,0 +1,10 @@ +package com.siyeh.igtest.performance.object_allocation_in_loop; + +class ObjectAllocationInLoop { + + void m() { + while (true) { + new Object(); + } + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_buffer_must_have_initial_capacity/StringBufferMustHaveInitialCapacity.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_buffer_must_have_initial_capacity/StringBufferMustHaveInitialCapacity.java new file mode 100644 index 000000000000..ad367250dba4 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/string_buffer_must_have_initial_capacity/StringBufferMustHaveInitialCapacity.java @@ -0,0 +1,13 @@ +package com.siyeh.igtest.performance.string_buffer_must_have_initial_capacity; + +class StringBufferMustHaveInitialCapacity { + + void m() { + new StringBuffer(); + new StringBuffer(3); + new StringBuffer("foo"); + new StringBuilder(); + new StringBuilder(3); + new StringBuilder("foo"); } + +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspectionTest.java index 256456a1e785..20460ad73040 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspectionTest.java @@ -31,11 +31,55 @@ public class CollectionsMustHaveInitialCapacityInspectionTest extends LightInspe protected String[] getEnvironmentClasses() { return new String[] { "package java.util.concurrent;" + - "public class ConcurrentHashMap {}" + "public class ConcurrentHashMap {}", + "package java.util;" + + "public class WeakHashMap {" + + " public WeakHashMap() {}" + + " public WeakHashMap(int c) {}" + + "}", + "package java.util;" + + "public class HashSet {" + + " public HashSet() {}" + + " public HashSet(int c) {}" + + "}", + "package java.util;" + + "public class BitSet {" + + " public BitSet() {}" + + " public BitSet(int c) {}" + + "}", + "package java.util;" + + "public class Vector {" + + " public Vector() {}" + + " public Vector(int c) {}" + + "}" }; } public void testSimple() { - doStatementTest("new /*'java.util.concurrent.ConcurrentHashMap' without initial capacity*/java.util.concurrent.ConcurrentHashMap/**/();"); + doStatementTest("new /*'new java.util.concurrent.ConcurrentHashMap()' without initial capacity*/java.util.concurrent.ConcurrentHashMap/**/();"); + } + + public void testMore() { + doTest("import java.util.*;" + + "class X {" + + " void m() {" + + " new /*'new HashMap()' without initial capacity*/HashMap/**/();" + + " new HashMap(3);" + + " new /*'new HashMap()' without initial capacity*/HashMap/**/();" + + " new HashMap(3);" + + " new /*'new WeakHashMap()' without initial capacity*/WeakHashMap/**/();" + + " new WeakHashMap(3);" + + " new /*'new HashSet()' without initial capacity*/HashSet/**/();" + + " new HashSet(3);" + + " new /*'new Hashtable()' without initial capacity*/Hashtable/**/();" + + " new Hashtable(3);" + + " new /*'new BitSet()' without initial capacity*/BitSet/**/();" + + " new BitSet(3);" + + " new /*'new Vector()' without initial capacity*/Vector/**/();" + + " new Vector(3);" + + " new /*'new ArrayList()' without initial capacity*/ArrayList/**/();" + + " new ArrayList(3);" + + " }" + + "}"); } } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectAllocationInLoopInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectAllocationInLoopInspectionTest.java new file mode 100644 index 000000000000..0fcd297f6771 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectAllocationInLoopInspectionTest.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.performance; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; + +/** + * @author Bas Leijdekkers + */ +public class ObjectAllocationInLoopInspectionTest extends LightInspectionTestCase { + @Override + protected InspectionProfileEntry getInspection() { + return new ObjectAllocationInLoopInspection(); + } + + public void testObjectAllocationInLoop() { doTest(); } +} diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspectionTest.java new file mode 100644 index 000000000000..54c148866eed --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferMustHaveInitialCapacityInspectionTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.performance; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; + +/** + * @author Bas Leijdekkers + */ +public class StringBufferMustHaveInitialCapacityInspectionTest extends LightInspectionTestCase { + + @Override + protected InspectionProfileEntry getInspection() { + return new StringBufferMustHaveInitialCapacityInspection(); + } + + public void testStringBufferMustHaveInitialCapacity() { doTest(); } +} diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/integrations/javaee/JavaEEGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/integrations/javaee/JavaEEGradleProjectResolverExtension.java index ba83d93658cc..805c8ff08d21 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/integrations/javaee/JavaEEGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/integrations/javaee/JavaEEGradleProjectResolverExtension.java @@ -20,14 +20,17 @@ import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.project.ModuleData; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.externalSystem.util.Order; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import org.gradle.tooling.model.idea.IdeaModule; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.gradle.model.WarModel; -import org.jetbrains.plugins.gradle.model.data.WarModelData; +import org.jetbrains.plugins.gradle.model.WebConfiguration; +import org.jetbrains.plugins.gradle.model.data.WebConfigurationModelData; import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension; import org.jetbrains.plugins.gradle.util.GradleConstants; import java.util.Collections; +import java.util.List; import java.util.Set; /** @@ -42,14 +45,22 @@ public class JavaEEGradleProjectResolverExtension extends AbstractProjectResolve @Override public void populateModuleExtraModels(@NotNull IdeaModule gradleModule, @NotNull DataNode ideModule) { - WarModel warModel = resolverCtx.getExtraProject(gradleModule, WarModel.class); - if (warModel != null) { - WarModelData warModelData = new WarModelData(GradleConstants.SYSTEM_ID, warModel.getWebAppDirName(), warModel.getWebAppDir()); - warModelData.setWebXml(warModel.getWebXml()); - warModelData.setWebRoots(warModel.getWebRoots()); - warModelData.setClasspath(warModel.getClasspath()); - warModelData.setManifestContent(warModel.getManifestContent()); - ideModule.createChild(WarModelData.KEY, warModelData); + final WebConfiguration webConfiguration = resolverCtx.getExtraProject(gradleModule, WebConfiguration.class); + if (webConfiguration != null) { + List warModels = + ContainerUtil.map(webConfiguration.getWarModels(), new Function() { + @Override + public WebConfigurationModelData.War fun(WebConfiguration.WarModel model) { + WebConfigurationModelData.War war = new WebConfigurationModelData.War(model.getWarName(), model.getWebAppDirName(), model.getWebAppDir()); + war.setWebXml(model.getWebXml()); + war.setWebRoots(model.getWebRoots()); + war.setClasspath(model.getClasspath()); + war.setManifestContent(model.getManifestContent()); + return war; + } + }); + + ideModule.createChild(WebConfigurationModelData.KEY, new WebConfigurationModelData(GradleConstants.SYSTEM_ID, warModels)); } nextResolver.populateModuleExtraModels(gradleModule, ideModule); @@ -58,6 +69,6 @@ public class JavaEEGradleProjectResolverExtension extends AbstractProjectResolve @NotNull @Override public Set getExtraProjectModelClasses() { - return Collections.singleton(WarModel.class); + return Collections.singleton(WebConfiguration.class); } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WarModelData.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WarModelData.java deleted file mode 100644 index f22ab8fbc821..000000000000 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WarModelData.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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 org.jetbrains.plugins.gradle.model.data; - -import com.intellij.openapi.externalSystem.model.Key; -import com.intellij.openapi.externalSystem.model.ProjectKeys; -import com.intellij.openapi.externalSystem.model.ProjectSystemId; -import com.intellij.openapi.externalSystem.model.project.AbstractExternalEntityData; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -/** - * @author Vladislav.Soroka - * @since 11/6/13 - */ -public class WarModelData extends AbstractExternalEntityData { - private static final long serialVersionUID = 1L; - - @NotNull - public static final Key KEY = Key.create(WarModelData.class, ProjectKeys.LIBRARY_DEPENDENCY.getProcessingWeight() + 1); - @NotNull - private final String myWebAppDirName; - @NotNull - private final File myWebAppDir; - @Nullable - private File myWebXml; - @NotNull - private Map> myWebRoots; - @NotNull - private Set myClasspath; - @Nullable - private String myManifestContent; - - - public WarModelData(@NotNull ProjectSystemId owner, @NotNull String webAppDirName, @NotNull File webAppDir) { - super(owner); - myWebAppDirName = webAppDirName; - myWebAppDir = webAppDir; - myWebRoots = Collections.emptyMap(); - myClasspath = Collections.emptySet(); - } - - @NotNull - public String getWebAppDirName() { - return myWebAppDirName; - } - - @NotNull - public File getWebAppDir() { - return myWebAppDir; - } - - public void setWebXml(@Nullable File webXml) { - myWebXml = webXml; - } - - @Nullable - public File getWebXml() { - return myWebXml; - } - - public void setWebRoots(@Nullable Map> webRoots) { - myWebRoots = webRoots == null ? Collections.>emptyMap() : webRoots; - } - - @NotNull - public Map> getWebRoots() { - return myWebRoots; - } - - public void setClasspath(@Nullable Set classpath) { - myClasspath = classpath == null ? Collections.emptySet() : classpath; - } - - @NotNull - public Set getClasspath() { - return myClasspath; - } - - public void setManifestContent(@Nullable String manifestContent) { - myManifestContent = manifestContent; - } - - @Nullable - public String getManifestContent() { - return myManifestContent; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - - WarModelData that = (WarModelData)o; - - if (!myWebAppDirName.equals(that.myWebAppDirName)) return false; - if (!myWebRoots.equals(that.myWebRoots)) return false; - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + myWebAppDirName.hashCode(); - result = 31 * result + myWebRoots.hashCode(); - return result; - } - - @Override - public String toString() { - return "WarModelData{" + - "myWebAppDirName='" + myWebAppDirName + '\'' + - ", myWebAppDir=" + myWebAppDir + - ", myWebXml=" + myWebXml + - ", myWebRoots=" + myWebRoots + - '}'; - } -} diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WebConfigurationModelData.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WebConfigurationModelData.java new file mode 100644 index 000000000000..92097ab79d7a --- /dev/null +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/model/data/WebConfigurationModelData.java @@ -0,0 +1,194 @@ +/* + * 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 org.jetbrains.plugins.gradle.model.data; + +import com.intellij.openapi.externalSystem.model.Key; +import com.intellij.openapi.externalSystem.model.ProjectKeys; +import com.intellij.openapi.externalSystem.model.ProjectSystemId; +import com.intellij.openapi.externalSystem.model.project.AbstractExternalEntityData; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author Vladislav.Soroka + * @since 11/6/13 + */ +public class WebConfigurationModelData extends AbstractExternalEntityData { + private static final long serialVersionUID = 1L; + + @NotNull + public static final Key KEY = Key.create(WebConfigurationModelData.class, ProjectKeys.LIBRARY_DEPENDENCY.getProcessingWeight() + 1); + + @NotNull + private final List myWars; + + public WebConfigurationModelData(@NotNull ProjectSystemId owner, @NotNull List warModels) { + super(owner); + myWars = warModels; + } + + @NotNull + public List getWars() { + return myWars; + } + + public static class War { + + @NotNull + private final String myName; + + @NotNull + private final String myWebAppDirName; + @NotNull + private final File myWebAppDir; + @Nullable + private File myWebXml; + @NotNull + private Map> myWebRoots; + @NotNull + private Set myClasspath; + @Nullable + private String myManifestContent; + + + public War(@NotNull String name, @NotNull String webAppDirName, @NotNull File webAppDir) { + myName = name; + myWebAppDirName = webAppDirName; + myWebAppDir = webAppDir; + myWebRoots = Collections.emptyMap(); + myClasspath = Collections.emptySet(); + } + + @NotNull + public String getName() { + return myName; + } + + @NotNull + public String getWebAppDirName() { + return myWebAppDirName; + } + + @NotNull + public File getWebAppDir() { + return myWebAppDir; + } + + public void setWebXml(@Nullable File webXml) { + myWebXml = webXml; + } + + @Nullable + public File getWebXml() { + return myWebXml; + } + + public void setWebRoots(@Nullable Map> webRoots) { + myWebRoots = webRoots == null ? Collections.>emptyMap() : webRoots; + } + + @NotNull + public Map> getWebRoots() { + return myWebRoots; + } + + public void setClasspath(@Nullable Set classpath) { + myClasspath = classpath == null ? Collections.emptySet() : classpath; + } + + @NotNull + public Set getClasspath() { + return myClasspath; + } + + public void setManifestContent(@Nullable String manifestContent) { + myManifestContent = manifestContent; + } + + @Nullable + public String getManifestContent() { + return myManifestContent; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + + War that = (War)o; + + if (!myName.equals(that.myName)) return false; + if (!myWebAppDirName.equals(that.myWebAppDirName)) return false; + if (!myWebRoots.equals(that.myWebRoots)) return false; + + return true; + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + myName.hashCode(); + result = 31 * result + myWebAppDirName.hashCode(); + result = 31 * result + myWebRoots.hashCode(); + return result; + } + + @Override + public String toString() { + return "War{" + + "myName='" + myName + '\'' + + ", myWebAppDirName='" + myWebAppDirName + '\'' + + ", myWebAppDir=" + myWebAppDir + + ", myWebXml=" + myWebXml + + ", myWebRoots=" + myWebRoots + + '}'; + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof WebConfigurationModelData)) return false; + if (!super.equals(o)) return false; + + WebConfigurationModelData data = (WebConfigurationModelData)o; + + if (!myWars.equals(data.myWars)) return false; + + return true; + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + myWars.hashCode(); + return result; + } + + @Override + public String toString() { + return "WebConfigurationModelData{" + + "myWars=" + myWars + + '}'; + } +} diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java index a579699b8887..f0fc48bebe70 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java @@ -122,8 +122,11 @@ public class GradleTaskManager extends AbstractExternalSystemTaskManager steps = myWizard.getSequence().getSelectedSteps(); - assertEquals(4, steps.size()); + assertEquals(3, steps.size()); } } }); diff --git a/plugins/gradle/tooling-extension-v1.9/src/org/jetbrains/plugins/gradle/tooling/v1_9/builder/WarModelBuilderImpl.java b/plugins/gradle/tooling-extension-v1.9/src/org/jetbrains/plugins/gradle/tooling/v1_9/builder/WarModelBuilderImpl.java index dfac5c354543..a0558e6a164f 100644 --- a/plugins/gradle/tooling-extension-v1.9/src/org/jetbrains/plugins/gradle/tooling/v1_9/builder/WarModelBuilderImpl.java +++ b/plugins/gradle/tooling-extension-v1.9/src/org/jetbrains/plugins/gradle/tooling/v1_9/builder/WarModelBuilderImpl.java @@ -25,16 +25,13 @@ import org.gradle.api.java.archives.Manifest; import org.gradle.api.plugins.WarPlugin; import org.gradle.api.tasks.bundling.War; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.gradle.model.WebConfiguration; import org.jetbrains.plugins.gradle.tooling.ModelBuilderService; -import org.jetbrains.plugins.gradle.model.WarModel; -import org.jetbrains.plugins.gradle.tooling.internal.WarModelImpl; +import org.jetbrains.plugins.gradle.tooling.internal.WebConfigurationImpl; import java.io.File; import java.io.StringWriter; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author Vladislav.Soroka @@ -47,7 +44,7 @@ public class WarModelBuilderImpl implements ModelBuilderService { @Override public boolean canBuild(String modelName) { - return WarModel.class.getName().equals(modelName); + return WebConfiguration.class.getName().equals(modelName); } @Nullable @@ -63,10 +60,14 @@ public class WarModelBuilderImpl implements ModelBuilderService { ? new File(project.getProjectDir(), webAppDirName) : (File)project.property(WEB_APP_DIR_PROPERTY); - WarModelImpl warModel = new WarModelImpl(webAppDirName, webAppDir); + + List warModels = new ArrayList(); + for (Task task : project.getTasks()) { if (task instanceof War) { + final WebConfigurationImpl.WarModelImpl warModel = new WebConfigurationImpl.WarModelImpl(((War)task).getArchiveName(), webAppDirName, webAppDir); + final War warTask = (War)task; warModel.setWebXml(warTask.getWebXml()); @@ -111,11 +112,11 @@ public class WarModelBuilderImpl implements ModelBuilderService { manifest.writeTo(writer); warModel.setManifestContent(writer.toString()); } - break; + warModels.add(warModel); } } - return warModel; + return new WebConfigurationImpl(warModels); } private static void addPath(Map> webRoots, String relativePath, String path) { diff --git a/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WarModel.java b/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WebConfiguration.java similarity index 62% rename from plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WarModel.java rename to plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WebConfiguration.java index 48636ddbc3cf..6ae82dbb039d 100644 --- a/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WarModel.java +++ b/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/model/WebConfiguration.java @@ -15,8 +15,12 @@ */ package org.jetbrains.plugins.gradle.model; +import org.gradle.tooling.model.DomainObjectSet; +import org.jetbrains.annotations.NotNull; + import java.io.File; import java.io.Serializable; +import java.util.List; import java.util.Map; import java.util.Set; @@ -24,16 +28,24 @@ import java.util.Set; * @author Vladislav.Soroka * @since 11/5/13 */ -public interface WarModel extends Serializable { - String getWebAppDirName(); +public interface WebConfiguration extends Serializable { - File getWebAppDir(); + List getWarModels(); - File getWebXml(); + interface WarModel extends Serializable { + @NotNull + String getWarName(); - Map> getWebRoots(); + String getWebAppDirName(); - Set getClasspath(); + File getWebAppDir(); - String getManifestContent(); + File getWebXml(); + + Map> getWebRoots(); + + Set getClasspath(); + + String getManifestContent(); + } } diff --git a/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WarModelImpl.java b/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WarModelImpl.java deleted file mode 100644 index b35e4be6231f..000000000000 --- a/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WarModelImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.gradle.tooling.internal; - -import org.jetbrains.plugins.gradle.model.WarModel; - -import java.io.File; -import java.util.Map; -import java.util.Set; - -/** - * @author Vladislav.Soroka - * @since 11/5/13 - */ -public class WarModelImpl implements WarModel { - private final String myWebAppDirName; - private final File myWebAppDir; - private File myWebXml; - private Map> myWebRoots; - private Set myClasspath; - private String myManifestContent; - - public WarModelImpl(String webAppDirName, File webAppDir) { - myWebAppDirName = webAppDirName; - myWebAppDir = webAppDir; - } - - @Override - public String getWebAppDirName() { - return myWebAppDirName; - } - - @Override - public File getWebAppDir() { - return myWebAppDir; - } - - public void setWebXml(File webXml) { - myWebXml = webXml; - } - - @Override - public File getWebXml() { - return myWebXml; - } - - @Override - public Map> getWebRoots() { - return myWebRoots; - } - - public void setWebRoots(Map> webRoots) { - myWebRoots = webRoots; - } - - public void setClasspath(Set classpath) { - myClasspath = classpath; - } - - @Override - public Set getClasspath() { - return myClasspath; - } - - public void setManifestContent(String manifestContent) { - myManifestContent = manifestContent; - } - - @Override - public String getManifestContent() { - return myManifestContent; - } -} diff --git a/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WebConfigurationImpl.java b/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WebConfigurationImpl.java new file mode 100644 index 000000000000..1384c530152b --- /dev/null +++ b/plugins/gradle/tooling-extension/src/org/jetbrains/plugins/gradle/tooling/internal/WebConfigurationImpl.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.gradle.tooling.internal; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.gradle.model.WebConfiguration; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author Vladislav.Soroka + * @since 11/5/13 + */ +public class WebConfigurationImpl implements WebConfiguration { + + @NotNull + private final List myWarModels; + + public WebConfigurationImpl(@NotNull List warModels) { + myWarModels = warModels; + } + + @Override + public List getWarModels() { + return myWarModels; + } + + public static class WarModelImpl implements WarModel { + @NotNull + private final String warName; + private final String myWebAppDirName; + private final File myWebAppDir; + private File myWebXml; + private Map> myWebRoots; + private Set myClasspath; + private String myManifestContent; + + public WarModelImpl(@NotNull String name, String webAppDirName, File webAppDir) { + warName = name; + myWebAppDirName = webAppDirName; + myWebAppDir = webAppDir; + } + + @NotNull + @Override + public String getWarName() { + return warName; + } + + @Override + public String getWebAppDirName() { + return myWebAppDirName; + } + + @Override + public File getWebAppDir() { + return myWebAppDir; + } + + public void setWebXml(File webXml) { + myWebXml = webXml; + } + + @Override + public File getWebXml() { + return myWebXml; + } + + @Override + public Map> getWebRoots() { + return myWebRoots; + } + + public void setWebRoots(Map> webRoots) { + myWebRoots = webRoots; + } + + public void setClasspath(Set classpath) { + myClasspath = classpath; + } + + @Override + public Set getClasspath() { + return myClasspath; + } + + public void setManifestContent(String manifestContent) { + myManifestContent = manifestContent; + } + + @Override + public String getManifestContent() { + return myManifestContent; + } + } +} diff --git a/plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WarModelBuilderImplTest.java b/plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WebConfigurationBuilderImplTest.java similarity index 65% rename from plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WarModelBuilderImplTest.java rename to plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WebConfigurationBuilderImplTest.java index 72f45c7f9d63..55e6280b06fb 100644 --- a/plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WarModelBuilderImplTest.java +++ b/plugins/gradle/tooling-extension/testSources/org/jetbrains/plugins/gradle/tooling/builder/WebConfigurationBuilderImplTest.java @@ -20,7 +20,7 @@ import com.intellij.util.containers.ContainerUtil; import org.gradle.tooling.model.DomainObjectSet; import org.gradle.tooling.model.idea.IdeaModule; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.gradle.model.WarModel; +import org.jetbrains.plugins.gradle.model.WebConfiguration; import org.junit.Test; import java.util.List; @@ -32,9 +32,9 @@ import static org.junit.Assert.assertEquals; * @author Vladislav.Soroka * @since 11/29/13 */ -public class WarModelBuilderImplTest extends AbstractModelBuilderTest { +public class WebConfigurationBuilderImplTest extends AbstractModelBuilderTest { - public WarModelBuilderImplTest(@NotNull String gradleVersion) { + public WebConfigurationBuilderImplTest(@NotNull String gradleVersion) { super(gradleVersion); } @@ -42,21 +42,23 @@ public class WarModelBuilderImplTest extends AbstractModelBuilderTest { public void testDefaultWarModel() throws Exception { DomainObjectSet ideaModules = allModels.getIdeaProject().getModules(); - List ideaModule = ContainerUtil.mapNotNull(ideaModules, new Function() { + List ideaModule = ContainerUtil.mapNotNull(ideaModules, new Function() { @Override - public WarModel fun(IdeaModule module) { - return allModels.getExtraProject(module, WarModel.class); + public WebConfiguration fun(IdeaModule module) { + return allModels.getExtraProject(module, WebConfiguration.class); } }); assertEquals(1, ideaModule.size()); - WarModel warModel = ideaModule.get(0); + WebConfiguration webConfiguration = ideaModule.get(0); + assertEquals(1, webConfiguration.getWarModels().size()); + final WebConfiguration.WarModel warModel = webConfiguration.getWarModels().iterator().next(); assertEquals("src/main/webapp", warModel.getWebAppDirName()); } @Override protected Set getModels() { - return ContainerUtil.set(WarModel.class); + return ContainerUtil.set(WebConfiguration.class); } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/util/HgEncodingUtil.java b/plugins/hg4idea/src/org/zmlx/hg4idea/util/HgEncodingUtil.java index af7d0c278c62..5afd00802594 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/util/HgEncodingUtil.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/util/HgEncodingUtil.java @@ -18,13 +18,11 @@ public class HgEncodingUtil { if (HGENCODING != null && HGENCODING.length() > 0 && Charset.isSupported(HGENCODING)) { return Charset.forName(HGENCODING); } - else { - Charset defaultCharset = EncodingProjectManager.getInstance(project).getDefaultCharset(); - if (defaultCharset != null) { - return defaultCharset; - } + Charset defaultCharset = null; + if (!project.isDisposed()) { + defaultCharset = EncodingProjectManager.getInstance(project).getDefaultCharset(); } - return Charset.defaultCharset(); + return defaultCharset != null ? defaultCharset : Charset.defaultCharset(); } @NotNull diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java index ed52f6a43891..6df92c450a75 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java @@ -61,7 +61,10 @@ public class MavenProject { .put("5", "1.5") .put("1.6", "1.6") .put("1.7", "1.7") - .put("7", "1.7").build(); + .put("7", "1.7") + .put("1.8", "1.8") + .put("8", "1.8") + .build(); public enum ProcMode {BOTH, ONLY, NONE} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java index 5f5aa45ad5a3..5777e246f858 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java @@ -514,6 +514,7 @@ public class MavenServerManager extends RemoteObjectWrapper impleme final Element element = new Element("maven-version"); element.setAttribute("version", useMaven2 ? "2.x" : "3.x"); element.setAttribute("vmOptions", mavenEmbedderVMOptions); + element.setAttribute("embedderJdk", embedderJdk); return element; } @@ -524,6 +525,9 @@ public class MavenServerManager extends RemoteObjectWrapper impleme String vmOptions = state.getAttributeValue("vmOptions"); mavenEmbedderVMOptions = vmOptions == null ? DEFAULT_VM_OPTIONS : vmOptions; + + String embedderJdk = state.getAttributeValue("embedderJdk"); + this.embedderJdk = embedderJdk == null ? MavenRunnerSettings.USE_INTERNAL_JAVA : embedderJdk; } private static class RemoteMavenServerLogger extends MavenRemoteObject implements MavenServerLogger { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenExtensionCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenExtensionCompletionAndResolutionTest.java index 17f4591a57b2..8b3d41edeb6e 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenExtensionCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenExtensionCompletionAndResolutionTest.java @@ -54,7 +54,7 @@ public class MavenExtensionCompletionAndResolutionTest extends MavenDomWithIndic " " + ""); - assertCompletionVariants(myProjectPom, "test", "org.apache.maven.plugins", "org.codehaus.mojo"); + assertCompletionVariants(myProjectPom, "org.codehaus.plexus", "test", "org.apache.maven.plugins", "org.codehaus.mojo", "intellij.test"); } public void testArtifactIdCompletion() throws Exception { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPluginCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPluginCompletionAndResolutionTest.java index 11c3fce704d3..827f5acda464 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPluginCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPluginCompletionAndResolutionTest.java @@ -43,7 +43,7 @@ public class MavenPluginCompletionAndResolutionTest extends MavenDomWithIndicesT "1"); } - @Bombed(year = 2013, month = Calendar.APRIL, day = 25, user = "sergey.evdokimov") + @Bombed(year = 2014, month = Calendar.APRIL, day = 25, user = "sergey.evdokimov") public void testGroupIdCompletion() throws Exception { createProjectPom("test" + "project" + @@ -57,7 +57,7 @@ public class MavenPluginCompletionAndResolutionTest extends MavenDomWithIndicesT " " + ""); - assertCompletionVariants(myProjectPom, "test", "org.apache.maven.plugins", "org.codehaus.mojo"); + assertCompletionVariants(myProjectPom, "org.codehaus.plexus", "intellij.test", "test", "org.apache.maven.plugins", "org.codehaus.mojo"); } @Bombed(year = 2013, month = Calendar.APRIL, day = 25, user = "sergey.evdokimov") diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java index b067df9d56f9..0d99e3924207 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.maven.importing; import com.intellij.ProjectTopics; +import com.intellij.idea.Bombed; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -29,6 +30,7 @@ import org.jetbrains.idea.maven.server.MavenServerManager; import org.jetbrains.idea.maven.server.MavenServerManagerHelper; import java.io.File; +import java.util.Calendar; import java.util.List; public class MiscImportingTest extends MavenImportingTestCase { @@ -275,6 +277,7 @@ public class MiscImportingTest extends MavenImportingTestCase { assertEquals(0, myProjectsTree.getRootProjects().get(0).getProblems().size()); } + @Bombed(year = 2014, month = Calendar.JUNE, day = 25, user = "sergey.evdokimov") public void testMavenExtensionsAreLoadedAndAfterProjectsReadIsCalled() throws Exception { MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "plugins"); setRepositoryPath(helper.getTestDataPath("plugins")); @@ -303,6 +306,7 @@ public class MiscImportingTest extends MavenImportingTestCase { assertEquals(myProjectPom.getPath().replace('\\', '/'), mavenProject.getProperties().getProperty("workspace-info")); } + @Bombed(year = 2014, month = Calendar.JUNE, day = 25, user = "sergey.evdokimov") public void testExceptionsFromMavenExtensionsAreReportedAsProblems() throws Exception { MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "plugins"); setRepositoryPath(helper.getTestDataPath("plugins")); @@ -326,7 +330,7 @@ public class MiscImportingTest extends MavenImportingTestCase { List projects = myProjectsTree.getProjects(); assertEquals(1, projects.size()); MavenProject mavenProject = projects.get(0); - assertEquals(1, mavenProject.getProblems().size()); + assertEquals(mavenProject.getProblems().toString(), 1, mavenProject.getProblems().size()); assertEquals("throw!", mavenProject.getProblems().get(0).getDescription()); } diff --git a/python/build/resources/logo.bmp b/python/build/resources/logo.bmp index 19188f3dd3e6..0f0f82da7b1e 100644 Binary files a/python/build/resources/logo.bmp and b/python/build/resources/logo.bmp differ diff --git a/python/pluginResources/META-INF/plugin.xml b/python/pluginResources/META-INF/plugin.xml index 9e858a5a045b..a26af68b23d2 100644 --- a/python/pluginResources/META-INF/plugin.xml +++ b/python/pluginResources/META-INF/plugin.xml @@ -4,9 +4,9 @@ PythonCore Python Community Edition - + Smart editing for Python scripts - 3.0.1 + 3.1 com.intellij.modules.java diff --git a/python/resources/pycharm_core_about.png b/python/resources/pycharm_core_about.png index 9a1bb9fe73ae..b9fa97f2b7a2 100644 Binary files a/python/resources/pycharm_core_about.png and b/python/resources/pycharm_core_about.png differ diff --git a/python/resources/pycharm_core_about@2x.png b/python/resources/pycharm_core_about@2x.png index c860c60b4dd4..c58e5a313077 100644 Binary files a/python/resources/pycharm_core_about@2x.png and b/python/resources/pycharm_core_about@2x.png differ diff --git a/python/resources/pycharm_core_logo.png b/python/resources/pycharm_core_logo.png index 228dfdd2a4eb..632185dac3ff 100644 Binary files a/python/resources/pycharm_core_logo.png and b/python/resources/pycharm_core_logo.png differ diff --git a/python/resources/pycharm_core_logo@2x.png b/python/resources/pycharm_core_logo@2x.png index f45960d05563..df1382ad9e95 100644 Binary files a/python/resources/pycharm_core_logo@2x.png and b/python/resources/pycharm_core_logo@2x.png differ diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index 82146a20f14e..f50257cfe0f1 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -16,10 +16,15 @@ package com.jetbrains.python; import com.intellij.psi.PsiFile; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.ParsingTestCase; import com.intellij.testFramework.TestDataPath; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.LanguageLevel; +import com.jetbrains.python.psi.PyFunction; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; /** * @author yole @@ -220,7 +225,7 @@ public class PythonParsingTest extends ParsingTestCase { } public void testTrailingSemicolon() { // PY-363 - doTest(); + doTest(); } public void testStarExpression() { // PEP-3132 @@ -322,7 +327,7 @@ public class PythonParsingTest extends ParsingTestCase { public void testIncompleteFor() { // PY-3792 doTest(); } - + public void testCallInAssignment() { // PY-5062 doTest(); } @@ -451,6 +456,7 @@ public class PythonParsingTest extends ParsingTestCase { finally { myLanguageLevel = prev; } + ensureEachFunctionHasStatementList(myFile, PyFunction.class); } @Override @@ -459,4 +465,13 @@ public class PythonParsingTest extends ParsingTestCase { file.getVirtualFile().putUserData(LanguageLevel.KEY, myLanguageLevel); return file; } + + public static void ensureEachFunctionHasStatementList( + @NotNull PsiFile parentFile, + @NotNull Class functionType) { + Collection functions = PsiTreeUtil.findChildrenOfType(parentFile, functionType); + for (T functionToCheck : functions) { + functionToCheck.getStatementList(); //To make sure each function has statement list (does not throw exception) + } + } } diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java index da13d8b20d25..f4284e465f40 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java @@ -294,7 +294,7 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase { public void wrap(@NotNull final String selection, @NotNull final CustomTemplateCallback callback) { final TextFieldWithStoredHistory field = new TextFieldWithStoredHistory(EMMET_RECENT_WRAP_ABBREVIATIONS_KEY); final Dimension fieldPreferredSize = field.getPreferredSize(); - field.setPreferredSize(new Dimension(Math.max(160, fieldPreferredSize.width), fieldPreferredSize.height)); + field.setPreferredSize(new Dimension(Math.max(220, fieldPreferredSize.width), fieldPreferredSize.height)); field.setHistorySize(10); final JBPopupFactory popupFactory = JBPopupFactory.getInstance(); final BalloonImpl balloon = (BalloonImpl)popupFactory.createDialogBalloonBuilder(field, XmlBundle.message("emmet.title"))