mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fall back to project settings if current computation is unfinished (locked) (IDEA-220101)
GitOrigin-RevId: bb787251599db5261f6560034c50839cc6b05978
This commit is contained in:
committed by
intellij-monorepo-bot
parent
35fba7c13d
commit
f475ae92d5
@@ -11,7 +11,6 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.*;
|
||||
import com.intellij.psi.codeStyle.modifier.CodeStyleSettingsModifier;
|
||||
import com.intellij.psi.codeStyle.modifier.TransientCodeStyleSettings;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
@@ -87,7 +86,7 @@ public class CodeStyle {
|
||||
if (!file.isPhysical()) {
|
||||
return getSettings(project);
|
||||
}
|
||||
return CachedValuesManager.getCachedValue(file, CodeStyleCachedValueProvider.getInstance(file));
|
||||
return CodeStyleCachedValueProvider.getInstance(file).tryGetSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+43
-18
@@ -14,6 +14,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.modifier.CodeStyleSettingsModifier;
|
||||
import com.intellij.psi.codeStyle.modifier.TransientCodeStyleSettings;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.concurrency.AppExecutorUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -21,6 +22,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
class CodeStyleCachedValueProvider implements CachedValueProvider<CodeStyleSettings> {
|
||||
private final static Logger LOG = Logger.getInstance(CodeStyleCachedValueProvider.class);
|
||||
@@ -29,12 +32,28 @@ class CodeStyleCachedValueProvider implements CachedValueProvider<CodeStyleSetti
|
||||
|
||||
private final @NotNull PsiFile myFile;
|
||||
private final @NotNull AsyncComputation myComputation;
|
||||
private final @NotNull Lock myComputationLock = new ReentrantLock();
|
||||
|
||||
CodeStyleCachedValueProvider(@NotNull PsiFile file) {
|
||||
myFile = file;
|
||||
myComputation = new AsyncComputation();
|
||||
}
|
||||
|
||||
CodeStyleSettings tryGetSettings() {
|
||||
if (myComputationLock.tryLock()) {
|
||||
try {
|
||||
return CachedValuesManager.getCachedValue(myFile, this);
|
||||
}
|
||||
finally {
|
||||
myComputationLock.unlock();
|
||||
}
|
||||
}
|
||||
else {
|
||||
//noinspection deprecation
|
||||
return CodeStyleSettingsManager.getInstance(myFile.getProject()).getCurrentSettings();
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Result<CodeStyleSettings> compute() {
|
||||
@@ -106,27 +125,33 @@ class CodeStyleCachedValueProvider implements CachedValueProvider<CodeStyleSetti
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void computeSettings() {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Computation started for " + myFile.getName());
|
||||
}
|
||||
@SuppressWarnings("deprecation")
|
||||
CodeStyleSettings currSettings = mySettingsManager.getCurrentSettings();
|
||||
if (currSettings != mySettingsManager.getTemporarySettings()) {
|
||||
TransientCodeStyleSettings modifiableSettings = new TransientCodeStyleSettings(myFile, currSettings);
|
||||
for (CodeStyleSettingsModifier modifier : CodeStyleSettingsModifier.EP_NAME.getExtensionList()) {
|
||||
if (modifier.modifySettings(modifiableSettings, myFile)) {
|
||||
LOG.debug("Modifier: " + modifier.getClass().getName());
|
||||
modifiableSettings.setModifier(modifier);
|
||||
currSettings = modifiableSettings;
|
||||
break;
|
||||
private void computeSettings() {
|
||||
try {
|
||||
myComputationLock.lock();
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Computation started for " + myFile.getName());
|
||||
}
|
||||
@SuppressWarnings("deprecation")
|
||||
CodeStyleSettings currSettings = mySettingsManager.getCurrentSettings();
|
||||
if (currSettings != mySettingsManager.getTemporarySettings()) {
|
||||
TransientCodeStyleSettings modifiableSettings = new TransientCodeStyleSettings(myFile, currSettings);
|
||||
for (CodeStyleSettingsModifier modifier : CodeStyleSettingsModifier.EP_NAME.getExtensionList()) {
|
||||
if (modifier.modifySettings(modifiableSettings, myFile)) {
|
||||
LOG.debug("Modifier: " + modifier.getClass().getName());
|
||||
modifiableSettings.setModifier(modifier);
|
||||
currSettings = modifiableSettings;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
myCurrResult = currSettings;
|
||||
myTracker.incModificationCount();
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Computation ended for " + myFile.getName());
|
||||
}
|
||||
}
|
||||
myCurrResult = currSettings;
|
||||
myTracker.incModificationCount();
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Computation ended for " + myFile.getName());
|
||||
finally {
|
||||
myComputationLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user