diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/macro/ReplaceUnderscoresWithSpacesMacro.java b/platform/lang-impl/src/com/intellij/codeInsight/template/macro/ReplaceUnderscoresWithSpacesMacro.java index 7373015f1b99..26041eb068ad 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/macro/ReplaceUnderscoresWithSpacesMacro.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/macro/ReplaceUnderscoresWithSpacesMacro.java @@ -45,6 +45,9 @@ public class ReplaceUnderscoresWithSpacesMacro implements Macro { return null; } Result param_result = params[0].calculateResult(context); + if (param_result == null) { + return null; + } return execute(param_result); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java index 0702fc30acdb..95c0772ca04b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java @@ -325,9 +325,14 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { public void visitUnaryExpression(GrUnaryExpression expression) { final GrExpression operand = expression.getOperand(); if (operand != null) { - myNegate = !myNegate; + final boolean negation = expression.getOperationTokenType() == GroovyElementTypes.mLNOT; + if (negation) { + myNegate = !myNegate; + } operand.accept(this); - myNegate = !myNegate; + if (negation) { + myNegate = !myNegate; + } } } @@ -344,6 +349,9 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { final ReadWriteVariableInstructionImpl i = new ReadWriteVariableInstructionImpl(referenceExpression, myInstructionNumber++, false); addNode(i); addNode(new ReadWriteVariableInstructionImpl(referenceExpression, myInstructionNumber++, true)); + if (referenceExpression.getParent() instanceof GrUnaryExpression) { + addNode(new ReadWriteVariableInstructionImpl(referenceExpression, myInstructionNumber++, false)); + } checkPending(i); } else { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/LibrariesUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/LibrariesUtil.java index 16dd55f623d8..7979fdb8ded0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/LibrariesUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/LibrariesUtil.java @@ -50,22 +50,34 @@ public class LibrariesUtil { final ArrayList libraries = new ArrayList(); ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - ModuleRootManager manager = ModuleRootManager.getInstance(module); - for (OrderEntry entry : manager.getOrderEntries()) { - if (entry instanceof LibraryOrderEntry) { - LibraryOrderEntry libEntry = (LibraryOrderEntry)entry; - Library library = libEntry.getLibrary(); - if (condition.value(library)) { - libraries.add(library); - } - } - } + populateOrderEntries(module, condition, libraries, false); } }); return libraries.toArray(new Library[libraries.size()]); } + private static void populateOrderEntries(Module module, Condition condition, ArrayList libraries, boolean exportedOnly) { + for (OrderEntry entry : ModuleRootManager.getInstance(module).getOrderEntries()) { + if (entry instanceof LibraryOrderEntry) { + LibraryOrderEntry libEntry = (LibraryOrderEntry)entry; + if (exportedOnly && !libEntry.isExported()) { + continue; + } + + Library library = libEntry.getLibrary(); + if (condition.value(library)) { + libraries.add(library); + } + } else if (entry instanceof ModuleOrderEntry) { + final Module dep = ((ModuleOrderEntry)entry).getModule(); + if (module != null) { + populateOrderEntries(dep, condition, libraries, true); + } + } + } + } + public static Library[] getGlobalLibraries(Condition condition) { LibraryTable table = LibraryTablesRegistrar.getInstance().getLibraryTable(); List libs = ContainerUtil.findAll(table.getLibraries(), condition); 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 2e18835f8380..37b30df69102 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java @@ -208,6 +208,7 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { public void testByteArrayArgument() throws Exception {doTest();} public void testForLoopWithNestedEndlessLoop() throws Exception {doTest(new UnassignedVariableAccessInspection());} + public void testPrefixIncrementCfa() throws Exception {doTest(new UnusedDefInspection());} public void testIfIncrementElseReturn() throws Exception {doTest(new UnusedDefInspection()); } public void testArrayLikeAccess() throws Exception {doTest();} diff --git a/plugins/groovy/testdata/groovy/controlFlow/for1.test b/plugins/groovy/testdata/groovy/controlFlow/for1.test index cefbd1ce77bf..0f0ebbd84c66 100644 --- a/plugins/groovy/testdata/groovy/controlFlow/for1.test +++ b/plugins/groovy/testdata/groovy/controlFlow/for1.test @@ -3,7 +3,8 @@ for(int i = 0; i < 10; i++); 0(1) element: null 1(2) WRITE i 2(3) element: For statement -3(4,6) READ i +3(4,7) READ i 4(5) READ i -5(2) WRITE i -6() element: null \ No newline at end of file +5(6) WRITE i +6(2) READ i +7() element: null \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/controlFlow/while1.test b/plugins/groovy/testdata/groovy/controlFlow/while1.test index f0cd07908070..92871683096d 100644 --- a/plugins/groovy/testdata/groovy/controlFlow/while1.test +++ b/plugins/groovy/testdata/groovy/controlFlow/while1.test @@ -8,7 +8,8 @@ while (true) { 1(2) WRITE i 2(3) element: WHILE statement 3(4,5) element: IF statement -4(7) READ i +4(8) READ i 5(6) READ i -6(2) WRITE i -7() element: null \ No newline at end of file +6(7) WRITE i +7(2) READ i +8() element: null \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/controlFlow/whileNonConstant.test b/plugins/groovy/testdata/groovy/controlFlow/whileNonConstant.test index 3f126683e0eb..f264e1407498 100644 --- a/plugins/groovy/testdata/groovy/controlFlow/whileNonConstant.test +++ b/plugins/groovy/testdata/groovy/controlFlow/whileNonConstant.test @@ -7,9 +7,10 @@ while (condition()) { 0(1) element: null 1(2) WRITE i 2(3) element: WHILE statement -3(4,8) READ condition +3(4,9) READ condition 4(5,6) element: IF statement -5(8) READ i +5(9) READ i 6(7) READ i -7(2) WRITE i -8() element: null \ No newline at end of file +7(8) WRITE i +8(2) READ i +9() element: null \ No newline at end of file diff --git a/plugins/groovy/testdata/highlighting/PrefixIncrementCfa.groovy b/plugins/groovy/testdata/highlighting/PrefixIncrementCfa.groovy new file mode 100644 index 000000000000..711bb7b8c062 --- /dev/null +++ b/plugins/groovy/testdata/highlighting/PrefixIncrementCfa.groovy @@ -0,0 +1,7 @@ +int idx +idx = 2 +idx = 3 +if (++idx == 8) { //Assignment is used here + idx = 33 +} +print idx \ No newline at end of file diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/embedder/MavenEmbedderFactory.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/embedder/MavenEmbedderFactory.java index a38e1ed4f159..0a6336127659 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/embedder/MavenEmbedderFactory.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/embedder/MavenEmbedderFactory.java @@ -63,7 +63,7 @@ public class MavenEmbedderFactory { Arrays.asList("clean", "validate", "generate-sources", "process-sources", "generate-resources", "process-resources", "compile", "process-classes", "generate-test-sources", "process-test-sources", "generate-test-resources", - "process-test-resources", "test-compile", "test", "package", "pre-integration-test", "integration-test", + "process-test-resources", "test-compile", "test", "prepare-package", "package", "pre-integration-test", "integration-test", "post-integration-test", "verify", "install", "site", "deploy"); private static final List BASIC_PHASES = diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java index b2ad6a49d80d..02e5cd2ab8f3 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java @@ -107,7 +107,7 @@ public class MavenImportingSettings implements Cloneable { this.updateFoldersOnImportPhase = updateFoldersOnImportPhase; } - public boolean shouldDownloadSourcesAutomatically() { + public boolean isDownloadSourcesAutomatically() { return downloadSourcesAutomatically; } @@ -115,7 +115,7 @@ public class MavenImportingSettings implements Cloneable { this.downloadSourcesAutomatically = Value; } - public boolean shouldDownloadDocsAutomatically() { + public boolean isDownloadDocsAutomatically() { return downloadDocsAutomatically; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettingsForm.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettingsForm.java index 977e8ed1714a..59a9a02a9716 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettingsForm.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettingsForm.java @@ -118,8 +118,8 @@ public class MavenImportingSettingsForm { myUpdateFoldersOnImportPhaseComboBox.setSelectedItem(data.getUpdateFoldersOnImportPhase()); - myDownloadSourcesCheckBox.setSelected(data.shouldDownloadSourcesAutomatically()); - myDownloadDocsCheckBox.setSelected(data.shouldDownloadDocsAutomatically()); + myDownloadSourcesCheckBox.setSelected(data.isDownloadSourcesAutomatically()); + myDownloadDocsCheckBox.setSelected(data.isDownloadDocsAutomatically()); updateControls(); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index e319fa3271ad..f34cb4e8d9f3 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -338,8 +338,8 @@ public class MavenProjectsManager extends SimpleProjectComponent } scheduleArtifactsDownloading(Collections.singleton(projectWithChanges.first), null, - getImportingSettings().shouldDownloadSourcesAutomatically(), - getImportingSettings().shouldDownloadDocsAutomatically(), + getImportingSettings().isDownloadSourcesAutomatically(), + getImportingSettings().isDownloadDocsAutomatically(), null); scheduleForNextImport(projectWithChanges); }