mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
close already created storages if exception occurred on initialization
GitOrigin-RevId: 73583d785452ba36f2180c80f726534fdbcbadf2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9fc76882e9
commit
71b175792f
@@ -44,7 +44,6 @@ public class Mappings {
|
||||
private static final String IMPORT_WILDCARD_SUFFIX = ".*";
|
||||
|
||||
private final boolean myIsDelta;
|
||||
private final boolean myDeltaIsTransient;
|
||||
private boolean myIsDifferentiated = false;
|
||||
private boolean myIsRebuild = false;
|
||||
|
||||
@@ -94,7 +93,6 @@ public class Mappings {
|
||||
myChangedFiles = new THashSet<>(FileUtil.FILE_HASHING_STRATEGY);
|
||||
myDeletedClasses = new HashSet<>(DEFAULT_SET_CAPACITY, DEFAULT_SET_LOAD_FACTOR);
|
||||
myAddedClasses = new HashSet<>(DEFAULT_SET_CAPACITY, DEFAULT_SET_LOAD_FACTOR);
|
||||
myDeltaIsTransient = base.myDeltaIsTransient;
|
||||
myRootDir = new File(FileUtil.toSystemIndependentName(base.myRootDir.getAbsolutePath()) + File.separatorChar + "myDelta");
|
||||
myContext = base.myContext;
|
||||
myInitName = myContext.get("<init>");
|
||||
@@ -105,14 +103,13 @@ public class Mappings {
|
||||
createImplementation();
|
||||
}
|
||||
|
||||
public Mappings(final File rootDir, PathRelativizerService relativizer, final boolean transientDelta) throws IOException {
|
||||
public Mappings(final File rootDir, PathRelativizerService relativizer) throws IOException {
|
||||
myLock = new Object();
|
||||
myIsDelta = false;
|
||||
myChangedClasses = null;
|
||||
myChangedFiles = null;
|
||||
myDeletedClasses = null;
|
||||
myAddedClasses = null;
|
||||
myDeltaIsTransient = transientDelta;
|
||||
myRootDir = rootDir;
|
||||
myRelativizer = relativizer;
|
||||
createImplementation();
|
||||
@@ -122,6 +119,7 @@ public class Mappings {
|
||||
}
|
||||
|
||||
private void createImplementation() throws IOException {
|
||||
try {
|
||||
if (!myIsDelta) {
|
||||
myContext = new DependencyContext(myRootDir, myRelativizer);
|
||||
myDebugS = myContext.getLogger(LOG);
|
||||
@@ -136,7 +134,7 @@ public class Mappings {
|
||||
return new THashSet<>(FileUtil.PATH_HASHING_STRATEGY); // todo: do we really need set and not a list here?
|
||||
}
|
||||
};
|
||||
if (myIsDelta && myDeltaIsTransient) {
|
||||
if (myIsDelta) {
|
||||
myClassToSubclasses = new IntIntTransientMultiMaplet();
|
||||
myClassToClassDependency = new IntIntTransientMultiMaplet();
|
||||
myShortClassNameIndex = null;
|
||||
@@ -169,6 +167,16 @@ public class Mappings {
|
||||
);
|
||||
}
|
||||
}
|
||||
catch (Throwable e) {
|
||||
try {
|
||||
// ensure already initialized maps are properly closed
|
||||
close();
|
||||
}
|
||||
catch (Throwable ignored) {
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public String valueOf(final int name) {
|
||||
return myContext.getValue(name);
|
||||
@@ -2956,26 +2964,39 @@ public class Mappings {
|
||||
}
|
||||
|
||||
public void close() {
|
||||
BuildDataCorruptedException error = null;
|
||||
synchronized (myLock) {
|
||||
myClassToSubclasses.close();
|
||||
myClassToClassDependency.close();
|
||||
myRelativeSourceFilePathToClasses.close();
|
||||
myClassToRelativeSourceFilePath.close();
|
||||
for (CloseableMaplet maplet : Arrays.asList(myClassToSubclasses, myClassToClassDependency, myRelativeSourceFilePathToClasses, myClassToRelativeSourceFilePath, myShortClassNameIndex)) {
|
||||
if (maplet != null) {
|
||||
try {
|
||||
maplet.close();
|
||||
}
|
||||
catch (BuildDataCorruptedException ex) {
|
||||
if (error == null) {
|
||||
error = ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!myIsDelta) {
|
||||
myShortClassNameIndex.close();
|
||||
// only close if you own the context
|
||||
final DependencyContext context = myContext;
|
||||
if (context != null) {
|
||||
try {
|
||||
context.close();
|
||||
}
|
||||
catch (BuildDataCorruptedException ex) {
|
||||
if (error == null) {
|
||||
error = ex;
|
||||
}
|
||||
}
|
||||
myContext = null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!myDeltaIsTransient) {
|
||||
FileUtil.delete(myRootDir);
|
||||
}
|
||||
}
|
||||
if (error != null) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,10 @@ import org.jetbrains.jps.incremental.fs.BuildFSState;
|
||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
||||
import org.jetbrains.jps.incremental.relativizer.PathRelativizerService;
|
||||
import org.jetbrains.jps.incremental.storage.*;
|
||||
import org.jetbrains.jps.incremental.storage.BuildDataManager;
|
||||
import org.jetbrains.jps.incremental.storage.BuildTargetsState;
|
||||
import org.jetbrains.jps.incremental.storage.ProjectTimestamps;
|
||||
import org.jetbrains.jps.incremental.storage.StampsStorage;
|
||||
import org.jetbrains.jps.indices.ModuleExcludeIndex;
|
||||
import org.jetbrains.jps.indices.impl.IgnoredFileIndexImpl;
|
||||
import org.jetbrains.jps.indices.impl.ModuleExcludeIndexImpl;
|
||||
@@ -56,7 +59,6 @@ public class BuildRunner {
|
||||
private static final Logger LOG = Logger.getInstance(BuildRunner.class);
|
||||
public static final boolean PARALLEL_BUILD_ENABLED = Boolean.parseBoolean(System.getProperty(GlobalOptions.COMPILE_PARALLEL_OPTION, "false"));
|
||||
public static final boolean PARALLEL_BUILD_AUTOMAKE_ENABLED = PARALLEL_BUILD_ENABLED && Boolean.parseBoolean(System.getProperty(GlobalOptions.ALLOW_PARALLEL_AUTOMAKE_OPTION, "true"));
|
||||
private static final boolean STORE_TEMP_CACHES_IN_MEMORY = true;
|
||||
private final JpsModelLoader myModelLoader;
|
||||
private List<String> myFilePaths = Collections.emptyList();
|
||||
private Map<String, String> myBuilderParams = Collections.emptyMap();
|
||||
@@ -90,7 +92,7 @@ public class BuildRunner {
|
||||
BuildDataManager dataManager = null;
|
||||
try {
|
||||
projectStamps = new ProjectTimestamps(dataStorageRoot, targetsState, relativizer);
|
||||
dataManager = new BuildDataManager(dataPaths, targetsState, relativizer, STORE_TEMP_CACHES_IN_MEMORY);
|
||||
dataManager = new BuildDataManager(dataPaths, targetsState, relativizer);
|
||||
if (dataManager.versionDiffers()) {
|
||||
myForceCleanCaches = true;
|
||||
msgHandler.processMessage(new CompilerMessage("build", BuildMessage.Kind.INFO, "Dependency data format has changed, project rebuild required"));
|
||||
@@ -109,7 +111,7 @@ public class BuildRunner {
|
||||
FileUtil.delete(dataStorageRoot);
|
||||
targetsState = new BuildTargetsState(dataPaths, jpsModel, buildRootIndex);
|
||||
projectStamps = new ProjectTimestamps(dataStorageRoot, targetsState, relativizer);
|
||||
dataManager = new BuildDataManager(dataPaths, targetsState, relativizer, STORE_TEMP_CACHES_IN_MEMORY);
|
||||
dataManager = new BuildDataManager(dataPaths, targetsState, relativizer);
|
||||
// second attempt succeeded
|
||||
msgHandler.processMessage(new CompilerMessage("build", BuildMessage.Kind.INFO, "Project rebuild forced: " + e.getMessage()));
|
||||
}
|
||||
|
||||
@@ -114,15 +114,12 @@ public class BuildDataManager implements StorageOwner {
|
||||
}
|
||||
};
|
||||
|
||||
public BuildDataManager(BuildDataPaths dataPaths,
|
||||
BuildTargetsState targetsState,
|
||||
PathRelativizerService relativizer,
|
||||
boolean useMemoryTempCaches) throws IOException {
|
||||
public BuildDataManager(BuildDataPaths dataPaths, BuildTargetsState targetsState, PathRelativizerService relativizer) throws IOException {
|
||||
myDataPaths = dataPaths;
|
||||
myTargetsState = targetsState;
|
||||
mySrcToFormMap = new OneToManyPathsMapping(new File(getSourceToFormsRoot(), "data"), relativizer);
|
||||
myOutputToTargetRegistry = new OutputToTargetRegistry(new File(getOutputToSourceRegistryRoot(), "data"), relativizer);
|
||||
myMappings = new Mappings(getMappingsRoot(myDataPaths.getDataStorageRoot()), relativizer, useMemoryTempCaches);
|
||||
myMappings = new Mappings(getMappingsRoot(myDataPaths.getDataStorageRoot()), relativizer);
|
||||
myVersionFile = new File(myDataPaths.getDataStorageRoot(), "version.dat");
|
||||
myRelativizer = relativizer;
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public class StorageDumper {
|
||||
final File parent = new File(oath == null ? "" : oath);
|
||||
final File dataStorageRoot = new File(dataPath, "mappings");
|
||||
|
||||
final Mappings mappings = new Mappings(dataStorageRoot, new PathRelativizerService(), true);
|
||||
final Mappings mappings = new Mappings(dataStorageRoot, new PathRelativizerService());
|
||||
try {
|
||||
//final File outputPath = new File(parent, "snapshot-" + new SimpleDateFormat("dd-MM-yy(hh-mm-ss)").format(new Date()) + ".log");
|
||||
//FileUtil.createIfDoesntExist(outputPath);
|
||||
|
||||
@@ -26,10 +26,9 @@ import org.jetbrains.jps.incremental.FSOperations;
|
||||
import org.jetbrains.jps.incremental.IncProjectBuilder;
|
||||
import org.jetbrains.jps.incremental.RebuildRequestedException;
|
||||
import org.jetbrains.jps.incremental.fs.BuildFSState;
|
||||
import org.jetbrains.jps.incremental.storage.BuildDataManager;
|
||||
import org.jetbrains.jps.incremental.storage.BuildTargetSourcesState;
|
||||
import org.jetbrains.jps.incremental.storage.BuildTargetsState;
|
||||
import org.jetbrains.jps.incremental.relativizer.PathRelativizerService;
|
||||
import org.jetbrains.jps.incremental.storage.BuildDataManager;
|
||||
import org.jetbrains.jps.incremental.storage.BuildTargetsState;
|
||||
import org.jetbrains.jps.incremental.storage.ProjectTimestamps;
|
||||
import org.jetbrains.jps.indices.ModuleExcludeIndex;
|
||||
import org.jetbrains.jps.indices.impl.IgnoredFileIndexImpl;
|
||||
@@ -210,7 +209,7 @@ public abstract class JpsBuildTestCase extends UsefulTestCase {
|
||||
BuildTargetsState targetsState = new BuildTargetsState(dataPaths, myModel, buildRootIndex);
|
||||
PathRelativizerService relativizer = new PathRelativizerService(myModel.getProject(), dataPaths.getDataStorageRoot());
|
||||
ProjectTimestamps timestamps = new ProjectTimestamps(myDataStorageRoot, targetsState, relativizer);
|
||||
BuildDataManager dataManager = new BuildDataManager(dataPaths, targetsState, relativizer, true);
|
||||
BuildDataManager dataManager = new BuildDataManager(dataPaths, targetsState, relativizer);
|
||||
return new ProjectDescriptor(myModel, new BuildFSState(true), timestamps, dataManager, buildLoggingManager, index, targetsState,
|
||||
targetIndex, buildRootIndex, ignoredFileIndex);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user