mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
android ui preview: show "missing r class" warning only if we've loaded custom view classes
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user