From af90f56e71b518af20ab8d8942aa3b786bbdb4de Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 24 Jan 2012 13:45:19 +0400 Subject: [PATCH 01/11] IDEA-80163 introduce constant in another class: do not dispose range markers too aggressive --- .../introduceField/InplaceIntroduceConstantPopup.java | 9 +++++++++ .../introduce/inplace/InplaceVariableIntroducer.java | 6 ++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java index 1c9bc6f99343..d94713c4e7e4 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java @@ -175,6 +175,7 @@ public class InplaceIntroduceConstantPopup extends AbstractInplaceIntroduceField protected boolean performRefactoring() { JavaRefactoringSettings.getInstance().INTRODUCE_CONSTANT_MOVE_TO_ANOTHER_CLASS = myMoveToAnotherClassCb.isSelected(); if (myMoveToAnotherClassCb.isSelected()) { + myEditor.putUserData(INTRODUCE_RESTART, true); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { @@ -190,7 +191,15 @@ public class InplaceIntroduceConstantPopup extends AbstractInplaceIntroduceField } } finally { + myEditor.putUserData(INTRODUCE_RESTART, false); myEditor.putUserData(ACTIVE_INTRODUCE, null); + releaseResources(); + if (myLocalMarker != null) { + myLocalMarker.dispose(); + } + if (myExprMarker != null) { + myExprMarker.dispose(); + } } } }); diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java index db458a9b5b26..8d7d0c769521 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java @@ -212,8 +212,7 @@ public abstract class InplaceVariableIntroducer extends In } protected void releaseIfNotRestart() { - final Boolean isRestart = myEditor.getUserData(INTRODUCE_RESTART); - if (isRestart == null || !isRestart.booleanValue()) { + if (!isRestart()) { releaseResources(); } } @@ -222,8 +221,7 @@ public abstract class InplaceVariableIntroducer extends In public void finish(boolean success) { super.finish(success); if (myBalloon != null) { - final Boolean isRestart = myEditor.getUserData(INTRODUCE_RESTART); - if (isRestart == null || !isRestart.booleanValue()) { + if (!isRestart()) { myBalloon.hide(); } } From 69c23fe3405f94b27fe713dd37471b7cd433a7de Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Tue, 24 Jan 2012 13:33:22 +0300 Subject: [PATCH 02/11] IDEA-80214 (Run config fails to start without error if checkbox for "Run Maven Goal" is enabled but no goal selected) --- .../jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java index e4830966af79..8d2d85409c13 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java @@ -100,7 +100,7 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider Date: Tue, 24 Jan 2012 14:07:30 +0300 Subject: [PATCH 03/11] IDEA-51412 (Maven: autimatically discover Maven installation under mac and linux ) --- .../java/org/jetbrains/idea/maven/utils/MavenUtil.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java index 32476aec5d0d..ddcff2edc120 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java @@ -474,7 +474,13 @@ public class MavenUtil { return home; } } - + else if (SystemInfo.isLinux) { + File home = new File("/usr/share/maven2"); + if (isValidMavenHome(home)) { + return home; + } + } + return null; } From 0a28e4f628e31a36a0aef38a6f212df19067a93e Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Tue, 24 Jan 2012 16:20:01 +0400 Subject: [PATCH 04/11] Fixed bug in incremental bugfix (jps/incremental). --- .../jetbrains/ether/dependencyView/Mappings.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index fa0eed64d836..7ea13924abdb 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -826,7 +826,9 @@ public class Mappings { if (it.isAnnotation() && it.policy == RetentionPolicy.SOURCE) { debug("Annotation, retention policy = SOURCE => a switch to non-incremental mode requested"); - return incrementalDecision(it.outerClassName, it, affectedFiles); + if (!incrementalDecision(it.outerClassName, it, affectedFiles)) { + return false; + } } if ((addedModifiers & Opcodes.ACC_PROTECTED) > 0) { @@ -866,7 +868,9 @@ public class Mappings { if (removedtargets.contains(ElementType.LOCAL_VARIABLE)) { debug("Annotation, removed target contains LOCAL_VARIABLE => a switch to non-incremental mode requested"); - return incrementalDecision(it.outerClassName, it, affectedFiles); + if (!incrementalDecision(it.outerClassName, it, affectedFiles)) { + return false; + } } if (!removedtargets.isEmpty()) { @@ -1218,7 +1222,9 @@ public class Mappings { if ((f.access & Opcodes.ACC_PRIVATE) == 0 && (f.access & mask) == mask && f.hasValue()) { debug("Field had value and was (non-private) final static => a switch to non-incremental mode requested"); - return incrementalDecision(it.name, f, affectedFiles); + if (!incrementalDecision(it.name, f, affectedFiles)) { + return false; + } } final Collection propagated = u.propagateFieldAccess(f.name, it.name); @@ -1237,7 +1243,9 @@ public class Mappings { if ((field.access & Opcodes.ACC_PRIVATE) == 0 && (field.access & mask) == mask) { if ((d.base() & Difference.ACCESS) > 0 || (d.base() & Difference.VALUE) > 0) { debug("Inline field changed it's access or value => a switch to non-incremental mode requested"); - return incrementalDecision(it.name, field, affectedFiles); + if (!incrementalDecision(it.name, field, affectedFiles)){ + return false; + } } } From 134ef933130975890854212a5c7e4ad3962655f0 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Jan 2012 12:06:43 +0100 Subject: [PATCH 05/11] IDEA-80192 'Goto implementation' doesn't work from completion popup for methods. --- .../codeInsight/navigation/ImplementationSearcher.java | 2 +- .../navigation/actions/GotoImplementationAction.java | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/ImplementationSearcher.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/ImplementationSearcher.java index de052c1e16fd..91a0a98cf6ba 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/ImplementationSearcher.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/ImplementationSearcher.java @@ -42,7 +42,7 @@ public class ImplementationSearcher { boolean onRef = ApplicationManager.getApplication().runReadAction(new Computable() { @Override public Boolean compute() { - return targetElementUtil.findTargetElement(editor, getFlags() & ~TargetElementUtilBase.REFERENCED_ELEMENT_ACCEPTED, offset) == null; + return targetElementUtil.findTargetElement(editor, getFlags() & ~(TargetElementUtilBase.REFERENCED_ELEMENT_ACCEPTED | TargetElementUtilBase.LOOKUP_ITEM_ACCEPTED), offset) == null; } }); return searchImplementations(element, offset, onRef && ApplicationManager.getApplication().runReadAction(new Computable() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoImplementationAction.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoImplementationAction.java index 78ef65166fd1..6fc84c2c212f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoImplementationAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoImplementationAction.java @@ -19,11 +19,8 @@ package com.intellij.codeInsight.navigation.actions; import com.intellij.codeInsight.CodeInsightActionHandler; import com.intellij.codeInsight.actions.BaseCodeInsightAction; import com.intellij.codeInsight.navigation.GotoImplementationHandler; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.psi.PsiFile; +import com.intellij.openapi.project.DumbAware; import com.intellij.psi.search.searches.DefinitionsSearch; public class GotoImplementationAction extends BaseCodeInsightAction implements DumbAware { @@ -31,6 +28,10 @@ public class GotoImplementationAction extends BaseCodeInsightAction implements D return new GotoImplementationHandler(); } + protected boolean isValidForLookup() { + return true; + } + public void update(final AnActionEvent event) { if (!DefinitionsSearch.INSTANCE.hasAnyExecutors()) { event.getPresentation().setVisible(false); From 2dd04b9c016158dc35238fad63bf7e01044584e7 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Jan 2012 12:44:16 +0100 Subject: [PATCH 06/11] IDEA-80186 Completion for 'continue' always inserts semicolon --- .../completion/JavaCompletionData.java | 15 ++++++++++----- .../completion/normal/ContinueLabel.java | 7 +++++++ .../completion/normal/ContinueLabel_after.java | 7 +++++++ .../completion/NormalCompletionTest.groovy | 2 ++ .../com/intellij/patterns/TreeElementPattern.java | 8 ++++---- 5 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 78d73295c387..86d61df0968d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -602,12 +602,17 @@ public class JavaCompletionData extends JavaAwareCompletionData{ LookupElement br = createKeyword(position, PsiKeyword.BREAK); LookupElement cont = createKeyword(position, PsiKeyword.CONTINUE); - if (!psiElement().insideSequence(true, psiElement(PsiLabeledStatement.class), - or(psiElement(PsiFile.class), psiElement(PsiMethod.class), - psiElement(PsiClassInitializer.class))).accepts(position)) { - br = TailTypeDecorator.withTail(br, TailType.SEMICOLON); - cont = TailTypeDecorator.withTail(cont, TailType.SEMICOLON); + TailType tailType; + if (psiElement().insideSequence(true, psiElement(PsiLabeledStatement.class), + or(psiElement(PsiFile.class), psiElement(PsiMethod.class), + psiElement(PsiClassInitializer.class))).accepts(position)) { + tailType = TailType.HUMBLE_SPACE; } + else { + tailType = TailType.SEMICOLON; + } + br = TailTypeDecorator.withTail(br, tailType); + cont = TailTypeDecorator.withTail(cont, tailType); if (loop != null && new InsideElementFilter(new ClassFilter(PsiStatement.class)).isAcceptable(position, loop)) { result.addElement(br); diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java new file mode 100644 index 000000000000..27341ba94f2f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java @@ -0,0 +1,7 @@ +public class Util { + void foo(int a, int b) { + Outer: for (int i = 0; i < 239; i++) { + conti + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java new file mode 100644 index 000000000000..c1b9a66e71bb --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java @@ -0,0 +1,7 @@ +public class Util { + void foo(int a, int b) { + Outer: for (int i = 0; i < 239; i++) { + continue + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 10782dea9313..dc148649b4f3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -520,6 +520,8 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { checkResult() } + public void testContinueLabel() throws Throwable { doTest(); } + public void testAnonymousProcess() { myFixture.addClass 'package java.lang; public class Process {}' myFixture.addClass ''' diff --git a/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java b/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java index 050c8c049e34..9f843d7cb88c 100644 --- a/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java +++ b/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java @@ -171,13 +171,13 @@ public abstract class TreeElementPattern... patterns) { - return with(new PatternCondition("condInside") { + return with(new PatternCondition("insideSequence") { public boolean accepts(@NotNull final T t, final ProcessingContext context) { int i = 0; ParentType element = strict ? getParent(t) : t; - while (element != null && i >= patterns.length) { + while (element != null && i < patterns.length) { for (int j = i; j < patterns.length; j++) { - if (patterns[j].getCondition().accepts(t, context)) { + if (patterns[j].accepts(element, context)) { if (i != j) return false; i++; break; @@ -185,7 +185,7 @@ public abstract class TreeElementPattern Date: Tue, 24 Jan 2012 13:32:31 +0100 Subject: [PATCH 07/11] track in which multiple-tree file PsiAnchor was created (EA-33146) --- .../lang-impl/src/com/intellij/psi/PsiAnchor.java | 5 ++++- .../psi/impl/smartPointers/SelfElementInfo.java | 11 +++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/PsiAnchor.java b/platform/lang-impl/src/com/intellij/psi/PsiAnchor.java index c3a4289e08e9..042dbf6bd1fc 100644 --- a/platform/lang-impl/src/com/intellij/psi/PsiAnchor.java +++ b/platform/lang-impl/src/com/intellij/psi/PsiAnchor.java @@ -141,6 +141,7 @@ public abstract class PsiAnchor { private final VirtualFile myVirtualFile; private final Project myProject; private final Language myLanguage; + private final Language myFileLanguage; private final int myStartOffset; private final int myEndOffset; private final Class myClass; @@ -157,6 +158,7 @@ public abstract class PsiAnchor { myEndOffset = endOffset; myClass = aClass; myLanguage = language; + myFileLanguage = file.getLanguage(); } @Override @@ -178,8 +180,9 @@ public abstract class PsiAnchor { } @Override + @Nullable public PsiFile getFile() { - return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject); + return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject, myLanguage); } @Override diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 2c7e5ac35389..2f25cbf6732d 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -213,9 +213,13 @@ public class SelfElementInfo implements SmartPointerElementInfo { @Nullable public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project) { + return restoreFileFromVirtual(virtualFile, project, null); + } + @Nullable + public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project, @Nullable final Language language) { if (virtualFile == null) return null; - return ApplicationManager.getApplication().runReadAction(new Computable() { + return ApplicationManager.getApplication().runReadAction(new NullableComputable() { @Override public PsiFile compute() { VirtualFile child; @@ -230,7 +234,10 @@ public class SelfElementInfo implements SmartPointerElementInfo { } if (child == null || !child.isValid()) return null; PsiFile file = PsiManager.getInstance(project).findFile(child); - if (file == null || !file.isValid()) return null; + if (file != null && language != null) { + return file.getViewProvider().getPsi(language); + } + return file; } }); From 05bcacf5a306b2035e78773d42dc8e57b104680a Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Tue, 24 Jan 2012 16:35:43 +0400 Subject: [PATCH 08/11] Fixed bug in incremental bugfix (jps/incremental). --- .../fieldProperties/nonIncremental1.log | 24 + .../nonIncremental1/.idea/.name | 1 + .../nonIncremental1/.idea/compiler.xml | 21 + .../.idea/copyright/profiles_settings.xml | 5 + .../nonIncremental1/.idea/encodings.xml | 5 + .../nonIncremental1/.idea/misc.xml | 26 + .../nonIncremental1/.idea/modules.xml | 9 + .../.idea/scopes/scope_settings.xml | 5 + .../nonIncremental1/.idea/uiDesigner.xml | 125 +++++ .../nonIncremental1/.idea/vcs.xml | 7 + .../nonIncremental1/.idea/workspace.xml | 449 ++++++++++++++++++ .../nonIncremental1/nonIncremental1.iml | 12 + .../nonIncremental1/src-A$A.java.new | 12 + .../nonIncremental1/src/A/A.java | 12 + .../nonIncremental1/src/A/C.java | 14 + .../nonIncremental1/src/B/M.java | 14 + .../fieldProperties/nonIncremental2.log | 26 + .../nonIncremental2/.idea/.name | 1 + .../nonIncremental2/src-A$A.java.new | 12 + .../nonIncremental2/src/A/A.java | 12 + .../nonIncremental2/src/A/C.java | 14 + .../nonIncremental2/src/B/M.java | 13 + .../nonIncremental3/src-A$A.java.new | 12 + .../nonIncremental3/src/A/A.java | 12 + .../nonIncremental3/src/A/C.java | 14 + .../nonIncremental3/src/B/M.java | 14 + .../.idea/ant.xml | 7 + .../membersChange/addMethod/.idea/.name | 1 + 28 files changed, 879 insertions(+) create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1.log create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/.name create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/compiler.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/copyright/profiles_settings.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/encodings.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/misc.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/modules.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/scopes/scope_settings.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/uiDesigner.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/vcs.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/.idea/workspace.xml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/nonIncremental1.iml create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/src-A$A.java.new create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/src/A/A.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/src/A/C.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental1/src/B/M.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2.log create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2/.idea/.name create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2/src-A$A.java.new create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2/src/A/A.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2/src/A/C.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental2/src/B/M.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental3/src-A$A.java.new create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental3/src/A/A.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental3/src/A/C.java create mode 100644 jps/testData/incremental/fieldProperties/nonIncremental3/src/B/M.java create mode 100644 jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/ant.xml create mode 100644 jps/testData/incremental/membersChange/addMethod/.idea/.name diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1.log b/jps/testData/incremental/fieldProperties/nonIncremental1.log new file mode 100644 index 000000000000..00c785a420df --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1.log @@ -0,0 +1,24 @@ +Request to make modules: +module nonIncremental1 +End of request +digraph X { + nonIncremental1[label="nonIncremental1"]; +} +digraph X { + nonIncremental1[label="nonIncremental1"]; +} +Propagated modules: +module nonIncremental1 +End of propagated +Cleaning output files: +out/production/nonIncremental1/A/A.class +End of files +Compiling files: +src/A/A.java +End of files +Cleaning output files: +out/production/nonIncremental1/A/C.class +End of files +Compiling files: +src/A/C.java +End of files diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/.name b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/.name new file mode 100644 index 000000000000..cc201f137875 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/.name @@ -0,0 +1 @@ +nonIncremental1 \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/compiler.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/compiler.xml new file mode 100644 index 000000000000..a1b41c52c724 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/compiler.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/copyright/profiles_settings.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000000..3572571ad83c --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/copyright/profiles_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/encodings.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/encodings.xml new file mode 100644 index 000000000000..e206d70d8595 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/misc.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/misc.xml new file mode 100644 index 000000000000..8a6459d2c612 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/misc.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + 1.6 + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/modules.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/modules.xml new file mode 100644 index 000000000000..e41db5c2de60 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/scopes/scope_settings.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000000..922003b8433b --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/uiDesigner.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/uiDesigner.xml new file mode 100644 index 000000000000..3b0002030884 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/uiDesigner.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/vcs.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/vcs.xml new file mode 100644 index 000000000000..def6a6a18457 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/workspace.xml b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/workspace.xml new file mode 100644 index 000000000000..f545b922a8ae --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/.idea/workspace.xml @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1327315772338 + 1327315772338 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/nonIncremental1.iml b/jps/testData/incremental/fieldProperties/nonIncremental1/nonIncremental1.iml new file mode 100644 index 000000000000..d5c074327501 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/nonIncremental1.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/src-A$A.java.new b/jps/testData/incremental/fieldProperties/nonIncremental1/src-A$A.java.new new file mode 100644 index 000000000000..f4a60220b609 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/src-A$A.java.new @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + final static int x = 1025; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/A.java b/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/A.java new file mode 100644 index 000000000000..2d38a07a9509 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/A.java @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + final static int x = 1024; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/C.java b/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/C.java new file mode 100644 index 000000000000..60ac03a014ba --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/src/A/C.java @@ -0,0 +1,14 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class C { + public int get(){ + return A.x; + } +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1/src/B/M.java b/jps/testData/incremental/fieldProperties/nonIncremental1/src/B/M.java new file mode 100644 index 000000000000..fb5b71fd493e --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental1/src/B/M.java @@ -0,0 +1,14 @@ +package B; + +import A.C; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:52 + * To change this template use File | Settings | File Templates. + */ +public class M { + int y = new C().get(); +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2.log b/jps/testData/incremental/fieldProperties/nonIncremental2.log new file mode 100644 index 000000000000..003d98cc4518 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2.log @@ -0,0 +1,26 @@ +Request to make modules: +module NonIncremental2 +End of request +digraph X { + NonIncremental2[label="NonIncremental2"]; +} +digraph X { + NonIncremental2[label="NonIncremental2"]; +} +Propagated modules: +module NonIncremental2 +End of propagated +Cleaning output files: +out/production/NonIncremental2/A/A.class +End of files +Compiling files: +src/A/A.java +End of files +Cleaning output files: +out/production/NonIncremental2/A/C.class +out/production/NonIncremental2/B/M.class +End of files +Compiling files: +src/A/C.java +src/B/M.java +End of files diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/.name b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/.name new file mode 100644 index 000000000000..a254a66a7aeb --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/.name @@ -0,0 +1 @@ +nonIncremental2 \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/src-A$A.java.new b/jps/testData/incremental/fieldProperties/nonIncremental2/src-A$A.java.new new file mode 100644 index 000000000000..612f1020f7f3 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/src-A$A.java.new @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + protected final static int x = 1025; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/A.java b/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/A.java new file mode 100644 index 000000000000..423ce28bfb62 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/A.java @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + protected final static int x = 1024; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/C.java b/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/C.java new file mode 100644 index 000000000000..60ac03a014ba --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/src/A/C.java @@ -0,0 +1,14 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class C { + public int get(){ + return A.x; + } +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/M.java b/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/M.java new file mode 100644 index 000000000000..b3d5b57210e9 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/M.java @@ -0,0 +1,13 @@ +package B; + +import A.C; +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:52 + * To change this template use File | Settings | File Templates. + */ +public class M extends A.A { + int y = A.A.x; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental3/src-A$A.java.new b/jps/testData/incremental/fieldProperties/nonIncremental3/src-A$A.java.new new file mode 100644 index 000000000000..f4a60220b609 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental3/src-A$A.java.new @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + final static int x = 1025; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/A.java b/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/A.java new file mode 100644 index 000000000000..2d38a07a9509 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/A.java @@ -0,0 +1,12 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class A { + final static int x = 1024; +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/C.java b/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/C.java new file mode 100644 index 000000000000..60ac03a014ba --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental3/src/A/C.java @@ -0,0 +1,14 @@ +package A; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:51 + * To change this template use File | Settings | File Templates. + */ +public class C { + public int get(){ + return A.x; + } +} diff --git a/jps/testData/incremental/fieldProperties/nonIncremental3/src/B/M.java b/jps/testData/incremental/fieldProperties/nonIncremental3/src/B/M.java new file mode 100644 index 000000000000..fb5b71fd493e --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental3/src/B/M.java @@ -0,0 +1,14 @@ +package B; + +import A.C; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:52 + * To change this template use File | Settings | File Templates. + */ +public class M { + int y = new C().get(); +} diff --git a/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/ant.xml b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/ant.xml new file mode 100644 index 000000000000..2581ca3fe84c --- /dev/null +++ b/jps/testData/incremental/generics/changeToCovariantMethodInBase3/.idea/ant.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/jps/testData/incremental/membersChange/addMethod/.idea/.name b/jps/testData/incremental/membersChange/addMethod/.idea/.name new file mode 100644 index 000000000000..dbc10966d648 --- /dev/null +++ b/jps/testData/incremental/membersChange/addMethod/.idea/.name @@ -0,0 +1 @@ +addMethod \ No newline at end of file From f8e5d17e6dcc105eb31e821d75b57c021f40ce4a Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 24 Jan 2012 16:53:49 +0400 Subject: [PATCH 09/11] js debugger for Chrome switched to new protocol (IDEA-80119) --- .../ide/browsers/BrowsersConfiguration.java | 22 +++++++++++++++---- .../ide/browsers/chrome/ChromeSettings.java | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java b/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java index 039635ef990c..fdb43c9d78a3 100644 --- a/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java +++ b/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java @@ -25,11 +25,14 @@ import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.Conditions; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.SystemProperties; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; import com.intellij.util.xmlb.XmlSerializer; @@ -201,7 +204,7 @@ public class BrowsersConfiguration implements PersistentStateComponent BrowserUtil.launchBrowser(url); } else { - getInstance().doLaunchBrowser(family, url, ArrayUtil.EMPTY_STRING_ARRAY, false); + getInstance().doLaunchBrowser(family, url, ArrayUtil.EMPTY_STRING_ARRAY, Conditions.alwaysTrue(), false); } } @@ -221,12 +224,22 @@ public class BrowsersConfiguration implements PersistentStateComponent @NotNull final String url, final boolean forceOpenNewInstanceOnMac, String... parameters) { - getInstance().doLaunchBrowser(family, url, parameters, forceOpenNewInstanceOnMac); + launchBrowser(family, url, forceOpenNewInstanceOnMac, Conditions.alwaysTrue(), parameters); + } + + public static void launchBrowser(final @NotNull BrowserFamily family, + @NotNull final String url, + final boolean forceOpenNewInstanceOnMac, + final Condition browserSpecificParametersFilter, + String... parameters) { + getInstance().doLaunchBrowser(family, url, parameters, browserSpecificParametersFilter, forceOpenNewInstanceOnMac); } private void doLaunchBrowser(final BrowserFamily family, @NotNull String url, - @NotNull String[] additionalParameters, final boolean forceOpenNewInstanceOnMac) { + @NotNull String[] additionalParameters, + @NotNull Condition browserSpecificParametersFilter, + final boolean forceOpenNewInstanceOnMac) { final WebBrowserSettings settings = getBrowserSettings(family); final String path = settings.getPath(); if (path != null && path.length() > 0) { @@ -234,7 +247,8 @@ public class BrowsersConfiguration implements PersistentStateComponent try { final BrowserSpecificSettings specificSettings = settings.getBrowserSpecificSettings(); final String[] browserParameters = specificSettings != null ? specificSettings.getAdditionalParameters() : ArrayUtil.EMPTY_STRING_ARRAY; - String[] parameters = ArrayUtil.mergeArrays(browserParameters, additionalParameters); + String[] parameters = ArrayUtil.mergeArrays(ContainerUtil.findAllAsArray(browserParameters, browserSpecificParametersFilter), + additionalParameters); launchBrowser(path, url, forceOpenNewInstanceOnMac, parameters); } catch (IOException e) { diff --git a/xml/impl/src/com/intellij/ide/browsers/chrome/ChromeSettings.java b/xml/impl/src/com/intellij/ide/browsers/chrome/ChromeSettings.java index 40d43763179e..9e470ac2022c 100644 --- a/xml/impl/src/com/intellij/ide/browsers/chrome/ChromeSettings.java +++ b/xml/impl/src/com/intellij/ide/browsers/chrome/ChromeSettings.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; * @author nik */ public class ChromeSettings extends BrowserSpecificSettings { - @NonNls public static final String REMOTE_SHELL_PORT_ARG = "--remote-shell-port="; + @NonNls public static final String REMOTE_DEBUGGING_PORT_ARG = "--remote-debugging-port="; @NonNls public static final String USER_DATA_DIR_ARG = "--user-data-dir="; public static final int DEFAULT_REMOTE_SHELL_PORT = 7930; private String myUserDataDirectoryPath; @@ -88,7 +88,7 @@ public class ChromeSettings extends BrowserSpecificSettings { String[] remoteShellArg; if (myEnableRemoteDebug) { - remoteShellArg = new String[]{REMOTE_SHELL_PORT_ARG + myRemoteShellPort}; + remoteShellArg = new String[]{REMOTE_DEBUGGING_PORT_ARG + myRemoteShellPort}; } else { remoteShellArg = ArrayUtil.EMPTY_STRING_ARRAY; From 400c334cc14da875c8153d87fa4dec357f61b4b3 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Jan 2012 14:28:49 +0100 Subject: [PATCH 10/11] the attribute is fixed-size --- .../openapi/vcs/changes/LastUnchangedContentTracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LastUnchangedContentTracker.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LastUnchangedContentTracker.java index f94da588ca6b..636d85ee0f75 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LastUnchangedContentTracker.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LastUnchangedContentTracker.java @@ -36,7 +36,7 @@ public class LastUnchangedContentTracker { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.LastUnchangedContentTracker"); private static final Key LAST_TS_KEY = Key.create("LAST_TS_KEY"); private static final FileAttribute LAST_TS_ATTR = new FileAttribute("LAST_TS_ATTR", 0, true); - private static final FileAttribute ACQUIRED_CONTENT_ATTR = new FileAttribute("ACQUIRED_CONTENT_ATTR", 0, false); + private static final FileAttribute ACQUIRED_CONTENT_ATTR = new FileAttribute("ACQUIRED_CONTENT_ATTR", 1, true); public static void updateLastUnchangedContent(@NotNull VirtualFile file) { Long lastTs = getLastSavedStamp(file); From 463b67202bd42c139bb8fc3c50f92c3c753366de Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Jan 2012 14:29:26 +0100 Subject: [PATCH 11/11] don't track last unchanged content for non-perforce vcs now --- .../vcs-api/src/com/intellij/openapi/vcs/AbstractVcs.java | 4 ++++ .../intellij/openapi/vcs/changes/ChangeListManagerImpl.java | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcs.java b/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcs.java index f982d78ad00a..6419660c4b53 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcs.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcs.java @@ -243,6 +243,10 @@ public abstract class AbstractVcs extends S return true; } + public boolean needsLastUnchangedContent() { + return false; + } + public static boolean fileInVcsByFileStatus(final Project project, final FilePath path) { final VirtualFile virtualFile = path.getVirtualFile(); if (virtualFile != null) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java index 6d2c63326af6..a1e02e799576 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java @@ -450,7 +450,9 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec }); for (VcsDirtyScope scope : scopes) { - updateLastUnchangedContents(scope); + if (scope.getVcs().needsLastUnchangedContent()) { + updateLastUnchangedContents(scope); + } } myChangesViewManager.scheduleRefresh(); @@ -644,7 +646,7 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec for (VcsDirectoryMapping mapping : vcsManager.getDirectoryMappings()) { final AbstractVcs vcs = vcsManager.findVcsByName(mapping.getVcs()); final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(mapping.getDirectory()); - if (vcs != null && file != null) { + if (vcs != null && file != null && vcs.needsLastUnchangedContent()) { if (indicator != null) { indicator.setText(mapping.getDirectory()); }