diff --git a/bin/scripts/unix/idea.sh b/bin/scripts/unix/idea.sh index b818b17e501b..7a7601646348 100755 --- a/bin/scripts/unix/idea.sh +++ b/bin/scripts/unix/idea.sh @@ -145,7 +145,7 @@ if [ "$IS_EAP" = "true" ]; then OS_NAME=`echo $OS_TYPE | "$TR" '[:upper:]' '[:lower:]'` AGENT_LIB="yjpagent-$OS_NAME$BITS" if [ -r "$IDE_BIN_HOME/lib$AGENT_LIB.so" ]; then - AGENT="-agentlib:$AGENT_LIB=disablej2ee,disablecounts,disablealloc,sessionname=@@system_selector@@" + AGENT="-agentlib:$AGENT_LIB=disablej2ee,disablealloc,sessionname=@@system_selector@@" fi fi diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant index d0fa5bde641c..29b981ef038e 100644 --- a/build/scripts/libLicenses.gant +++ b/build/scripts/libLicenses.gant @@ -206,7 +206,7 @@ libraryLicense(name: "Maven3", libraryNames: ["Maven3", "maven-dependency-tree-1 libraryLicense(name: "markdownj", attachedTo: "tasks-core", version: "", license: "BSD", url: "http://markdownj.org/", licenseUrl: "http://www.opensource.org/licenses/bsd-license.php") libraryLicense(name: "mercurial_prompthooks", attachedTo: "hg4idea", version: "", license: "GPLv2 (used as hg extension called from hg executable)", url: "https://github.com/willemv/mercurial_prompthooks", licenseUrl: "https://github.com/willemv/mercurial_prompthooks/blob/master/LICENSE.txt") libraryLicense(name: "Microba", libraryName: "microba", version: "0.4.2", license: "BSD", url: "http://microba.sourceforge.net/", licenseUrl: "http://microba.sourceforge.net/license.txt") -libraryLicense(name: "MigLayout", libraryName: "miglayout-swing.jar", version: "3.7.1", license: "BSD", url: "http://www.miglayout.com/", licenseUrl: "http://www.miglayout.com/mavensite/license.html") +libraryLicense(name: "MigLayout", libraryName: "miglayout-swing", version: "3.7.1", license: "BSD", url: "http://www.miglayout.com/", licenseUrl: "http://www.miglayout.com/mavensite/license.html") libraryLicense(name: "NanoXML", version: "2.2.3", license: "zlib/libpng", url: "http://nanoxml.cyberelf.be/", licenseUrl: "http://devkix.com/nanoxml.php") libraryLicense(name: "nekohtml", libraryName: "nekohtml", version: "1.9.14", license: "Apache 2.0", url: "http://nekohtml.sourceforge.net/", licenseUrl: "http://apache.org/licenses/LICENSE-2.0.txt") libraryLicense(name: "Eclipse JDT Core", libraryName: "Eclipse", version: "3.3", license: "CPL 1.0", url: "http://www.eclipse.org/jdt/core/index.php") diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant index 09ebb86f8101..0913128f69f4 100644 --- a/build/scripts/utils.gant +++ b/build/scripts/utils.gant @@ -60,10 +60,10 @@ binding.setVariable("vmOptions", { "$common_vmoptions ${isEap() ? '-XX:+HeapDump binding.setVariable("vmOptions32", { "$mem32 ${vmOptions()}".trim() }) binding.setVariable("vmOptions64", { "$mem64 ${vmOptions()}".trim() }) binding.setVariable("vmOptions32yjp", { String systemSelector -> - "${vmOptions32()} -agentlib:yjpagent=disablej2ee,disablecounts,disablealloc,sessionname=$systemSelector".trim() + "${vmOptions32()} -agentlib:yjpagent=disablej2ee,disablealloc,sessionname=$systemSelector".trim() }) binding.setVariable("vmOptions64yjp", { String systemSelector -> - "${vmOptions64()} -agentlib:yjpagent64=disablej2ee,disablecounts,disablealloc,sessionname=$systemSelector".trim() + "${vmOptions64()} -agentlib:yjpagent64=disablej2ee,disablealloc,sessionname=$systemSelector".trim() }) binding.setVariable("isDefined", {String key -> @@ -252,7 +252,7 @@ binding.setVariable("layoutMacApp", { String path, String ch, Map args -> String vmOptions = "${vmOptions()} -Xverify:none" if (isEap() && !args.mac_no_yjp) { - vmOptions += " -agentlib:yjpagent=disablej2ee,disablecounts,disablealloc,sessionname=${args.system_selector}" + vmOptions += " -agentlib:yjpagent=disablej2ee,disablealloc,sessionname=${args.system_selector}" } String version = isEap() ? "EAP $args.buildNumber" : "${p("component.version.major")}.${p("component.version.minor")}" diff --git a/java/idea-ui/src/com/intellij/projectImport/SelectImportedProjectsStep.java b/java/idea-ui/src/com/intellij/projectImport/SelectImportedProjectsStep.java index bc10db18f06a..6d9e22b1b3b6 100644 --- a/java/idea-ui/src/com/intellij/projectImport/SelectImportedProjectsStep.java +++ b/java/idea-ui/src/com/intellij/projectImport/SelectImportedProjectsStep.java @@ -71,11 +71,20 @@ public abstract class SelectImportedProjectsStep extends ProjectImportWizardS return panel; } + protected boolean isElementEnabled(T element) { + return true; + } + public void updateStep() { fileChooser.clear(); for (T element : getContext().getList()) { - fileChooser.addElement(element, getContext().isMarked(element)); + boolean isEnabled = isElementEnabled(element); + fileChooser.addElement(element, isEnabled && getContext().isMarked(element)); + if (!isEnabled) { + fileChooser.disableElement(element); + } } + fileChooser.setBorder(IdeBorderFactory.createTitledBorder( IdeBundle.message("project.import.select.title", getContext().getName()), false)); openModuleSettingsCheckBox.setSelected(getBuilder().isOpenProjectSettingsAfter()); diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java index 94c0fc425da8..ed7445199c3c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java @@ -47,7 +47,9 @@ public class DummyEntryPointsTool extends FilteringInspectionTool { public void runInspection(@NotNull AnalysisScope scope, @NotNull final InspectionManager manager) {} - public void exportResults(@NotNull Element parentNode) {} + @Override + public void exportResults(@NotNull Element parentNode, RefEntity refEntity) { + } @NotNull public JobDescriptor[] getJobDescriptors(GlobalInspectionContext globalInspectionContext) { diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index d3ffbc9bb33b..6968e8ff5f9f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -631,45 +631,43 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool { return myComposer; } - public void exportResults(@NotNull final Element parentNode) { + @Override + public void exportResults(@NotNull final Element parentNode, RefEntity refEntity) { + if (!(refEntity instanceof RefJavaElement)) return; final WeakUnreferencedFilter filter = new WeakUnreferencedFilter(this); - getRefManager().iterate(new RefJavaVisitor() { - @Override public void visitElement(RefEntity refEntity) { - if (!(refEntity instanceof RefJavaElement)) return; - if (!getIgnoredRefElements().contains(refEntity) && filter.accepts((RefJavaElement)refEntity)) { - if (refEntity instanceof RefImplicitConstructor) refEntity = ((RefImplicitConstructor)refEntity).getOwnerClass(); - Element element = refEntity.getRefManager().export(refEntity, parentNode, -1); - @NonNls Element problemClassElement = new Element(InspectionsBundle.message("inspection.export.results.problem.element.tag")); + if (!getIgnoredRefElements().contains(refEntity) && filter.accepts((RefJavaElement)refEntity)) { + if (refEntity instanceof RefImplicitConstructor) refEntity = ((RefImplicitConstructor)refEntity).getOwnerClass(); + Element element = refEntity.getRefManager().export(refEntity, parentNode, -1); + @NonNls Element problemClassElement = new Element(InspectionsBundle.message("inspection.export.results.problem.element.tag")); - if (refEntity instanceof RefElement) { - final RefElement refElement = (RefElement)refEntity; - final HighlightSeverity severity = getCurrentSeverity(refElement); - final String attributeKey = getTextAttributeKey(refElement.getElement().getProject(), severity, ProblemHighlightType.LIKE_UNUSED_SYMBOL); - problemClassElement.setAttribute("severity", severity.myName); - problemClassElement.setAttribute("attribute_key", attributeKey); - } - - problemClassElement.addContent(InspectionsBundle.message("inspection.export.results.dead.code")); - element.addContent(problemClassElement); - - @NonNls Element hintsElement = new Element("hints"); - - for (String hint : HINTS) { - @NonNls Element hintElement = new Element("hint"); - hintElement.setAttribute("value", hint); - hintsElement.addContent(hintElement); - } - element.addContent(hintsElement); - - - Element descriptionElement = new Element(InspectionsBundle.message("inspection.export.results.description.tag")); - StringBuffer buf = new StringBuffer(); - DeadHTMLComposer.appendProblemSynopsis((RefElement)refEntity, buf); - descriptionElement.addContent(buf.toString()); - element.addContent(descriptionElement); - } + if (refEntity instanceof RefElement) { + final RefElement refElement = (RefElement)refEntity; + final HighlightSeverity severity = getCurrentSeverity(refElement); + final String attributeKey = + getTextAttributeKey(refElement.getElement().getProject(), severity, ProblemHighlightType.LIKE_UNUSED_SYMBOL); + problemClassElement.setAttribute("severity", severity.myName); + problemClassElement.setAttribute("attribute_key", attributeKey); } - }); + + problemClassElement.addContent(InspectionsBundle.message("inspection.export.results.dead.code")); + element.addContent(problemClassElement); + + @NonNls Element hintsElement = new Element("hints"); + + for (String hint : HINTS) { + @NonNls Element hintElement = new Element("hint"); + hintElement.setAttribute("value", hint); + hintsElement.addContent(hintElement); + } + element.addContent(hintsElement); + + + Element descriptionElement = new Element(InspectionsBundle.message("inspection.export.results.description.tag")); + StringBuffer buf = new StringBuffer(); + DeadHTMLComposer.appendProblemSynopsis((RefElement)refEntity, buf); + descriptionElement.addContent(buf.toString()); + element.addContent(descriptionElement); + } } public QuickFixAction[] getQuickFixes(final RefEntity[] refElements) { diff --git a/java/java-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java b/java/java-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java index d5c2ea5ded2d..63c25f321f39 100644 --- a/java/java-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java @@ -75,7 +75,7 @@ public class RefJavaUtilImpl extends RefJavaUtil{ if (refConstructor == null) { // No explicit constructor referenced. Should use default one. PsiType newType = newExpr.getType(); if (newType instanceof PsiClassType) { - processClassReference(PsiUtil.resolveClassInType(newType), refFrom, psiFrom); + processClassReference(PsiUtil.resolveClassInType(newType), refFrom, psiFrom, true); } } } @@ -124,22 +124,38 @@ public class RefJavaUtilImpl extends RefJavaUtil{ final PsiTypeElement operand = expression.getOperand(); final PsiType type = operand.getType(); if (type instanceof PsiClassType) { - processClassReference(((PsiClassType)type).resolve(), refFrom, psiFrom); + processClassReference(((PsiClassType)type).resolve(), refFrom, psiFrom, false); } } - private void processClassReference(final PsiClass psiClass, final RefJavaElementImpl refFrom, final PsiModifierListOwner psiFrom) { + private void processClassReference(final PsiClass psiClass, + final RefJavaElementImpl refFrom, + final PsiModifierListOwner psiFrom, + boolean defaultConstructorOnly) { if (psiClass != null) { RefClassImpl refClass = (RefClassImpl)refFrom.getRefManager().getReference(psiClass); if (refClass != null) { - RefMethodImpl refDefaultConstructor = (RefMethodImpl)refClass.getDefaultConstructor(); + boolean hasConstructorsMarked = false; - if (refDefaultConstructor != null && !(refDefaultConstructor instanceof RefImplicitConstructor)) { - refDefaultConstructor.addInReference(refFrom); - refFrom.addOutReference(refDefaultConstructor); + if (defaultConstructorOnly) { + RefMethodImpl refDefaultConstructor = (RefMethodImpl)refClass.getDefaultConstructor(); + if (refDefaultConstructor != null && !(refDefaultConstructor instanceof RefImplicitConstructor)) { + refDefaultConstructor.addInReference(refFrom); + refFrom.addOutReference(refDefaultConstructor); + hasConstructorsMarked = true; + } } else { + for (RefMethod cons : refClass.getConstructors()) { + if (cons instanceof RefImplicitConstructor) continue; + ((RefMethodImpl)cons).addInReference(refFrom); + refFrom.addOutReference(cons); + hasConstructorsMarked = true; + } + } + + if (!hasConstructorsMarked) { refFrom.addReference(refClass, psiClass, psiFrom, false, true, null); } } @@ -385,4 +401,4 @@ public class RefJavaUtilImpl extends RefJavaUtil{ } } } -} \ No newline at end of file +} diff --git a/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml b/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml new file mode 100644 index 000000000000..bdafc52f107c --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/classLiteralRef/expected.xml @@ -0,0 +1,4 @@ + + + + diff --git a/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java b/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java new file mode 100644 index 000000000000..13500191cfe2 --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/classLiteralRef/src/Test.java @@ -0,0 +1,12 @@ +import java.lang.Class; +import java.lang.String; + +public class Test { + public static void main(String[] args) { + Test.class.getDeclaredConstructor(String.class).newInstance("Foo"); + } + + public Test(String param) { + System.out.println("This is used!"); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedDeclarationTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedDeclarationTest.java index 5dcd702f8835..aa8049be425e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/UnusedDeclarationTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/UnusedDeclarationTest.java @@ -184,4 +184,8 @@ public class UnusedDeclarationTest extends InspectionTestCase { public void testAbstractClassWithSerializableSubclasses() throws Exception { doTest(); } + + public void testclassLiteralRef() throws Exception { + doTest(); + } } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/CommonInspectionToolWrapper.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/CommonInspectionToolWrapper.java index 3858734b488c..60013c809bf1 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/CommonInspectionToolWrapper.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/CommonInspectionToolWrapper.java @@ -20,6 +20,7 @@ import com.intellij.codeInspection.GlobalInspectionContext; import com.intellij.codeInspection.InspectionEP; import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.reference.RefEntity; +import com.intellij.codeInspection.reference.RefVisitor; import com.intellij.codeInspection.ui.InspectionNode; import com.intellij.codeInspection.ui.InspectionTreeNode; import org.jdom.Element; @@ -111,7 +112,7 @@ public class CommonInspectionToolWrapper extends InspectionToolWrapper\n"); } for (Object o : list) { @@ -263,19 +262,16 @@ public abstract class DescriptorProviderInspection extends InspectionTool implem return myComposer; } - public void exportResults(@NotNull final Element parentNode) { - getRefManager().iterate(new RefVisitor() { - @Override public void visitElement(final RefEntity refEntity) { - synchronized (lock) { - if (getProblemElements().containsKey(refEntity)) { - CommonProblemDescriptor[] descriptions = getDescriptions(refEntity); - if (descriptions != null) { - exportResults(descriptions, refEntity, parentNode); - } - } + @Override + public void exportResults(final @NotNull Element parentNode, RefEntity refEntity) { + synchronized (lock) { + if (getProblemElements().containsKey(refEntity)) { + CommonProblemDescriptor[] descriptions = getDescriptions(refEntity); + if (descriptions != null) { + exportResults(descriptions, refEntity, parentNode); } } - }); + } } private void exportResults(@NotNull final CommonProblemDescriptor[] descriptions, final RefEntity refEntity, final Element parentNode) { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java index 872844b78bbf..18d9ef0bc84e 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java @@ -105,6 +105,7 @@ public class GlobalInspectionContextImpl extends UserDataHolderBase implements G private final Map myTools = new THashMap(); private AnalysisUIOptions myUIOptions; + @NonNls static final String LOCAL_TOOL_ATTRIBUTE = "is_local_tool"; public GlobalInspectionContextImpl(Project project, NotNullLazyValue contentManager) { myProject = project; @@ -296,44 +297,63 @@ public class GlobalInspectionContextImpl extends UserDataHolderBase implements G public void run() { performInspectionsWithProgress(scope, manager); @NonNls final String ext = ".xml"; + final Map globalTools = new HashMap(); for (Map.Entry stringSetEntry : myTools.entrySet()) { - final Element root = new Element(InspectionsBundle.message("inspection.problems")); - final Document doc = new Document(root); final Tools sameTools = stringSetEntry.getValue(); boolean hasProblems = false; - boolean isLocalTool = false; String toolName = stringSetEntry.getKey(); if (sameTools != null) { for (ScopeToolState toolDescr : sameTools.getTools()) { final InspectionTool tool = (InspectionTool)toolDescr.getTool(); if (tool instanceof LocalInspectionToolWrapper) { hasProblems = new File(outputPath, toolName + ext).exists(); - isLocalTool = true; } else { tool.updateContent(); if (tool.hasReportedProblems()) { - hasProblems = true; - tool.exportResults(root); + final Element root = new Element(InspectionsBundle.message("inspection.problems")); + globalTools.put(root, sameTools); + LOG.assertTrue(!hasProblems, toolName); + break; } } } } if (!hasProblems) continue; - @NonNls final String isLocalToolAttribute = "is_local_tool"; - root.setAttribute(isLocalToolAttribute, String.valueOf(isLocalTool)); try { new File(outputPath).mkdirs(); final File file = new File(outputPath, toolName + ext); inspectionsResults.add(file); - if (isLocalTool) { - FileUtil.writeToFile(file, ("").getBytes("UTF-8"), true); - } - else { - PathMacroManager.getInstance(getProject()).collapsePaths(doc.getRootElement()); - JDOMUtil.writeDocument(doc, file, "\n"); + FileUtil.writeToFile(file, ("").getBytes("UTF-8"), true); + } + catch (IOException e) { + LOG.error(e); + } + } + + getRefManager().iterate(new RefVisitor() { + @Override + public void visitElement(final RefEntity refEntity) { + for (Element element : globalTools.keySet()) { + final Tools tools = globalTools.get(element); + for (ScopeToolState state : tools.getTools()) { + ((InspectionTool)state.getTool()).exportResults(element, refEntity); + } } } + }); + + for (Element element : globalTools.keySet()) { + final String toolName = globalTools.get(element).getShortName(); + element.setAttribute(LOCAL_TOOL_ATTRIBUTE, Boolean.toString(false)); + final Document doc = new Document(element); + PathMacroManager.getInstance(getProject()).collapsePaths(doc.getRootElement()); + try { + new File(outputPath).mkdirs(); + final File file = new File(outputPath, toolName + ext); + inspectionsResults.add(file); + JDOMUtil.writeDocument(doc, file, "\n"); + } catch (IOException e) { LOG.error(e); } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java index 279ef0b60f33..e9d0aa00349d 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java @@ -29,10 +29,7 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.codeInsight.daemon.impl.SeverityRegistrar; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.*; -import com.intellij.codeInspection.reference.RefElement; -import com.intellij.codeInspection.reference.RefEntity; -import com.intellij.codeInspection.reference.RefManager; -import com.intellij.codeInspection.reference.RefModule; +import com.intellij.codeInspection.reference.*; import com.intellij.codeInspection.ui.InspectionNode; import com.intellij.codeInspection.ui.InspectionTreeNode; import com.intellij.lang.annotation.HighlightSeverity; @@ -69,7 +66,16 @@ public abstract class InspectionTool extends InspectionProfileEntry { public abstract void runInspection(@NotNull AnalysisScope scope, @NotNull InspectionManager manager); - public abstract void exportResults(@NotNull Element parentNode); + public void exportResults(@NotNull final Element parentNode) { + getRefManager().iterate(new RefVisitor(){ + @Override + public void visitElement(RefEntity elem) { + exportResults(parentNode, elem); + } + }); + } + + public abstract void exportResults(@NotNull Element parentNode, RefEntity refEntity); public abstract boolean isGraphNeeded(); @Nullable diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java index 0061cdad34f7..ca49a0227f8e 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -439,7 +439,17 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, if (!(settings.getConfiguration() instanceof UnknownRunConfiguration)) { final List tasks = getBeforeRunTasks(settings.getConfiguration()); final Element methodsElement = new Element(METHOD); + Map,BeforeRunTask> templateTasks = null; + if (!settings.isTemplate()) { + List beforeRunTasks = getBeforeRunTasks(getConfigurationTemplate(settings.getFactory()).getConfiguration()); + templateTasks = new HashMap, BeforeRunTask>(); + for (BeforeRunTask task : beforeRunTasks) { + templateTasks.put(task.getProviderId(), task); + } + } for (BeforeRunTask task : tasks) { + if (templateTasks != null && task.equals(templateTasks.get(task.getProviderId()))) + continue; // not neccesary saving if the task is the same as template final Element child = new Element(OPTION); child.setAttribute(NAME_ATTR, task.getProviderId().toString()); task.writeExternal(child); @@ -793,7 +803,11 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, @NotNull @Override public List getBeforeRunTasks(RunConfiguration settings, Key taskProviderID) { - List tasks = getBeforeRunTasks(settings); + List tasks = myConfigurationToBeforeTasksMap.get(settings); + if (tasks == null) { + tasks = getBeforeRunTasks(settings); + myConfigurationToBeforeTasksMap.put(settings, tasks); + } List result = new ArrayList(); for (BeforeRunTask task : tasks) { if (task.getProviderId() == taskProviderID) @@ -859,7 +873,20 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } public final void setBeforeRunTasks(final RunConfiguration runConfiguration, List tasks) { - myConfigurationToBeforeTasksMap.put(runConfiguration, tasks); + List templates = getBeforeRunTasks(runConfiguration);//here may be some disabled templates + Set> idsToSet = new HashSet>(); + List result = new ArrayList(tasks); + for (BeforeRunTask task : tasks) { + idsToSet.add(task.getProviderId()); + } + int i = 0; + for (BeforeRunTask template : templates) { + if (!idsToSet.contains(template.getProviderId())) { + result.add(i, template); + i++; + } + } + myConfigurationToBeforeTasksMap.put(runConfiguration, result); fireBeforeRunTasksUpdated(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CloneElementAction.java b/platform/lang-impl/src/com/intellij/ide/actions/CloneElementAction.java index e5d3ac3e9352..8e6a97451901 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CloneElementAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CloneElementAction.java @@ -39,13 +39,13 @@ public class CloneElementAction extends CopyElementAction { } protected void updateForToolWindow(String id, DataContext dataContext,Presentation presentation) { + if (!ToolWindowId.COMMANDER.equals(id)) { + presentation.setVisible(false); + return; + } // work only with single selection PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); presentation.setEnabled(elements != null && elements.length == 1 && CopyHandler.canClone(elements)); presentation.setVisible(true); - - if (!ToolWindowId.COMMANDER.equals(id)) { - presentation.setVisible(false); - } } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyHandler.java b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyHandler.java index 211ab529dd36..a8b32d0cd14a 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyHandler.java @@ -62,7 +62,7 @@ public class CopyHandler { if (elements.length > 0) { final CopyHandlerDelegate[] copyHandlers = Extensions.getExtensions(CopyHandlerDelegate.EP_NAME); for (CopyHandlerDelegate delegate : copyHandlers) { - if (delegate.canCopy(elements)) { + if (delegate instanceof CopyHandlerDelegateBase ? ((CopyHandlerDelegateBase)delegate).canCopy(elements, true) : delegate.canCopy(elements)) { if (delegate instanceof CopyHandlerDelegateBase && ((CopyHandlerDelegateBase)delegate).forbidToClone(elements, true)){ return false; } diff --git a/platform/lang-impl/src/com/intellij/tools/Tool.java b/platform/lang-impl/src/com/intellij/tools/Tool.java index 1ad5476014d3..cfa2d8426c74 100644 --- a/platform/lang-impl/src/com/intellij/tools/Tool.java +++ b/platform/lang-impl/src/com/intellij/tools/Tool.java @@ -34,6 +34,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import org.jetbrains.annotations.NonNls; +import java.io.File; import java.util.ArrayList; public class Tool implements SchemeElement { @@ -300,7 +301,15 @@ public class Tool implements SchemeElement { commandLine.setWorkDirectory(MacroManager.getInstance().expandMacrosInString(workingDir, false, dataContext)); exePath = MacroManager.getInstance().expandMacrosInString(exePath, false, dataContext); if (exePath == null) return null; - commandLine.setExePath(exePath); + + File exeFile = new File(exePath); + if (exeFile.isDirectory() && exeFile.getName().endsWith(".app")) { + commandLine.setExePath("open"); + commandLine.getParametersList().prependAll("-a", exePath); + } + else { + commandLine.setExePath(exePath); + } } catch (Macro.ExecutionCancelledException e) { return null; diff --git a/platform/lang-impl/src/com/intellij/tools/ToolEditorDialog.java b/platform/lang-impl/src/com/intellij/tools/ToolEditorDialog.java index 7c4055402403..e929f1b7fad9 100644 --- a/platform/lang-impl/src/com/intellij/tools/ToolEditorDialog.java +++ b/platform/lang-impl/src/com/intellij/tools/ToolEditorDialog.java @@ -196,7 +196,7 @@ public class ToolEditorDialog extends DialogWrapper { browseCommandButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { - FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor(); + FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileOrExecutableAppDescriptor(); VirtualFile file = FileChooser.chooseFile(descriptor, myProject, null); if (file != null) { myTfCommand.setText(file.getPresentableUrl()); @@ -463,4 +463,4 @@ public class ToolEditorDialog extends DialogWrapper { if (s.length() == 0) return null; return s.replace('/', File.separatorChar); } -} \ No newline at end of file +} diff --git a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java index d69b4c68c2bb..ea6067421823 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java +++ b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java @@ -206,7 +206,7 @@ public class FileChooserDescriptor implements Cloneable { @Nullable public final VirtualFile getFileToSelect(VirtualFile file) { - if (file.isDirectory() && myChooseFolders) { + if (file.isDirectory() && (myChooseFolders || isFileSelectable(file))) { return file; } boolean isJar = file.getFileType() == FileTypes.ARCHIVE; diff --git a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptorFactory.java b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptorFactory.java index 2696d8904ceb..057ca54e3b4b 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptorFactory.java +++ b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptorFactory.java @@ -16,6 +16,7 @@ package com.intellij.openapi.fileChooser; import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.UIBundle; @@ -39,6 +40,21 @@ public class FileChooserDescriptorFactory { return new FileChooserDescriptor(true, false, false, false, false, false); } + public static FileChooserDescriptor createSingleFileOrExecutableAppDescriptor() { + return new FileChooserDescriptor(true, false, false, false, false, false) { + @Override + public boolean isFileSelectable(VirtualFile file) { + if (super.isFileSelectable(file)) return true; + + if (SystemInfo.isMac && file.isDirectory() && "app".equals(file.getExtension())) { + return true; + } + + return false; + } + }; + } + public static FileChooserDescriptor createSingleLocalFileDescriptor() { return new FileChooserDescriptor(true, true, true, true, false, false); } diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java index 2e0d4d54db6c..6349f4880e33 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidAptCompiler.java @@ -263,7 +263,7 @@ public class AndroidAptCompiler implements SourceGeneratingCompiler { final String[] libPackages = getLibPackages(module, packageName); final Module circularDepLibWithSamePackage = AndroidCompileUtil.findCircularDependencyOnLibraryWithSamePackage(facet); - if (circularDepLibWithSamePackage != null) { + if (circularDepLibWithSamePackage != null && !facet.getConfiguration().LIBRARY_PROJECT) { myContext.addMessage(CompilerMessageCategory.WARNING, AndroidBundle.message("android.compilation.warning.circular.app.dependency", packageName, module.getName(), diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java index 623ade3e0a71..c5d4f05b6c48 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidAutogenerator.java @@ -163,7 +163,7 @@ public class AndroidAutogenerator { final String manifestFileOsPath = FileUtil.toSystemDependentName(manifestFile.getPath()); final Module circularDepLibWithSamePackage = AndroidCompileUtil.findCircularDependencyOnLibraryWithSamePackage(facet); - if (circularDepLibWithSamePackage != null) { + if (circularDepLibWithSamePackage != null && !facet.getConfiguration().LIBRARY_PROJECT) { context.addMessage(CompilerMessageCategory.WARNING, AndroidBundle.message("android.compilation.warning.circular.app.dependency", packageName, module.getName(), circularDepLibWithSamePackage.getName()), null, -1, -1); diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java index c1db61d2f1bc..53041f9739b3 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidCompileUtil.java @@ -655,19 +655,20 @@ public class AndroidCompileUtil { final GlobalSearchScope moduleScope = facet.getModule().getModuleScope(); initializeGenSourceRoot(module, AndroidRootUtil.getRenderscriptGenSourceRootPath(facet), - FileTypeIndex.getFiles(AndroidRenderscriptFileType.INSTANCE, moduleScope).size() > 0); + FileTypeIndex.getFiles(AndroidRenderscriptFileType.INSTANCE, moduleScope).size() > 0, true); if (AndroidAptCompiler.isToCompileModule(module, facet.getConfiguration())) { - initializeGenSourceRoot(module, AndroidRootUtil.getAptGenSourceRootPath(facet), true); + initializeGenSourceRoot(module, AndroidRootUtil.getAptGenSourceRootPath(facet), true, true); } else { // we need to include generated-sources/r to compilation, because it contains R.java generated by Maven, // which should be used in Maven-based resource processing mode + initializeGenSourceRoot(module, AndroidRootUtil.getAptGenSourceRootPath(facet), true, false); includeAaptGenSourceRootToCompilation(facet); } initializeGenSourceRoot(module, AndroidRootUtil.getAidlGenSourceRootPath(facet), - FileTypeIndex.getFiles(AndroidIdlFileType.ourFileType, moduleScope).size() > 0); + FileTypeIndex.getFiles(AndroidIdlFileType.ourFileType, moduleScope).size() > 0, true); } private static void includeAaptGenSourceRootToCompilation(AndroidFacet facet) { @@ -686,7 +687,7 @@ public class AndroidCompileUtil { } } - private static void initializeGenSourceRoot(@NotNull Module module, @Nullable String sourceRootPath, boolean createIfNotExist) { + private static void initializeGenSourceRoot(@NotNull Module module, @Nullable String sourceRootPath, boolean createIfNotExist, boolean exclude) { if (sourceRootPath == null) { return; } @@ -701,7 +702,7 @@ public class AndroidCompileUtil { if (sourceRoot == null) { sourceRoot = LocalFileSystem.getInstance().findFileByPath(sourceRootPath); } - if (sourceRoot != null) { + if (sourceRoot != null && exclude) { excludeFromCompilation(module.getProject(), sourceRoot); } } diff --git a/plugins/android/src/org/jetbrains/android/compiler/tools/AndroidMavenExecutor.java b/plugins/android/src/org/jetbrains/android/compiler/tools/AndroidMavenExecutor.java index 3d0d9ff9d037..0798f83d368f 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/tools/AndroidMavenExecutor.java +++ b/plugins/android/src/org/jetbrains/android/compiler/tools/AndroidMavenExecutor.java @@ -19,14 +19,16 @@ import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.CommandLineBuilder; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.JavaParameters; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.compiler.CompilerMessageCategory; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Computable; import com.intellij.util.containers.HashMap; import org.jetbrains.android.util.AndroidUtils; import org.jetbrains.android.util.ExecutionStatus; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.execution.MavenExternalParameters; -import org.jetbrains.idea.maven.execution.MavenRunner; import org.jetbrains.idea.maven.execution.MavenRunnerParameters; import org.jetbrains.idea.maven.project.MavenProjectsManager; @@ -42,24 +44,39 @@ public class AndroidMavenExecutor { private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.tools.AndroidMavenExecutor"); private static final String BUILD_ERROR_INDICATOR = "[error]"; - private static final String FAILED_TO_RESOLVE_ARTIFACT_INDICATOR = "[info] failed to resolve artifact"; private AndroidMavenExecutor() { } - public static Map> generateResources(Module module) { + public static Map> generateResources(final Module module) { MavenProjectsManager projectsManager = MavenProjectsManager.getInstance(module.getProject()); - MavenRunnerParameters parameters = + final MavenRunnerParameters parameters = new MavenRunnerParameters(true, projectsManager.findProject(module).getDirectory(), Collections.singletonList("process-resources"), projectsManager.getExplicitProfiles()); - Map> result = new HashMap>(); + final Map> result = new HashMap>(); result.put(CompilerMessageCategory.ERROR, new ArrayList()); try { - JavaParameters javaParams = MavenExternalParameters.createJavaParameters(module.getProject(), parameters); + JavaParameters javaParams = ApplicationManager.getApplication().runReadAction(new Computable() { + @Nullable + @Override + public JavaParameters compute() { + try { + return MavenExternalParameters.createJavaParameters(module.getProject(), parameters); + } + catch (ExecutionException e) { + LOG.info(e); + result.get(CompilerMessageCategory.ERROR).add(e.getMessage()); + return null; + } + } + }); + if (javaParams == null) { + return result; + } GeneralCommandLine commandLine = CommandLineBuilder.createFromJavaParameters(javaParams); StringBuilder messageBuilder = new StringBuilder(); @@ -70,13 +87,7 @@ public class AndroidMavenExecutor { String lcmessage = message.toLowerCase(); int buildErrorIndex = lcmessage.indexOf(BUILD_ERROR_INDICATOR); if (buildErrorIndex >= 0) { - int failedToResolveIndex = lcmessage.indexOf(FAILED_TO_RESOLVE_ARTIFACT_INDICATOR); - /*if (failedToResolveIndex >= 0) { - result.get(CompilerMessageCategory.ERROR).add("Failed to copy Android resources from Maven artifacts"); - } - else {*/ - result.get(CompilerMessageCategory.ERROR).add(message.substring(buildErrorIndex)); - //} + result.get(CompilerMessageCategory.ERROR).add(message.substring(buildErrorIndex)); } } } diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 6c859cfc3554..a271e68e9f9c 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1012,7 +1012,7 @@ - diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java index d546b64d0ebc..c76fad7a4e3c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 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. @@ -143,7 +143,7 @@ public abstract class GroovyCompilerBase implements TranslatingCompiler { if (profileGroovyc) { parameters.getVMParametersList().defineProperty("java.library.path", PathManager.getBinPath()); parameters.getVMParametersList().defineProperty("profile.groovy.compiler", "true"); - parameters.getVMParametersList().add("-agentlib:yjpagent=disablej2ee,disablecounts,disablealloc,sessionname=GroovyCompiler"); + parameters.getVMParametersList().add("-agentlib:yjpagent=disablej2ee,disablealloc,sessionname=GroovyCompiler"); classPathBuilder.add(PathManager.findFileInLibDirectory("yjp-controller-api-redist.jar").getAbsolutePath()); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonFramework.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonFramework.java index 7c96df71a060..37b103725224 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonFramework.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonFramework.java @@ -55,7 +55,7 @@ import java.util.Map; */ public class GriffonFramework extends MvcFramework { public static final Icon GRIFFON_ICON = IconLoader.getIcon("/icons/griffon/griffon.png"); - public static final Icon GRIFFON_TOOLWINDOW_ICON = IconLoader.getIcon("/icons/griffon/griffonToolWindow.png"); + @NonNls private static final String GRIFFON_COMMON_PLUGINS = "-griffonPlugins"; private static final String GLOBAL_PLUGINS_MODULE_NAME = "GriffonGlobalPlugins"; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonToolWindowFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonToolWindowFactory.java index c2f7e1ae647d..d7c0ffa84c13 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonToolWindowFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonToolWindowFactory.java @@ -92,7 +92,7 @@ public class GriffonToolWindowFactory extends MvcToolWindowDescriptor { @Override public Icon getModuleNodeIcon() { - return GriffonFramework.GRIFFON_TOOLWINDOW_ICON; + return GriffonFramework.GRIFFON_ICON; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java index 5043085dee36..c0b2fe7a0f32 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java @@ -422,6 +422,7 @@ public class MvcModuleStructureSynchronizer extends AbstractProjectComponent { if (shouldShow && toolWindow == null) { toolWindow = toolWindowManager.registerToolWindow(id, true, ToolWindowAnchor.LEFT, myProject, true); + toolWindow.setIcon(IconLoader.getIcon(ep.icon)); descriptor.createToolWindowContent(myProject, toolWindow); } else if (!shouldShow && toolWindow != null) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/projectView/MvcToolWindowDescriptor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/projectView/MvcToolWindowDescriptor.java index 9f9e4d8bbd52..ca1d2e31920b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/projectView/MvcToolWindowDescriptor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/projectView/MvcToolWindowDescriptor.java @@ -51,7 +51,6 @@ public abstract class MvcToolWindowDescriptor implements ToolWindowFactory, Cond } public void createToolWindowContent(Project project, ToolWindow toolWindow) { - toolWindow.setIcon(myFramework.getIcon()); toolWindow.setAvailable(true, null); toolWindow.setToHideOnEmptyContent(true); toolWindow.setTitle(myFramework.getDisplayName()); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java index e38981093af8..a068595e4851 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java @@ -23,11 +23,13 @@ package org.jetbrains.idea.maven.wizards; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory; import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.projectImport.ProjectImportProvider; import com.intellij.projectImport.SelectImportedProjectsStep; import org.jetbrains.idea.maven.project.MavenProject; +import org.jetbrains.idea.maven.project.MavenProjectsManager; import java.io.File; @@ -36,7 +38,7 @@ public class MavenProjectImportProvider extends ProjectImportProvider { super(builder); } - public ModuleWizardStep[] createSteps(WizardContext wizardContext) { + public ModuleWizardStep[] createSteps(final WizardContext wizardContext) { final ProjectWizardStepFactory stepFactory = ProjectWizardStepFactory.getInstance(); return new ModuleWizardStep[]{new MavenProjectImportStep(wizardContext), new SelectProfilesStep(wizardContext), new SelectImportedProjectsStep(wizardContext) { @@ -50,9 +52,22 @@ public class MavenProjectImportProvider extends ProjectImportProvider { stringBuilder.append(" [").append(relPath).append("]"); } } + + if (!isElementEnabled(project)) { + stringBuilder.append(" (project is ignored. See Settings -> Maven -> Ignored Files)"); + } + return stringBuilder.toString(); } + @Override + protected boolean isElementEnabled(MavenProject mavenProject) { + Project project = wizardContext.getProject(); + if (project == null) return true; + + return !MavenProjectsManager.getInstance(project).isIgnored(mavenProject); + } + public void updateDataModel() { super.updateDataModel(); getWizardContext().setProjectName(((MavenProjectBuilder)getBuilder()).getSuggestedProjectName());