From e31f2d77980f49759e33d0d36b3f15b3a06147aa Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Wed, 7 Mar 2012 20:44:21 +0400 Subject: [PATCH] Multi thread access to theme resource --- .../AndroidDesignerEditorPanel.java | 30 +++++++++---------- .../android/sdk/AndroidTargetData.java | 7 +++-- .../actions/AbstractComboBoxAction.java | 2 +- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java index 38a59d9b940f..e02de1ae423f 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java @@ -78,12 +78,26 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { public AndroidDesignerEditorPanel(@NotNull Module module, @NotNull VirtualFile file) { super(module, file); + myXmlFile = (XmlFile)ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public PsiFile compute() { + return PsiManager.getInstance(getProject()).findFile(myFile); + } + }); + myPSIChangeListener = new ExternalPSIChangeListener(this, myXmlFile, 100, new Runnable() { + @Override + public void run() { + reparseFile(); + } + }); + showProgress("Load configuration"); myProfileAction = new ProfileAction(this, new Runnable() { @Override public void run() { myActionPanel.update(); if (myRootComponent == null) { + myPSIChangeListener.start(); myPSIChangeListener.addRequest(); } else { @@ -96,22 +110,6 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { } } }); - - myXmlFile = (XmlFile)ApplicationManager.getApplication().runReadAction(new Computable() { - @Override - public PsiFile compute() { - return PsiManager.getInstance(getProject()).findFile(myFile); - } - }); - - myPSIChangeListener = new ExternalPSIChangeListener(this, myXmlFile, 100, new Runnable() { - @Override - public void run() { - reparseFile(); - } - }); - // TODO: work over activate() / deactivate() - myPSIChangeListener.start(); } private void reparseFile() { diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java index 4d93a65bbfca..9679a8315ebb 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidTargetData.java @@ -39,6 +39,7 @@ public class AndroidTargetData { private volatile AttributeDefinitions myAttrDefs; private volatile RenderServiceFactory myRenderServiceFactory; private volatile Set myThemes; + private volatile boolean myThemesLoaded; public AndroidTargetData(@NotNull AndroidSdkData sdkData, @NotNull IAndroidTarget target) { mySdkData = sdkData; @@ -76,11 +77,11 @@ public class AndroidTargetData { } public boolean areThemesCached() { - return myThemes != null; + return myThemesLoaded; } @NotNull - public Set getThemes(@NotNull final AndroidFacet facet) { + public synchronized Set getThemes(@NotNull final AndroidFacet facet) { if (myThemes == null) { myThemes = new HashSet(); final Module module = facet.getModule(); @@ -125,6 +126,8 @@ public class AndroidTargetData { } } } + + myThemesLoaded = true; } return myThemes; } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/AbstractComboBoxAction.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/AbstractComboBoxAction.java index ef8e0773719f..899521aaf1a9 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/AbstractComboBoxAction.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/actions/AbstractComboBoxAction.java @@ -94,7 +94,7 @@ public abstract class AbstractComboBoxAction extends ComboBoxAction { } public void update() { - update(mySelection, myPresentation, false); + update(mySelection, myPresentation == null ? getTemplatePresentation() : myPresentation, false); } @NotNull