Bug 564634 - don't throw errors from ContentTypeCatalog.describe Change-Id: I827c8c0865effcd58253d96578fe7aaaf424809e Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/bundles/org.eclipse.core.contenttype/src/org/eclipse/core/internal/content/ContentTypeCatalog.java b/bundles/org.eclipse.core.contenttype/src/org/eclipse/core/internal/content/ContentTypeCatalog.java index c7a52dd..e173b5f 100644 --- a/bundles/org.eclipse.core.contenttype/src/org/eclipse/core/internal/content/ContentTypeCatalog.java +++ b/bundles/org.eclipse.core.contenttype/src/org/eclipse/core/internal/content/ContentTypeCatalog.java
@@ -214,7 +214,7 @@ } } - private int collectMatchingByContents(int valid, IContentType[] subset, List<ContentType> destination, ILazySource contents, Map<String, Object> properties) throws IOException { + private int collectMatchingByContents(int valid, IContentType[] subset, List<ContentType> destination, ILazySource contents, Map<String, Object> properties) { for (IContentType element : subset) { ContentType current = (ContentType) element; IContentDescriber describer = current.getDescriber(); @@ -236,7 +236,7 @@ } @SuppressWarnings("deprecation") - int describe(ContentType type, ILazySource contents, ContentDescription description, Map<String, Object> properties) throws IOException { + int describe(ContentType type, ILazySource contents, ContentDescription description, Map<String, Object> properties) { IContentDescriber describer = type.getDescriber(); try { if (contents.isText()) { @@ -258,18 +258,16 @@ // describer seems to be buggy. just disable it (logging the reason) type.invalidateDescriber(re); } catch (Error e) { - // describer got some serious problem. disable it (logging the reason) and throw the error again + // describer got some serious problem. disable it (logging the reason) type.invalidateDescriber(e); - throw e; } catch (LowLevelIOException llioe) { - // throw the actual exception - throw llioe.getActualException(); + // describer got some IO problem. Log the reason + String message = NLS.bind(ContentMessages.content_errorReadingContents, type.getId()); + ContentType.log(message, llioe.getActualException()); } catch (IOException ioe) { // bugs 67841/ 62443 - non-low level IOException should be "ignored" - if (ContentTypeManager.DEBUGGING) { - String message = NLS.bind(ContentMessages.content_errorReadingContents, type.getId()); - ContentType.log(message, ioe); - } + String message = NLS.bind(ContentMessages.content_errorReadingContents, type.getId()); + ContentType.log(message, ioe); // we don't know what the describer would say if the exception didn't occur return IContentDescriber.INDETERMINATE; } finally { @@ -330,7 +328,7 @@ return true; } - IContentType[] findContentTypesFor(ContentTypeMatcher matcher, InputStream contents, String fileName) throws IOException { + IContentType[] findContentTypesFor(ContentTypeMatcher matcher, InputStream contents, String fileName) { final ILazySource buffer = ContentTypeManager.readBuffer(contents); IContentType[] selected = internalFindContentTypesFor(matcher, buffer, fileName, true); // give the policy a chance to change the results @@ -434,7 +432,7 @@ return true; } - private IContentType[] internalFindContentTypesFor(ILazySource buffer, IContentType[][] subset, Comparator<IContentType> validPolicy, Comparator<IContentType> indeterminatePolicy) throws IOException { + private IContentType[] internalFindContentTypesFor(ILazySource buffer, IContentType[][] subset,Comparator<IContentType> validPolicy, Comparator<IContentType> indeterminatePolicy) { Map<String, Object> properties = new HashMap<>(); final List<ContentType> appropriate = new ArrayList<>(5); final int validFullName = collectMatchingByContents(0, subset[0], appropriate, buffer, properties); @@ -464,7 +462,7 @@ return result; } - private IContentType[] internalFindContentTypesFor(ContentTypeMatcher matcher, ILazySource buffer, String fileName, boolean forceValidation) throws IOException { + private IContentType[] internalFindContentTypesFor(ContentTypeMatcher matcher, ILazySource buffer, String fileName, boolean forceValidation) { final IContentType[][] subset; final Comparator<IContentType> validPolicy; Comparator<IContentType> indeterminatePolicy;