From 319eb2cacd938dbdd8dfcd9e2f769edd4091bb58 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Thu, 13 Oct 2011 22:18:32 +0400 Subject: [PATCH] android ui preview: show "missing r class" warning only if we've loaded custom view classes --- .../uipreview/AndroidLayoutPreviewPanel.java | 18 +++++++++++----- .../android/uipreview/ProjectCallback.java | 4 ++++ .../android/uipreview/RenderUtil.java | 21 +++++++++++++------ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/uipreview/AndroidLayoutPreviewPanel.java b/plugins/android/src/org/jetbrains/android/uipreview/AndroidLayoutPreviewPanel.java index d32a7bb704c4..6036b4e656d4 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/AndroidLayoutPreviewPanel.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/AndroidLayoutPreviewPanel.java @@ -31,6 +31,7 @@ public class AndroidLayoutPreviewPanel extends JPanel implements Disposable { private BufferedImage myImage; private final HyperlinkLabel myErrorLabel = new HyperlinkLabel("", Color.BLUE, getBackground(), Color.BLUE); + private final JBLabel myWarningLabel = new JBLabel(); private double myZoomFactor = 1.0; private boolean myZoomToFit = true; @@ -98,6 +99,8 @@ public class AndroidLayoutPreviewPanel extends JPanel implements Disposable { add(titlePanel); add(myErrorLabel); + add(myWarningLabel); + add(new MyImagePanelWrapper()); } @@ -135,6 +138,7 @@ public class AndroidLayoutPreviewPanel extends JPanel implements Disposable { public void update() { myImagePanel.setVisible(true); + if (myErrorMessage != null) { myErrorLabel.setHyperlinkText(myErrorMessage.myBeforeLinkText, myErrorMessage.myLinkText, @@ -142,15 +146,19 @@ public class AndroidLayoutPreviewPanel extends JPanel implements Disposable { myErrorLabel.setIcon(Messages.getErrorIcon()); myErrorLabel.setVisible(true); } - else if (myWarnMessage != null && myWarnMessage.length() > 0) { - myErrorLabel.setHyperlinkText(myWarnMessage, "", ""); - myErrorLabel.setIcon(Messages.getWarningIcon()); - myErrorLabel.setVisible(true); - } else { myErrorLabel.setVisible(false); } + if (myErrorMessage == null && myWarnMessage != null && myWarnMessage.length() > 0) { + myWarningLabel.setText("" + myWarnMessage.replace("\n", "
") + ""); + myWarningLabel.setIcon(Messages.getWarningIcon()); + myWarningLabel.setVisible(true); + } + else { + myWarningLabel.setVisible(false); + } + repaint(); } diff --git a/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java b/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java index 8eda905b6c3a..bb7d26d52867 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java @@ -321,6 +321,10 @@ class ProjectCallback extends LegacyCallback implements IProjectCallback { return myMissingClasses; } + public boolean hasLoadedClasses() { + return myLoadedClasses.size() > 0; + } + @NotNull public Set getBrokenClasses() { return myBrokenClasses; diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java index 42fc62da07ae..4d078b70bfbf 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java @@ -2,7 +2,10 @@ package org.jetbrains.android.uipreview; import com.android.ide.common.rendering.api.RenderSession; import com.android.ide.common.rendering.api.Result; -import com.android.ide.common.resources.*; +import com.android.ide.common.resources.ResourceDeltaKind; +import com.android.ide.common.resources.ResourceFolder; +import com.android.ide.common.resources.ResourceRepository; +import com.android.ide.common.resources.ResourceResolver; import com.android.ide.common.resources.configuration.FolderConfiguration; import com.android.ide.common.resources.configuration.VersionQualifier; import com.android.io.FolderWrapper; @@ -87,6 +90,8 @@ class RenderUtil { loadResources(projectResources, resFolders); final int minSdkVersion = getMinSdkVersion(facet); + String missingRClassMessage = null; + boolean missingRClass = false; final ProjectCallback callback = new ProjectCallback(factory.getLibrary(), facet.getModule(), projectResources); try { @@ -94,11 +99,8 @@ class RenderUtil { } catch (ClassNotFoundException e) { LOG.debug(e); - final String message = e.getMessage(); - warningBuilder.append(message != null && message.length() > 0 - ? ("Class not found error: " + message + ".") - : "R class not found.") - .append(" Try to build project\n"); + missingRClassMessage = e.getMessage(); + missingRClass = true; } final ResourceResolver resolver = @@ -133,6 +135,13 @@ class RenderUtil { final String format = FileUtil.getExtension(imgPath); ImageIO.write(session.getImage(), format, new File(imgPath)); + if (missingRClass && callback.hasLoadedClasses()) { + warningBuilder.append(missingRClassMessage != null && missingRClassMessage.length() > 0 + ? ("Class not found error: " + missingRClassMessage + ".") + : "R class not found.") + .append(" Try to build project\n"); + } + final Set missingClasses = callback.getMissingClasses(); if (missingClasses.size() > 0) { if (missingClasses.size() > 1) {