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) {