diff -r 7a8448425bb7 -r 714e365b4b1b langtools/src/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jun 02 19:08:47 2010 -0700 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Jun 03 17:14:20 2010 -0700 @@ -64,6 +64,7 @@ private final JCDiagnostic.Factory diags; private final boolean skipAnnotations; private boolean warnOnSyntheticConflicts; + private boolean suppressAbortOnBadClassFile; private final TreeInfo treeinfo; // The set of lint options currently in effect. It is initialized @@ -98,6 +99,7 @@ complexInference = options.get("-complexinference") != null; skipAnnotations = options.get("skipAnnotations") != null; warnOnSyntheticConflicts = options.get("warnOnSyntheticConflicts") != null; + suppressAbortOnBadClassFile = options.get("suppressAbortOnBadClassFile") != null; Target target = Target.instance(context); syntheticNameChar = target.syntheticNameChar(); @@ -210,7 +212,8 @@ */ public Type completionError(DiagnosticPosition pos, CompletionFailure ex) { log.error(pos, "cant.access", ex.sym, ex.getDetailValue()); - if (ex instanceof ClassReader.BadClassFile) throw new Abort(); + if (ex instanceof ClassReader.BadClassFile + && !suppressAbortOnBadClassFile) throw new Abort(); else return syms.errType; }