Ошибка "Read access is allowed from event dispatch thread..." при генерации скриптов БД

Добрый день,

После конвертации части сущностей в kotlin перестала работать генерация скриптов БД в CUBA Studio. После запуска генерации (действие “Generate Database Scripts…”) процесс зависает, отображается диалог прогресса “Generating DB Scripts” и в логи IDEA в большом количестве пишутся ошибки “Read access is allowed from event dispatch thread or inside read-action only”.

Версия CUBA Studio:14.2-202

Stacktrace из логов IDEA:

2020-09-30 12:15:43,237 [ 200198]  ERROR - plication.impl.ApplicationImpl - IntelliJ IDEA 2020.2  Build #IU-202.6397.94 
2020-09-30 12:15:43,237 [ 200198]  ERROR - plication.impl.ApplicationImpl - JDK: 11.0.7; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o. 
2020-09-30 12:15:43,237 [ 200198]  ERROR - plication.impl.ApplicationImpl - OS: Windows 10 
2020-09-30 12:15:43,237 [ 200198]  ERROR - plication.impl.ApplicationImpl - Last Action: cuba.generateDbScriptsAction 
2020-09-30 12:15:43,238 [ 200199]  ERROR - plication.impl.ApplicationImpl - Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
Details: Current thread: Thread[ApplicationImpl pooled thread 6,4,Idea Thread Group] 1755997921
; dispatch thread: false; isDispatchThread(): false
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,Idea Thread Group] 162931715 
java.lang.Throwable: Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:161)
	at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1013)
	at com.intellij.psi.impl.PsiDocumentManagerBase.getUncommittedDocuments(PsiDocumentManagerBase.java:818)
	at com.intellij.util.indexing.FileBasedIndexImpl.indexUnsavedDocuments(FileBasedIndexImpl.java:909)
	at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:702)
	at com.intellij.psi.stubs.StubIndexImpl.getContainingIds(StubIndexImpl.java:448)
	at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:294)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:108)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:96)
	at org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache.getScriptClassesByFQName(GroovyShortNamesCache.java:54)
	at org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache.getClassesByFQName(GroovyShortNamesCache.java:83)
	at org.jetbrains.plugins.groovy.lang.psi.impl.javaView.GroovyClassFinder.findClass(GroovyClassFinder.java:48)
	at org.jetbrains.plugins.groovy.lang.psi.impl.javaView.GroovyLightInnerClassFinder.findClass(GroovyLightInnerClassFinder.kt:19)
	at com.intellij.psi.impl.JavaPsiFacadeImpl.doFindClass(JavaPsiFacadeImpl.java:96)
	at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:73)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.getOriginalClass(SourceNavigationHelper.kt:241)
	at org.jetbrains.kotlin.idea.caches.resolve.IDEKotlinAsJavaSupport.getLightClass(IDEKotlinAsJavaSupport.kt:147)
	at com.haulmont.studio.backend.model.KtEntityPsiClassResolver.resolveClass(EntityPsiClassResolver.kt:20)
	at com.haulmont.studio.backend.model.EntityPsi.getPsiClass(EntityPsi.java:475)
	at com.haulmont.studio.backend.model.EntityPsi.getParent(EntityPsi.java:317)
	at com.haulmont.studio.backend.model.EntityPsi.getParent(EntityPsi.java:41)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:555)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:557)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.getChildBaseEntitiesHierarchyWithSingleTableStrategy(TableUpdatesGenerator.java:1362)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.generateRootBaseEntityUpdateOnlyDropColumn(TableUpdatesGenerator.java:1380)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.postProcessBaseEntityUpdates(TableUpdatesGenerator.java:382)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.processBaseEntityUpdates(TableUpdatesGenerator.java:351)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.processing(TableUpdatesGenerator.java:115)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.generateTableUpdates(AbstractDdlGenerator.java:503)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.generateUpdates(AbstractDdlGenerator.java:490)
	at com.intellij.openapi.progress.impl.CoreProgressManager$1.run(CoreProgressManager.java:245)
	at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:935)
	at com.intellij.openapi.progress.impl.CoreProgressManager$4.run(CoreProgressManager.java:490)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$new$0(ProgressRunner.java:79)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$3(ProgressRunner.java:235)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:170)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:157)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:235)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
	at java.base/java.lang.Thread.run(Thread.java:834)

Добрый день,

Создали баг тикет, спасибо за сообщение.
https://youtrack.cuba-platform.com/issue/STUDIO-8966

Ошибка проявляется постоянно, при каждом выполнении действия?

Создали баг тикет…

Спасибо!

Ошибка проявляется постоянно, при каждом выполнении действия?

Да, каждый раз появляется. В большом проекте генерация фактически зависает, не завершается за разумное время. В тестовом проекте (с одной сущностью) скрипты сгенерировались, но задача выполнялась очень долго, несколько минут, в логах IDEA были такие же ошибки.

Выпустили Studio 14.3 с исправлением, попробуйте обновиться.

Обновил плагин CUBA Studio до версии 14.3-202. Проблема воспроизводится, но изменился stacktrace ошибки.

Stacktrace из логов IDEA:

2020-10-12 15:02:47,414 [ 130749]  ERROR - plication.impl.ApplicationImpl - IntelliJ IDEA 2020.2.2  Build #IU-202.7319.50 
2020-10-12 15:02:47,415 [ 130750]  ERROR - plication.impl.ApplicationImpl - JDK: 11.0.8; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o. 
2020-10-12 15:02:47,415 [ 130750]  ERROR - plication.impl.ApplicationImpl - OS: Windows 10 
2020-10-12 15:02:47,415 [ 130750]  ERROR - plication.impl.ApplicationImpl - Plugin to blame: Kotlin version: 1.4.10-release-IJ2020.2-1 
2020-10-12 15:02:47,415 [ 130750]  ERROR - plication.impl.ApplicationImpl - Last Action: cuba.generateDbScriptsAction 
2020-10-12 15:02:47,415 [ 130750]  ERROR - plication.impl.ApplicationImpl - Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
Details: Current thread: Thread[ApplicationImpl pooled thread 16,4,Idea Thread Group] 1738946417
; dispatch thread: false; isDispatchThread(): false
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,Idea Thread Group] 575557276 
java.lang.Throwable: Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:161)
	at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1013)
	at com.intellij.psi.impl.PsiDocumentManagerBase.getUncommittedDocuments(PsiDocumentManagerBase.java:818)
	at com.intellij.util.indexing.FileBasedIndexImpl.indexUnsavedDocuments(FileBasedIndexImpl.java:909)
	at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:702)
	at com.intellij.psi.stubs.StubIndexImpl.getContainingIds(StubIndexImpl.java:448)
	at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:294)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:108)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:96)
	at org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex.get(KotlinFullClassNameIndex.java:51)
	at org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex.get(KotlinFullClassNameIndex.java:30)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.findFirstMatchingInIndex(SourceNavigationHelper.kt:194)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.findClassOrObject(SourceNavigationHelper.kt:199)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.access$findClassOrObject(SourceNavigationHelper.kt:40)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper$SourceAndDecompiledConversionVisitor.visitClass(SourceNavigationHelper.kt:301)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper$SourceAndDecompiledConversionVisitor.visitClass(SourceNavigationHelper.kt:293)
	at org.jetbrains.kotlin.psi.KtClass.accept(KtClass.kt:20)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.navigateToDeclaration(SourceNavigationHelper.kt:290)
	at org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper.getNavigationElement(SourceNavigationHelper.kt:262)
	at org.jetbrains.kotlin.idea.decompiler.navigation.KotlinDeclarationNavigationPolicyImpl.getNavigationElement(KotlinDeclarationNavigationPolicyImpl.kt:14)
	at org.jetbrains.kotlin.idea.decompiler.navigation.KotlinDeclarationNavigationPolicyImpl.getNavigationElement(KotlinDeclarationNavigationPolicyImpl.kt:11)
	at org.jetbrains.kotlin.psi.KtDeclarationStub.getNavigationElement(KtDeclarationStub.java:79)
	at org.jetbrains.kotlin.idea.caches.lightClasses.KtLightClassForDecompiledDeclaration.getNavigationElement(KtLightClassForDecompiledDeclaration.kt:47)
	at com.haulmont.studio.backend.model.KtEntityPsiClassResolver.resolveClass(EntityPsiClassResolver.kt:21)
	at com.haulmont.studio.backend.model.EntityPsi.getPsiClass(EntityPsi.java:475)
	at com.haulmont.studio.backend.model.EntityPsi.getInheritanceType(EntityPsi.java:187)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:551)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:557)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:557)
	at com.haulmont.studio.backend.ed.EntityDesignHelper.getInheritanceType(EntityDesignHelper.java:557)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.getChildEntitiesHierarchyWithSingleTableStrategy(AbstractDdlGenerator.java:369)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.getChildEntitiesHierarchyWithSingleTableStrategy(AbstractDdlGenerator.java:355)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.fetchEmbeddedAttributesWithChildren(TableUpdatesGenerator.java:896)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.generateEntityUpdate(TableUpdatesGenerator.java:935)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.processEntityUpdates(TableUpdatesGenerator.java:519)
	at com.haulmont.studio.backend.ed.ddl.TableUpdatesGenerator.processing(TableUpdatesGenerator.java:114)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.generateTableUpdates(AbstractDdlGenerator.java:516)
	at com.haulmont.studio.backend.ed.ddl.AbstractDdlGenerator.generateUpdates(AbstractDdlGenerator.java:503)
	at com.intellij.openapi.progress.impl.CoreProgressManager$1.run(CoreProgressManager.java:245)
	at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:935)
	at com.intellij.openapi.progress.impl.CoreProgressManager$4.run(CoreProgressManager.java:490)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$new$0(ProgressRunner.java:79)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$3(ProgressRunner.java:235)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:170)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:157)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:235)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
	at java.base/java.lang.Thread.run(Thread.java:834)

Ошибку посмотрим.

https://youtrack.cuba-platform.com/issue/STUDIO-9005