From 440183c8e4a75beafdab1a7ec75563cf82c47ec2 Mon Sep 17 00:00:00 2001 From: Oleg Shpynov Date: Mon, 5 Apr 2010 17:25:45 +0400 Subject: [PATCH 1/6] Generalizing --- .../codeInsight/dataflow/DFAEngine.java | 20 +++++++-------- .../codeInsight/dataflow/DfaInstance.java | 4 +-- .../codeInsight/dataflow/Semilattice.java | 6 ++--- .../dataflow/{ => map}/DFAMap.java | 3 ++- .../dataflow/map/DFAMapEngine.java | 25 +++++++++++++++++++ .../dataflow/map/DfaMapInstance.java | 21 ++++++++++++++++ .../dataflow/map/MapSemilattice.java | 22 ++++++++++++++++ 7 files changed, 84 insertions(+), 17 deletions(-) rename platform/lang-impl/src/com/intellij/codeInsight/dataflow/{ => map}/DFAMap.java (97%) create mode 100644 platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMapEngine.java create mode 100644 platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DfaMapInstance.java create mode 100644 platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/MapSemilattice.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAEngine.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAEngine.java index 65908b8d7466..6967dbfefaca 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAEngine.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAEngine.java @@ -39,18 +39,18 @@ public class DFAEngine { } - public List> performDFA() { - final ArrayList> info = new ArrayList>(myFlow.length); + public List performDFA() { + final ArrayList info = new ArrayList(myFlow.length); return performDFA(info); } - public List> performDFA(final List> info) { + public List performDFA(final List info) { if (LOG.isDebugEnabled()){ LOG.debug("Perfoming DFA\n" + "Instance: " + myDfa + " Semilattice: " + mySemilattice); } // initializing dfa - final DFAMap initial = myDfa.initial(); + final E initial = myDfa.initial(); for (int i = 0; i < myFlow.length; i++) { info.add(i, initial); } @@ -104,12 +104,12 @@ public class DFAEngine { } final int currentNumber = currentInstruction.num(); - final DFAMap oldE = info.get(currentNumber); - final DFAMap joinedE = join(currentInstruction, info); - final DFAMap newE = myDfa.fun(joinedE, currentInstruction); + final E oldE = info.get(currentNumber); + final E joinedE = join(currentInstruction, info); + final E newE = myDfa.fun(joinedE, currentInstruction); if (!mySemilattice.eq(newE, oldE)) { if (LOG.isDebugEnabled()){ - LOG.debug("Number: " + currentNumber + " old: " + oldE.keySet() + " new: " + newE.keySet()); + LOG.debug("Number: " + currentNumber + " old: " + oldE.toString() + " new: " + newE.toString()); } info.set(currentNumber, newE); for (Instruction next : getNext(currentInstruction)) { @@ -148,9 +148,9 @@ public class DFAEngine { return allPred * 2; } - private DFAMap join(final Instruction instruction, final List> info) { + private E join(final Instruction instruction, final List info) { final Iterable prev = myDfa.isForward() ? instruction.allPred() : instruction.allSucc(); - final ArrayList> prevInfos = new ArrayList>(); + final ArrayList prevInfos = new ArrayList(); for (Instruction i : prev) { prevInfos.add(info.get(i.num())); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DfaInstance.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DfaInstance.java index ce618834fe4b..894e54d0af5b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DfaInstance.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DfaInstance.java @@ -21,10 +21,10 @@ public interface DfaInstance { // Please ensure that E has correctly implemented equals method // Invariant: fun must create new instance of DFAMap if modifies it - DFAMap fun(DFAMap e, Instruction instruction); + E fun(E e, Instruction instruction); @NotNull - DFAMap initial(); + E initial(); boolean isForward(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/Semilattice.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/Semilattice.java index 199ea50bd62d..0b1e89a7eaeb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/Semilattice.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/Semilattice.java @@ -17,9 +17,7 @@ package com.intellij.codeInsight.dataflow; import java.util.ArrayList; public interface Semilattice { - // Invariant: join can return unmodified ins(0) or empty DFAMap - // DfaInstance must create new one before modifying - DFAMap join(ArrayList> ins); + E join(ArrayList ins); - boolean eq(DFAMap e1, DFAMap e2); + boolean eq(E e1, E e2); } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAMap.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMap.java similarity index 97% rename from platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAMap.java rename to platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMap.java index 148a5942c3ec..9f7e1078ded4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/DFAMap.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMap.java @@ -1,5 +1,6 @@ -package com.intellij.codeInsight.dataflow; +package com.intellij.codeInsight.dataflow.map; +import com.intellij.codeInsight.dataflow.SetUtil; import org.jetbrains.annotations.Nullable; import java.util.*; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMapEngine.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMapEngine.java new file mode 100644 index 000000000000..d10c588a9bf2 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DFAMapEngine.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.dataflow.map; + +import com.intellij.codeInsight.controlflow.Instruction; +import com.intellij.codeInsight.dataflow.DFAEngine; + +public class DFAMapEngine extends DFAEngine>{ + public DFAMapEngine(final Instruction[] flow, final DfaMapInstance dfa, final MapSemilattice dfaMapSemilattice) { + super(flow, dfa, dfaMapSemilattice); + } +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DfaMapInstance.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DfaMapInstance.java new file mode 100644 index 000000000000..e6bc73381c10 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/DfaMapInstance.java @@ -0,0 +1,21 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.dataflow.map; + +import com.intellij.codeInsight.dataflow.DfaInstance; + +public interface DfaMapInstance extends DfaInstance> { +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/MapSemilattice.java b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/MapSemilattice.java new file mode 100644 index 000000000000..fb3547b7d698 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/dataflow/map/MapSemilattice.java @@ -0,0 +1,22 @@ +/* + * Copyright 2000-2007 JetBrains s.r.o. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.dataflow.map; + +import com.intellij.codeInsight.dataflow.Semilattice; + +public interface MapSemilattice extends Semilattice>{ + // Invariant: join can return unmodified ins(0) or empty DFAMap + // DfaInstance must create new one before modifying +} \ No newline at end of file From c86899e9da2d16bd1061980cd1a1425f4ca14898 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 5 Apr 2010 17:50:53 +0400 Subject: [PATCH 2/6] IDEA-53369 Groovy Editor -> Map Keys In Parenthetical Expressions All Considered Identical --- .../groovy/annotator/GroovyAnnotator.java | 49 +++++++------------ .../groovy/lang/GroovyHighlightingTest.java | 2 + .../highlighting/DuplicateMapKeys.groovy | 2 + 3 files changed, 23 insertions(+), 30 deletions(-) create mode 100644 plugins/groovy/testdata/highlighting/DuplicateMapKeys.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index d114ec046a7d..601ba52d8a88 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -33,6 +33,7 @@ import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.MultiMap; import gnu.trove.THashSet; import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; @@ -365,31 +366,28 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { @Override public void visitListOrMap(GrListOrMap listOrMap) { - final Map> map = DuplicatesUtil.factorDuplicates(listOrMap.getNamedArguments(), new TObjectHashingStrategy() { - public int computeHashCode(GrNamedArgument arg) { - final GrArgumentLabel label = arg.getLabel(); - if (label == null) return 0; + MultiMap map = new MultiMap(); + + for (GrNamedArgument element : listOrMap.getNamedArguments()) { + final GrArgumentLabel label = element.getLabel(); + if (label != null) { final String name = label.getName(); - if (name == null) return 0; - return name.hashCode(); - } - - public boolean equals(GrNamedArgument arg1, GrNamedArgument arg2) { - final GrArgumentLabel label1 = arg1.getLabel(); - final GrArgumentLabel label2 = arg2.getLabel(); - if (label1 == null || label2 == null) { - return label1 == null && label2 == null; + if (name != null) { + map.putValue(name, element); } - final String name1 = label1.getName(); - final String name2 = label2.getName(); - if (name1 == null || name2 == null) { - return name1 == null && name2 == null; - } - return name1.equals(name2); } - }); + } - processDuplicates(map, myHolder); + for (String key : map.keySet()) { + final Collection arguments = map.get(key); + if (arguments.size() > 1) { + final List args = new ArrayList(arguments); + for (int i = 1; i < args.size(); i++) { + GrNamedArgument namedArgument = args.get(i); + myHolder.createWarningAnnotation(namedArgument.getLabel(), GroovyBundle.message("duplicate.element.in.the.map")); + } + } + } } @Override @@ -734,15 +732,6 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { } } - protected static void processDuplicates(Map> map, AnnotationHolder holder) { - for (List args : map.values()) { - for (int i = 1; i < args.size(); i++) { - GrNamedArgument namedArgument = args.get(i); - holder.createWarningAnnotation(namedArgument, GroovyBundle.message("duplicate.element.in.the.map")); - } - } - } - private static void registerAbstractMethodFix(Annotation annotation, GrMethod method, boolean makeClassAbstract) { if (method.getBlock() == null) { annotation.registerFix(new AddMethodBodyFix(method)); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java index 3cf292ba7117..7083e7fef480 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java @@ -224,6 +224,8 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { public void testSuperConstructorInvocation() throws Exception {doTest();} + public void testDuplicateMapKeys() throws Exception {doTest();} + public void testIndexPropertyAccess() throws Exception { doTest(); } diff --git a/plugins/groovy/testdata/highlighting/DuplicateMapKeys.groovy b/plugins/groovy/testdata/highlighting/DuplicateMapKeys.groovy new file mode 100644 index 000000000000..ea162db4a8fa --- /dev/null +++ b/plugins/groovy/testdata/highlighting/DuplicateMapKeys.groovy @@ -0,0 +1,2 @@ +x = [ (person.firstNameKey):person.firstName, (person.lastNameKey):person.lastName ] +x = [2:1, 2:2] \ No newline at end of file From 09eeb6ca0b0ff9de545587e60824c2829acbe64a Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 5 Apr 2010 14:49:38 +0400 Subject: [PATCH 3/6] Maven: more assertions in test --- .../idea/maven/compiler/ResourceFilteringTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java index b74f4ad4e4ca..1ee0218e2355 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java @@ -15,11 +15,14 @@ */ package org.jetbrains.idea.maven.compiler; +import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerManagerImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; import com.intellij.compiler.impl.ModuleCompileScope; import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; import com.intellij.openapi.compiler.*; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.io.FileUtil; @@ -824,6 +827,9 @@ public class ResourceFilteringTest extends MavenImportingTestCase { } public void testDoNotFilterButCopyBigFiles() throws Exception { + assertFalse(CompilerConfiguration.getInstance(myProject).isResourceFile("file.xyz")); + assertEquals(FileTypeManager.getInstance().getFileTypeByFileName("file.xyz"), StdFileTypes.UNKNOWN); + createProjectSubFile("resources/file.xyz").setBinaryContent(new byte[1024 * 1024 * 20]); importProject("test" + From 26b1ba726f7abdf3414a9c3e143423fd4d2d9792 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 5 Apr 2010 17:11:34 +0400 Subject: [PATCH 4/6] Maven: disabling some buttons for non-maven projects (IDEA-46413) --- .../project/actions/DownloadActionGroup.java | 30 +++++++++++++++++++ .../actions/MavenProjectsManagerAction.java | 5 ++++ .../maven/project/actions/ReimportAction.java | 6 ++++ .../src/main/resources/META-INF/plugin.xml | 3 +- 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java new file mode 100644 index 000000000000..f4f43364f1ad --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2010 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.idea.maven.project.actions; + +import com.intellij.openapi.actionSystem.ActionGroup; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import org.jetbrains.idea.maven.utils.actions.MavenActionUtil; + +public class DownloadActionGroup extends DefaultActionGroup { + @Override + public void update(AnActionEvent e) { + super.update(e); + if (MavenActionUtil.getProject(e.getDataContext()) == null) return; + e.getPresentation().setEnabled(MavenActionUtil.getProjectsManager(e.getDataContext()).isMavenizedProject()); + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenProjectsManagerAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenProjectsManagerAction.java index 24288ad3ccfb..5626ef504af3 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenProjectsManagerAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenProjectsManagerAction.java @@ -26,5 +26,10 @@ public abstract class MavenProjectsManagerAction extends MavenAction { perform(MavenActionUtil.getProjectsManager(e.getDataContext())); } + @Override + protected boolean isAvailable(AnActionEvent e) { + return super.isAvailable(e) && MavenActionUtil.getProjectsManager(e.getDataContext()).isMavenizedProject(); + } + protected abstract void perform(MavenProjectsManager manager); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/ReimportAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/ReimportAction.java index d7c80f0b6a5e..b40c7f0a4ff3 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/ReimportAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/ReimportAction.java @@ -15,9 +15,15 @@ */ package org.jetbrains.idea.maven.project.actions; +import com.intellij.openapi.actionSystem.AnActionEvent; import org.jetbrains.idea.maven.project.MavenProjectsManager; public class ReimportAction extends MavenProjectsManagerAction { + @Override + protected boolean isAvailable(AnActionEvent e) { + return true; + } + @Override protected void perform(MavenProjectsManager manager) { manager.forceUpdateAllProjectsOrFindAllAvailablePomFiles(); diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml index e63770130d0d..34bedb046eae 100644 --- a/plugins/maven/src/main/resources/META-INF/plugin.xml +++ b/plugins/maven/src/main/resources/META-INF/plugin.xml @@ -293,7 +293,8 @@ - + From a349dc35cdc196b8215ccd3a098643fb171051f2 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 5 Apr 2010 17:20:47 +0400 Subject: [PATCH 5/6] Maven: do not set 'exported' flag on Maven deps (IDEA-53170) --- .../maven/importing/MavenModuleImporter.java | 5 +- .../importing/MavenRootModelAdapter.java | 5 +- .../project/actions/DownloadActionGroup.java | 2 +- .../idea/maven/MavenImportingTestCase.java | 2 +- .../importing/DependenciesImportingTest.java | 80 +------------------ 5 files changed, 9 insertions(+), 85 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java index 61cbe9521080..0161d147559a 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java @@ -107,14 +107,13 @@ public class MavenModuleImporter { private void configDependencies() { for (MavenArtifact artifact : myMavenProject.getDependencies()) { - boolean isExportable = artifact.isExportable(); DependencyScope scope = selectScope(artifact.getScope()); MavenProject depProject = myMavenTree.findProject(artifact.getMavenId()); if (depProject != null) { - myRootModelAdapter.addModuleDependency(myMavenProjectToModuleName.get(depProject), isExportable, scope); + myRootModelAdapter.addModuleDependency(myMavenProjectToModuleName.get(depProject), scope); } else if (myMavenProject.isSupportedDependency(artifact)) { - myRootModelAdapter.addLibraryDependency(artifact, isExportable, scope, myModifiableModelsProvider, myMavenProject); + myRootModelAdapter.addLibraryDependency(artifact, scope, myModifiableModelsProvider, myMavenProject); } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java index 8cb89ef664cb..5ebda0447bf8 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java @@ -194,7 +194,7 @@ public class MavenRootModelAdapter { return new Path(path); } - public void addModuleDependency(String moduleName, boolean isExportable, DependencyScope scope) { + public void addModuleDependency(String moduleName, DependencyScope scope) { Module m = findModuleByName(moduleName); ModuleOrderEntry e; @@ -205,7 +205,6 @@ public class MavenRootModelAdapter { e = myRootModel.addInvalidModuleEntry(moduleName); } - e.setExported(isExportable); e.setScope(scope); } @@ -215,7 +214,6 @@ public class MavenRootModelAdapter { } public void addLibraryDependency(MavenArtifact artifact, - boolean isExportable, DependencyScope scope, MavenModifiableModelsProvider provider, MavenProject project) { @@ -234,7 +232,6 @@ public class MavenRootModelAdapter { } LibraryOrderEntry e = myRootModel.addLibraryEntry(library); - e.setExported(isExportable); e.setScope(scope); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java index f4f43364f1ad..22080c8fe162 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java @@ -24,7 +24,7 @@ public class DownloadActionGroup extends DefaultActionGroup { @Override public void update(AnActionEvent e) { super.update(e); - if (MavenActionUtil.getProject(e.getDataContext()) == null) return; + if (MavenActionUtil.getProject(e.getDataContext()) == null) return; // todo: remove this when kirill fixes the problem e.getPresentation().setEnabled(MavenActionUtil.getProjectsManager(e.getDataContext()).isMavenizedProject()); } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java index 2d7316c664b4..e1570464176c 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java @@ -199,7 +199,7 @@ public abstract class MavenImportingTestCase extends MavenTestCase { assertModuleDeps(moduleName, LibraryOrderEntry.class, expectedDeps); } - protected void assertExportedModuleDeps(String moduleName, String... expectedDeps) { + protected void assertExportedDeps(String moduleName, String... expectedDeps) { final List actual = new ArrayList(); getRootManager(moduleName).processOrder(new RootPolicy() { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java index b4c00b7f36ed..0fa9553d59e7 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java @@ -21,7 +21,6 @@ import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.idea.maven.MavenImportingTestCase; @@ -527,30 +526,7 @@ public class DependenciesImportingTest extends MavenImportingTestCase { assertModuleModuleDepScope("m1", "m4", DependencyScope.TEST); } - public void testOptionalLibraryDependencyIsNotExportable() throws Exception { - importProject("test" + - "project" + - "1" + - - "" + - " " + - " group" + - " lib1" + - " 1" + - " " + - " " + - " group" + - " lib2" + - " 1" + - " true" + - " " + - ""); - - assertModules("project"); - assertExportedModuleDeps("project", "Maven: group:lib1:1"); - } - - public void testOptionalModuleDependencyIsNotExportable() throws Exception { + public void testDependenciesAreNotExported() throws Exception { createProjectPom("test" + "project" + "pom" + @@ -572,10 +548,9 @@ public class DependenciesImportingTest extends MavenImportingTestCase { " 1" + " " + " " + - " test" + - " m3" + + " lib" + + " lib" + " 1" + - " true" + " " + ""); @@ -583,55 +558,8 @@ public class DependenciesImportingTest extends MavenImportingTestCase { "m2" + "1"); - createModulePom("m3", "test" + - "m3" + - "1"); - importProject(); - - assertExportedModuleDeps("m1", "m2"); - } - - public void testOnlyCompileAndRuntimeDependenciesAreExported() throws Exception { - importProject("test" + - "project" + - "1" + - - "" + - " " + - " test" + - " compile" + - " compile" + - " 1" + - " " + - " " + - " test" + - " runtime" + - " runtime" + - " 1" + - " " + - " " + - " test" + - " test" + - " test" + - " 1" + - " " + - " " + - " test" + - " provided" + - " provided" + - " 1" + - " " + - " " + - " test" + - " system" + - " system" + - " ${java.home}/lib/tools.jar" + - " 1" + - " " + - ""); - - assertExportedModuleDeps("project", "Maven: test:compile:1", "Maven: test:runtime:1"); + assertExportedDeps("m1"); } public void testTransitiveDependencies() throws Exception { From bdf09134485818ea9a26eaa810844262505f126a Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 5 Apr 2010 18:18:59 +0400 Subject: [PATCH 6/6] Actions: null project in DataContext when creating toolbars (on behalf of Kirillka) --- .../actionSystem/impl/ActionToolbarImpl.java | 51 ++++++++++--------- .../project/actions/DownloadActionGroup.java | 1 - .../maven/utils/actions/MavenActionGroup.java | 4 +- .../maven/utils/actions/MavenActionUtil.java | 3 +- .../utils/actions/MavenToggleAction.java | 2 +- 5 files changed, 32 insertions(+), 29 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java index 4fa570d010d9..e6a1008a7943 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java @@ -36,6 +36,7 @@ import com.intellij.openapi.ui.popup.*; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.awt.RelativeRectangle; import com.intellij.util.ui.UIUtil; @@ -717,37 +718,41 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar { public void updateActionsImmediately() { ApplicationManager.getApplication().assertIsDispatchThread(); - myNewVisibleActions.clear(); - final DataContext dataContext = getDataContext(); + IdeFocusManager.getInstance(null).doWhenFocusSettlesDown(new Runnable() { + public void run() { + myNewVisibleActions.clear(); + final DataContext dataContext = getDataContext(); - Utils.expandActionGroup(myActionGroup, myNewVisibleActions, myPresentationFactory, dataContext, myPlace, myActionManager); + Utils.expandActionGroup(myActionGroup, myNewVisibleActions, myPresentationFactory, dataContext, myPlace, myActionManager); - if (!myNewVisibleActions.equals(myVisibleActions)) { - // should rebuild UI + if (!myNewVisibleActions.equals(myVisibleActions)) { + // should rebuild UI - final boolean changeBarVisibility = myNewVisibleActions.isEmpty() || myVisibleActions.isEmpty(); + final boolean changeBarVisibility = myNewVisibleActions.isEmpty() || myVisibleActions.isEmpty(); - final ArrayList temp = myVisibleActions; - myVisibleActions = myNewVisibleActions; - myNewVisibleActions = temp; + final ArrayList temp = myVisibleActions; + myVisibleActions = myNewVisibleActions; + myNewVisibleActions = temp; - removeAll(); - mySecondaryActions.removeAll(); - mySecondaryActionsButton = null; - fillToolBar(myVisibleActions, getLayoutPolicy() == AUTO_LAYOUT_POLICY && myOrientation == SwingConstants.HORIZONTAL); + removeAll(); + mySecondaryActions.removeAll(); + mySecondaryActionsButton = null; + fillToolBar(myVisibleActions, getLayoutPolicy() == AUTO_LAYOUT_POLICY && myOrientation == SwingConstants.HORIZONTAL); - if (changeBarVisibility) { - revalidate(); - } - else { - final Container parent = getParent(); - if (parent != null) { - parent.invalidate(); - parent.validate(); + if (changeBarVisibility) { + revalidate(); + } + else { + final Container parent = getParent(); + if (parent != null) { + parent.invalidate(); + parent.validate(); + } + } + repaint(); } } - repaint(); - } + }); } public void setTargetComponent(final JComponent component) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java index 22080c8fe162..d23364e0df28 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/DownloadActionGroup.java @@ -24,7 +24,6 @@ public class DownloadActionGroup extends DefaultActionGroup { @Override public void update(AnActionEvent e) { super.update(e); - if (MavenActionUtil.getProject(e.getDataContext()) == null) return; // todo: remove this when kirill fixes the problem e.getPresentation().setEnabled(MavenActionUtil.getProjectsManager(e.getDataContext()).isMavenizedProject()); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionGroup.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionGroup.java index 861217b18b3e..999f62d4012d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionGroup.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionGroup.java @@ -29,8 +29,6 @@ public class MavenActionGroup extends DefaultActionGroup { } protected boolean isAvailable(AnActionEvent e) { - final DataContext context = e.getDataContext(); - if (MavenActionUtil.getProject(context) == null) return false; - return !MavenActionUtil.getMavenProjects(context).isEmpty(); + return !MavenActionUtil.getMavenProjects(e.getDataContext()).isEmpty(); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionUtil.java index c8554cfcd71c..26114abaefb3 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenActionUtil.java @@ -21,6 +21,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; @@ -33,7 +34,7 @@ public class MavenActionUtil { private MavenActionUtil() { } - @Nullable + @NotNull public static Project getProject(DataContext context) { return PlatformDataKeys.PROJECT.getData(context); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenToggleAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenToggleAction.java index 46bc9e2bcf10..09ad1d396c53 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenToggleAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/actions/MavenToggleAction.java @@ -27,7 +27,7 @@ public abstract class MavenToggleAction extends ToggleAction implements DumbAwar } protected boolean isAvailable(AnActionEvent e) { - return MavenActionUtil.getProject(e.getDataContext()) != null; + return true; } public final boolean isSelected(AnActionEvent e) {