android ui preview: show "missing r class" warning only if we've loaded custom view classes

This commit is contained in:
Eugene Kudelevsky
2011-10-14 13:45:46 +04:00
parent 261d548915
commit 319eb2cacd
3 changed files with 32 additions and 11 deletions
@@ -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("<html><body>" + myWarnMessage.replace("\n", "<br>") + "</body></html>");
myWarningLabel.setIcon(Messages.getWarningIcon());
myWarningLabel.setVisible(true);
}
else {
myWarningLabel.setVisible(false);
}
repaint();
}
@@ -321,6 +321,10 @@ class ProjectCallback extends LegacyCallback implements IProjectCallback {
return myMissingClasses;
}
public boolean hasLoadedClasses() {
return myLoadedClasses.size() > 0;
}
@NotNull
public Set<String> getBrokenClasses() {
return myBrokenClasses;
@@ -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<String> missingClasses = callback.getMissingClasses();
if (missingClasses.size() > 0) {
if (missingClasses.size() > 1) {