From 06114d89848639cf1177c9d2a4edadbff2c1b1f3 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 28 Feb 2013 20:01:11 +0100 Subject: [PATCH 1/4] IDEA-99822 Make: Reload java source in different encoding does not trigger incremental make --- .../org/jetbrains/jps/builders/BuildTarget.java | 2 +- .../jetbrains/jps/incremental/BuildOperations.java | 4 ++-- .../jps/incremental/ModuleBuildTarget.java | 13 +++++++++++-- .../jetbrains/jps/incremental/ResourcesTarget.java | 5 +++-- .../incremental/artifacts/ArtifactBuildTarget.java | 5 +++-- .../storage/BuildTargetConfiguration.java | 14 +++++++------- .../jps/maven/model/impl/MavenResourcesTarget.java | 3 ++- 7 files changed, 29 insertions(+), 17 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java index c8e992f89181..4fd157e29c5d 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java @@ -46,7 +46,7 @@ public abstract class BuildTarget { public abstract Collection> computeDependencies(BuildTargetRegistry targetRegistry, TargetOutputIndex outputIndex); - public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) { + public void writeConfiguration(CompileContext context, PrintWriter out) { } @NotNull diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildOperations.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildOperations.java index 6f2015e88bc4..6a95e49e3144 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildOperations.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildOperations.java @@ -51,13 +51,13 @@ public class BuildOperations { if (context.isProjectRebuild()) { FSOperations.markDirtyFiles(context, target, timestamps, true, null, null); pd.fsState.markInitialScanPerformed(target); - configuration.save(); + configuration.save(context); } else if (context.getScope().isRecompilationForced(target) || configuration.isTargetDirty(context) || configuration.outputRootWasDeleted(context)) { initTargetFSState(context, target, true); IncProjectBuilder.clearOutputFiles(context, target); pd.dataManager.cleanTargetStorages(target); - configuration.save(); + configuration.save(context); } else if (!pd.fsState.isInitialScanPerformed(target)) { initTargetFSState(context, target, false); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java index 2ae917dcf319..d85da8f9a414 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java @@ -23,7 +23,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ProjectPaths; import org.jetbrains.jps.api.GlobalOptions; -import org.jetbrains.jps.builders.*; +import org.jetbrains.jps.builders.BuildTarget; +import org.jetbrains.jps.builders.BuildTargetRegistry; +import org.jetbrains.jps.builders.ModuleBasedTarget; +import org.jetbrains.jps.builders.TargetOutputIndex; import org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; @@ -153,7 +156,7 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget roots = buildRootIndex.getTargetRoots(this, null); + final BuildRootIndex rootIndex = context.getProjectDescriptor().getBuildRootIndex(); + final List roots = rootIndex.getTargetRoots(this, null); for (ResourceRootDescriptor root : roots) { fingerprint += FileUtil.fileHashCode(root.getRootFile()); fingerprint += root.getPackagePrefix().hashCode(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java index 44a91bd1314b..1bacc2c70795 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java @@ -106,9 +106,10 @@ public class ArtifactBuildTarget extends BuildTarget { } @Override - public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) { + public void writeConfiguration(CompileContext context, PrintWriter out) { out.println(StringUtil.notNullize(myArtifact.getOutputPath())); - for (ArtifactRootDescriptor descriptor : buildRootIndex.getTargetRoots(this, null)) { + final BuildRootIndex rootIndex = context.getProjectDescriptor().getBuildRootIndex(); + for (ArtifactRootDescriptor descriptor : rootIndex.getTargetRoots(this, null)) { descriptor.writeConfiguration(out); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java index 8d926f89c273..5b001facff92 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java @@ -65,7 +65,7 @@ public class BuildTargetConfiguration { } public boolean isTargetDirty(CompileContext context) { - final String currentState = getCurrentState(); + final String currentState = getCurrentState(context); if (!currentState.equals(myConfiguration)) { LOG.debug(myTarget + " configuration was changed:"); LOG.debug("Old:"); @@ -88,13 +88,13 @@ public class BuildTargetConfiguration { return false; } - public void save() { + public void save(CompileContext context) { try { File configFile = getConfigFile(); FileUtil.createParentDirs(configFile); Writer out = new BufferedWriter(new FileWriter(configFile)); try { - String current = getCurrentState(); + String current = getCurrentState(context); out.write(current); myConfiguration = current; } @@ -115,18 +115,18 @@ public class BuildTargetConfiguration { return new File(myTargetsState.getDataPaths().getTargetDataRoot(myTarget), "nonexistent-outputs.dat"); } - private String getCurrentState() { + private String getCurrentState(CompileContext context) { String state = myCurrentState; if (state == null) { - myCurrentState = state = saveToString(); + myCurrentState = state = saveToString(context); } return state; } - private String saveToString() { + private String saveToString(CompileContext context) { StringWriter out = new StringWriter(); //noinspection IOResourceOpenedButNotSafelyClosed - myTarget.writeConfiguration(new PrintWriter(out), myTargetsState.getDataPaths(), myTargetsState.getBuildRootIndex()); + myTarget.writeConfiguration(context, new PrintWriter(out)); return out.toString(); } diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java index fdfc7fe63b38..8cc12d1f9916 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java @@ -141,7 +141,8 @@ public class MavenResourcesTarget extends ModuleBasedTarget Date: Fri, 1 Mar 2013 13:39:08 +0100 Subject: [PATCH 2/4] IDEA-99822 Make: Reload java source in different encoding does not trigger incremental make; passing ProjectDescriptor instead of Context object as BuildTarget configuration calculation depends on model only --- .../src/org/jetbrains/jps/builders/BuildTarget.java | 3 ++- .../src/org/jetbrains/jps/incremental/ModuleBuildTarget.java | 5 +++-- .../src/org/jetbrains/jps/incremental/ResourcesTarget.java | 5 +++-- .../jps/incremental/artifacts/ArtifactBuildTarget.java | 5 +++-- .../jps/incremental/storage/BuildTargetConfiguration.java | 2 +- .../jetbrains/jps/maven/model/impl/MavenResourcesTarget.java | 5 +++-- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java index 4fd157e29c5d..08c452a048ec 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildTarget.java @@ -18,6 +18,7 @@ package org.jetbrains.jps.builders; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.indices.IgnoredFileIndex; import org.jetbrains.jps.indices.ModuleExcludeIndex; @@ -46,7 +47,7 @@ public abstract class BuildTarget { public abstract Collection> computeDependencies(BuildTargetRegistry targetRegistry, TargetOutputIndex outputIndex); - public void writeConfiguration(CompileContext context, PrintWriter out) { + public void writeConfiguration(ProjectDescriptor pd, PrintWriter out) { } @NotNull diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java index d85da8f9a414..0763f17a3ccb 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java @@ -31,6 +31,7 @@ import org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.indices.IgnoredFileIndex; import org.jetbrains.jps.indices.ModuleExcludeIndex; import org.jetbrains.jps.model.JpsModel; @@ -156,7 +157,7 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget roots = rootIndex.getTargetRoots(this, null); for (ResourceRootDescriptor root : roots) { fingerprint += FileUtil.fileHashCode(root.getRootFile()); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java index 1bacc2c70795..8370c752549b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuildTarget.java @@ -22,6 +22,7 @@ import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.builders.*; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.artifacts.builders.LayoutElementBuildersRegistry; import org.jetbrains.jps.incremental.artifacts.impl.JpsArtifactUtil; @@ -106,9 +107,9 @@ public class ArtifactBuildTarget extends BuildTarget { } @Override - public void writeConfiguration(CompileContext context, PrintWriter out) { + public void writeConfiguration(ProjectDescriptor pd, PrintWriter out) { out.println(StringUtil.notNullize(myArtifact.getOutputPath())); - final BuildRootIndex rootIndex = context.getProjectDescriptor().getBuildRootIndex(); + final BuildRootIndex rootIndex = pd.getBuildRootIndex(); for (ArtifactRootDescriptor descriptor : rootIndex.getTargetRoots(this, null)) { descriptor.writeConfiguration(out); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java index 5b001facff92..abf0ca97aaf9 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildTargetConfiguration.java @@ -126,7 +126,7 @@ public class BuildTargetConfiguration { private String saveToString(CompileContext context) { StringWriter out = new StringWriter(); //noinspection IOResourceOpenedButNotSafelyClosed - myTarget.writeConfiguration(context, new PrintWriter(out)); + myTarget.writeConfiguration(context.getProjectDescriptor(), new PrintWriter(out)); return out.toString(); } diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java index 8cc12d1f9916..ccb6c7ab4eae 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.*; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.indices.IgnoredFileIndex; import org.jetbrains.jps.indices.ModuleExcludeIndex; @@ -141,8 +142,8 @@ public class MavenResourcesTarget extends ModuleBasedTarget Date: Fri, 1 Mar 2013 13:42:48 +0100 Subject: [PATCH 3/4] fix compilation on API changes --- .../jps/android/builder/AndroidDexBuildTarget.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/builder/AndroidDexBuildTarget.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/builder/AndroidDexBuildTarget.java index cf0c6704527e..6b6b2c860af1 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/builder/AndroidDexBuildTarget.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/builder/AndroidDexBuildTarget.java @@ -10,10 +10,10 @@ import org.jetbrains.jps.android.AndroidJpsUtil; import org.jetbrains.jps.android.AndroidPlatform; import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; import org.jetbrains.jps.builders.BuildRootDescriptor; -import org.jetbrains.jps.builders.BuildRootIndex; import org.jetbrains.jps.builders.BuildTarget; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.indices.IgnoredFileIndex; @@ -34,9 +34,8 @@ public class AndroidDexBuildTarget extends AndroidBuildTarget { } @Override - public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) { - super.writeConfiguration(out, dataPaths, buildRootIndex); - + public void writeConfiguration(ProjectDescriptor pd, PrintWriter out) { + super.writeConfiguration(pd, out); // todo: write compiler settings } From bfef063252b8575f713ed49ef098633134ae5dd7 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 1 Mar 2013 16:36:07 +0400 Subject: [PATCH 4/4] [git] Prefer AtomicReference to Ref --- .../src/org/jetbrains/plugins/github/GithubUtil.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java b/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java index d5c548ff2d54..4e987fbd0185 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java +++ b/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java @@ -26,7 +26,6 @@ import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.ThrowableComputable; import com.intellij.openapi.util.text.StringUtil; import git4idea.config.GitVcsApplicationSettings; @@ -42,6 +41,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; /** * Various utility methods for the GutHub plugin. @@ -86,8 +86,8 @@ public class GithubUtil { private static T doAccessToGithubWithModalProgress(@NotNull final Project project, @NotNull final ThrowableComputable computable) throws IOException { - final Ref result = new Ref(); - final Ref exception = new Ref(); + final AtomicReference result = new AtomicReference(); + final AtomicReference exception = new AtomicReference(); ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) { public void run(@NotNull ProgressIndicator indicator) { try { @@ -98,7 +98,8 @@ public class GithubUtil { } } }); - if (exception.isNull()) { + //noinspection ThrowableResultOfMethodCallIgnored + if (exception.get() == null) { return result.get(); } throw exception.get();