In CompilingClassLoader, refuse to load a class if its compilation unit has errors. Review at http://gwt-code-reviews.appspot.com/1167801 Review by: scottb@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9354 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java index 06a83fd..744a727 100644 --- a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java +++ b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
@@ -1018,10 +1018,7 @@ // Get the bytes, compiling if necessary. byte[] classBytes = findClassBytes(className); - if (classBytes == null) { - throw new ClassNotFoundException(className); - } - + if (HasAnnotation.hasAnnotation(classBytes, GwtScriptOnly.class)) { scriptOnlyClasses.add(className); maybeInitializeScriptOnlyClassLoader(); @@ -1113,7 +1110,7 @@ } @SuppressWarnings("deprecation") - private byte[] findClassBytes(String className) { + private byte[] findClassBytes(String className) throws ClassNotFoundException { if (JavaScriptHost.class.getName().equals(className)) { // No need to rewrite. return javaScriptHostBytes; @@ -1136,6 +1133,12 @@ CompilationUnit unit = (compiledClass == null) ? getUnitForClassName(lookupClassName) : compiledClass.getUnit(); + + if (unit != null && unit.isError()) { + throw new ClassNotFoundException("Cannot load class " + className + + " because it has errors."); + } + if (emmaAvailable) { /* * build the map for anonymous classes. Do so only if unit has anonymous @@ -1148,11 +1151,10 @@ && unit.hasAnonymousClasses() && jsniMethods != null && jsniMethods.size() > 0 && !unit.createdClassMapping()) { if (!unit.constructAnonymousClassMappings(logger)) { - logger.log(TreeLogger.ERROR, + throw new ClassNotFoundException( "Our heuristic for mapping anonymous classes between compilers " + "failed. Unsafe to continue because the wrong jsni code " + "could end up running. className = " + className); - return null; } } } @@ -1199,6 +1201,10 @@ } classBytes = newBytes; } + + if (classBytes == null) { + throw new ClassNotFoundException(className); + } return classBytes; }