mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-99822 Make: Reload java source in different encoding does not trigger incremental make
This commit is contained in:
@@ -46,7 +46,7 @@ public abstract class BuildTarget<R extends BuildRootDescriptor> {
|
||||
|
||||
public abstract Collection<BuildTarget<?>> computeDependencies(BuildTargetRegistry targetRegistry, TargetOutputIndex outputIndex);
|
||||
|
||||
public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) {
|
||||
public void writeConfiguration(CompileContext context, PrintWriter out) {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<JavaSourceRoot
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) {
|
||||
public void writeConfiguration(CompileContext context, PrintWriter out) {
|
||||
final JpsModule module = getModule();
|
||||
|
||||
int fingerprint = getDependenciesFingerprint();
|
||||
@@ -169,6 +172,12 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget<JavaSourceRoot
|
||||
fingerprint += bytecodeTarget.hashCode();
|
||||
}
|
||||
|
||||
final CompilerEncodingConfiguration encodingConfig = context.getProjectDescriptor().getEncodingConfiguration();
|
||||
final String encoding = encodingConfig.getPreferredModuleEncoding(module);
|
||||
if (encoding != null) {
|
||||
fingerprint += encoding.hashCode();
|
||||
}
|
||||
|
||||
out.write(Integer.toHexString(fingerprint));
|
||||
}
|
||||
|
||||
|
||||
@@ -116,9 +116,10 @@ public final class ResourcesTarget extends JVMModuleBuildTarget<ResourceRootDesc
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) {
|
||||
public void writeConfiguration(CompileContext context, PrintWriter out) {
|
||||
int fingerprint = 0;
|
||||
final List<ResourceRootDescriptor> roots = buildRootIndex.getTargetRoots(this, null);
|
||||
final BuildRootIndex rootIndex = context.getProjectDescriptor().getBuildRootIndex();
|
||||
final List<ResourceRootDescriptor> roots = rootIndex.getTargetRoots(this, null);
|
||||
for (ResourceRootDescriptor root : roots) {
|
||||
fingerprint += FileUtil.fileHashCode(root.getRootFile());
|
||||
fingerprint += root.getPackagePrefix().hashCode();
|
||||
|
||||
+3
-2
@@ -106,9 +106,10 @@ public class ArtifactBuildTarget extends BuildTarget<ArtifactRootDescriptor> {
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -141,7 +141,8 @@ public class MavenResourcesTarget extends ModuleBasedTarget<MavenResourceRootDes
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeConfiguration(PrintWriter out, BuildDataPaths dataPaths, BuildRootIndex buildRootIndex) {
|
||||
public void writeConfiguration(CompileContext context, PrintWriter out) {
|
||||
final BuildDataPaths dataPaths = context.getProjectDescriptor().getTargetsState().getDataPaths();
|
||||
final MavenModuleResourceConfiguration configuration = getModuleResourcesConfiguration(dataPaths);
|
||||
if (configuration != null) {
|
||||
out.write(Integer.toHexString(configuration.computeConfigurationHash(isTests())));
|
||||
|
||||
Reference in New Issue
Block a user