This commit is contained in:
Alexey Kudravtsev
2017-11-24 16:16:39 +03:00
parent c8890fa5ff
commit a0266562f5
3 changed files with 41 additions and 40 deletions
@@ -94,7 +94,8 @@ public abstract class AbstractFileViewProvider extends UserDataHolderBase implem
return provider.getVirtualFile() instanceof LightVirtualFile && !provider.isEventSystemEnabled();
}
@NotNull public PsiLock getFilePsiLock() {
@NotNull
public PsiLock getFilePsiLock() {
return myPsiLock;
}
@@ -107,7 +108,7 @@ public abstract class AbstractFileViewProvider extends UserDataHolderBase implem
protected PsiFile createFile(@NotNull Project project, @NotNull VirtualFile file, @NotNull FileType fileType) {
if (fileType.isBinary() || file.is(VFileProperty.SPECIAL)) {
return SingleRootFileViewProvider.isTooLargeForContentLoading(file) ?
new PsiLargeBinaryFileImpl(((PsiManagerImpl)getManager()), this) :
new PsiLargeBinaryFileImpl((PsiManagerImpl)getManager(), this) :
new PsiBinaryFileImpl((PsiManagerImpl)getManager(), this);
}
if (!SingleRootFileViewProvider.isTooLargeForIntelligence(file)) {
@@ -32,6 +32,7 @@ import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.PsiManagerImpl;
@@ -189,35 +190,34 @@ public class BlockSupportImpl extends BlockSupport {
return diffLog;
}
else {
FileViewProvider viewProvider = fileImpl.getViewProvider();
viewProvider.getLanguages();
FileType fileType = viewProvider.getVirtualFile().getFileType();
String fileName = fileImpl.getName();
final LightVirtualFile lightFile = new LightVirtualFile(fileName, fileType, newFileText, viewProvider.getVirtualFile().getCharset(),
fileImpl.getViewProvider().getModificationStamp());
lightFile.setOriginalFile(viewProvider.getVirtualFile());
FileViewProvider viewProvider = fileImpl.getViewProvider();
viewProvider.getLanguages();
VirtualFile virtualFile = viewProvider.getVirtualFile();
FileType fileType = virtualFile.getFileType();
String fileName = fileImpl.getName();
LightVirtualFile lightFile = new LightVirtualFile(fileName, fileType, newFileText, virtualFile.getCharset(),
viewProvider.getModificationStamp());
lightFile.setOriginalFile(virtualFile);
FileViewProvider copy = viewProvider.createCopy(lightFile);
if (copy.isEventSystemEnabled()) {
throw new AssertionError("Copied view provider must be non-physical for reparse to deliver correct events: " + viewProvider);
}
copy.getLanguages();
SingleRootFileViewProvider.doNotCheckFileSizeLimit(lightFile); // optimization: do not convert file contents to bytes to determine if we should codeinsight it
PsiFileImpl newFile = getFileCopy(fileImpl, copy);
newFile.setOriginalFile(fileImpl);
final FileElement newFileElement = (FileElement)newFile.getNode();
final FileElement oldFileElement = (FileElement)oldFileNode;
if (lastCommittedText.length() != oldFileElement.getTextLength()) {
throw new IncorrectOperationException(viewProvider.toString());
}
DiffLog diffLog = mergeTrees(fileImpl, oldFileElement, newFileElement, indicator, lastCommittedText);
((PsiManagerEx)fileImpl.getManager()).getFileManager().setViewProvider(lightFile, null);
return diffLog;
FileViewProvider providerCopy = viewProvider.createCopy(lightFile);
if (providerCopy.isEventSystemEnabled()) {
throw new AssertionError("Copied view provider must be non-physical for reparse to deliver correct events: " + viewProvider);
}
providerCopy.getLanguages();
SingleRootFileViewProvider.doNotCheckFileSizeLimit(lightFile); // optimization: do not convert file contents to bytes to determine if we should codeinsight it
PsiFileImpl newFile = getFileCopy(fileImpl, providerCopy);
newFile.setOriginalFile(fileImpl);
final FileElement newFileElement = (FileElement)newFile.getNode();
final FileElement oldFileElement = (FileElement)oldFileNode;
if (lastCommittedText.length() != oldFileElement.getTextLength()) {
throw new IncorrectOperationException(viewProvider.toString());
}
DiffLog diffLog = mergeTrees(fileImpl, oldFileElement, newFileElement, indicator, lastCommittedText);
((PsiManagerEx)fileImpl.getManager()).getFileManager().setViewProvider(lightFile, null);
return diffLog;
}
@NotNull
@@ -53,7 +53,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
protected void setUp() throws Exception {
super.setUp();
exception = null;
timeOut = System.currentTimeMillis() + 2*60*1000;
timeOut = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(2);
}
@Override
@@ -65,7 +65,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
private volatile Throwable exception;
public void testAcquireReadActionLockVsRunReadActionPerformance() throws Throwable {
final int N = 100000000;
final int N = 100_000_000;
final Application application = ApplicationManager.getApplication();
String err = null;
@@ -120,17 +120,17 @@ public class ApplicationImplTest extends LightPlatformTestCase {
public void testRead50Write50LockPerformance() {
final int readIterations = 600000;
final int writeIterations = 600000;
final int readIterations = 600_000;
final int writeIterations = 600_000;
runReadWrites(readIterations, writeIterations, 2000);
}
public void testRead100Write0LockPerformance() {
final int readIterations = 60000000;
final int readIterations = 60_000_000;
final int writeIterations = 0;
runReadWrites(readIterations, writeIterations, 10000);
runReadWrites(readIterations, writeIterations, 10_000);
}
private static void runReadWrites(final int readIterations, final int writeIterations, int expectedMs) {
@@ -251,7 +251,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
while (!read1Acquired.get() && ok());
TimeoutUtil.sleep(1000); // make sure it called writelock
long timeout = System.currentTimeMillis() + 10000;
long timeout = System.currentTimeMillis() + 10_000;
while (System.currentTimeMillis() < timeout && ok()) {
assertTrue(aboutToAcquireWrite.get());
assertTrue(read1Acquired.get());
@@ -270,7 +270,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
holdRead1.set(false);
while (!writeAcquired.get() && ok());
timeout = System.currentTimeMillis() + 10000;
timeout = System.currentTimeMillis() + 10_000;
while (System.currentTimeMillis() < timeout && ok()) {
assertTrue(aboutToAcquireWrite.get());
assertTrue(read1Acquired.get());
@@ -290,7 +290,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
while (!read2Released.get() && ok());
timeout = System.currentTimeMillis() + 10000;
timeout = System.currentTimeMillis() + 10_000;
while (System.currentTimeMillis() < timeout && ok()) {
assertTrue(aboutToAcquireWrite.get());
assertTrue(read1Acquired.get());
@@ -500,7 +500,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
//noinspection SSBasedInspection
SwingUtilities.invokeLater(() -> ApplicationManager.getApplication().runWriteAction(EmptyRunnable.getInstance()));
boolean result = ((ApplicationEx)ApplicationManager.getApplication())
.runProcessWithProgressSynchronouslyInReadAction(getProject(), "title", true, "cancel", null, () -> TimeoutUtil.sleep(10000));
.runProcessWithProgressSynchronouslyInReadAction(getProject(), "title", true, "cancel", null, () -> TimeoutUtil.sleep(10_000));
assertTrue(result);
UIUtil.dispatchAllInvocationEvents();
if (exception != null) throw exception;
@@ -597,7 +597,7 @@ public class ApplicationImplTest extends LightPlatformTestCase {
private static void waitForFuture(Future<?> future) {
try {
future.get(10000, TimeUnit.MILLISECONDS);
future.get(10_000, TimeUnit.MILLISECONDS);
}
catch (Exception e) {
throw new RuntimeException(e);