diff --git a/plugins/android/src/org/jetbrains/android/uipreview/IncompatibleClassFileFormatException.java b/plugins/android/src/org/jetbrains/android/uipreview/IncompatibleClassFileFormatException.java new file mode 100644 index 000000000000..da67bb23c6b4 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/uipreview/IncompatibleClassFileFormatException.java @@ -0,0 +1,7 @@ +package org.jetbrains.android.uipreview; + +/** + * @author Eugene.Kudelevsky + */ +public class IncompatibleClassFileFormatException extends Exception { +} diff --git a/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java b/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java index 8f5c2a3d3521..6d7fed659850 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/ProjectCallback.java @@ -181,6 +181,11 @@ class ProjectCallback extends LegacyCallback implements IProjectCallback { } return null; } + catch (UnsupportedClassVersionError e) { + LOG.info(e); + myBrokenClasses.put(className, e); + return null; + } } private Object createMockView(String className, Class[] constructorSignature, Object[] constructorArgs) @@ -331,7 +336,7 @@ class ProjectCallback extends LegacyCallback implements IProjectCallback { return myBrokenClasses; } - public void loadAndParseRClass() throws ClassNotFoundException { + public void loadAndParseRClass() throws ClassNotFoundException, IncompatibleClassFileFormatException { final String className = ApplicationManager.getApplication().runReadAction(new Computable() { @Nullable @Override @@ -347,7 +352,12 @@ class ProjectCallback extends LegacyCallback implements IProjectCallback { Class aClass = myLoadedClasses.get(className); if (aClass == null) { ProjectClassLoader loader = new ProjectClassLoader(null, myModule); - aClass = loader.loadClass(className); + try { + aClass = loader.loadClass(className); + } + catch (UnsupportedClassVersionError e) { + throw new IncompatibleClassFileFormatException(); + } if (aClass != null) { myLoadedClasses.put(className, aClass); } diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java index 65f8c9200670..5d7d57eab54e 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java @@ -93,6 +93,9 @@ public class RenderUtil { catch (ClassNotFoundException e) { LOG.debug(e); } + catch (IncompatibleClassFileFormatException e) { + LOG.debug(e); + } final RenderResources resolver = factory.createResourceResolver(facet, config, projectResources, theme.getName(), theme.isProjectTheme()); @@ -159,6 +162,11 @@ public class RenderUtil { missingRClassMessage = e.getMessage(); missingRClass = true; } + catch (IncompatibleClassFileFormatException e) { + LOG.debug(e); + missingRClassMessage = "Incompatible R.class file format"; + missingRClass = true; + } final RenderResources resolver = factory.createResourceResolver(facet, config, projectResources, theme.getName(), theme.isProjectTheme());