From 2d4cb9bf6335f48d59686ac4291bc227f08b5e4d Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Mon, 12 Nov 2012 14:13:51 +0400 Subject: [PATCH] IDEA-90146 --- .../android-designer/src/META-INF/plugin.xml | 3 + .../AndroidDesignerEditorPanel.java | 6 ++ .../designSurface/BuildProjectListener.java | 84 +++++++++++++++++++ .../ExternalPSIChangeListener.java | 8 ++ 4 files changed, 101 insertions(+) create mode 100644 plugins/android-designer/src/com/intellij/android/designer/designSurface/BuildProjectListener.java diff --git a/plugins/android-designer/src/META-INF/plugin.xml b/plugins/android-designer/src/META-INF/plugin.xml index 612d8c99c969..61377100673d 100644 --- a/plugins/android-designer/src/META-INF/plugin.xml +++ b/plugins/android-designer/src/META-INF/plugin.xml @@ -29,6 +29,9 @@ com.intellij.android.designer.AndroidSelectedFileEditorProvider$MyEditorListener + + com.intellij.android.designer.designSurface.BuildProjectListener + 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 81abf861c2ee..7bc587c79720 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 @@ -569,6 +569,12 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { myPSIChangeListener.deactivate(); } + public void buildProject() { + if (myPSIChangeListener.ensureUpdateRenderer()) { + updateRenderer(true); + } + } + @Override public void dispose() { myPSIChangeListener.dispose(); diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/BuildProjectListener.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/BuildProjectListener.java new file mode 100644 index 000000000000..78a40d41ffcb --- /dev/null +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/BuildProjectListener.java @@ -0,0 +1,84 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.android.designer.designSurface; + +import com.intellij.designer.DesignerEditor; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.compiler.CompileContext; +import com.intellij.openapi.compiler.CompileTask; +import com.intellij.openapi.compiler.CompilerManager; +import com.intellij.openapi.components.ProjectComponent; +import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +/** + * @author Alexander Lobas + */ +public class BuildProjectListener implements ProjectComponent { + private final FileEditorManager myFileEditorManager; + + public BuildProjectListener(Project project, FileEditorManager fileEditorManager) { + myFileEditorManager = fileEditorManager; + CompilerManager.getInstance(project).addAfterTask(new CompileTask() { + @Override + public boolean execute(CompileContext context) { + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + updateDesigners(); + } + }); + return true; + } + }); + } + + private void updateDesigners() { + for (FileEditor editor : myFileEditorManager.getAllEditors()) { + if (editor instanceof DesignerEditor) { + DesignerEditor designerEditor = (DesignerEditor)editor; + if (designerEditor.getDesignerPanel() instanceof AndroidDesignerEditorPanel) { + AndroidDesignerEditorPanel panel = (AndroidDesignerEditorPanel)designerEditor.getDesignerPanel(); + panel.buildProject(); + } + } + } + } + + @Override + public void projectOpened() { + } + + @Override + public void projectClosed() { + } + + @Override + public void initComponent() { + } + + @Override + public void disposeComponent() { + } + + @NotNull + @Override + public String getComponentName() { + return "BuildProjectListener"; + } +} \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/ExternalPSIChangeListener.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/ExternalPSIChangeListener.java index 90a0583699e5..6ce2d689ab6a 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/ExternalPSIChangeListener.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/ExternalPSIChangeListener.java @@ -97,6 +97,14 @@ public class ExternalPSIChangeListener extends PsiTreeChangeAdapter { return myUpdateRenderer; } + public boolean ensureUpdateRenderer() { + if (myRunState) { + return true; + } + myUpdateRenderer = true; + return false; + } + public void addRequest(final Runnable runnable) { clear(); myAlarm.addRequest(new Runnable() {