Specifically rethrow IllegalAccessError in isPresent/resolveClassName
Issue: SPR-17018
This commit is contained in:
		
							parent
							
								
									fd0220b85c
								
							
						
					
					
						commit
						833343f17c
					
				| 
						 | 
				
			
			@ -301,6 +301,10 @@ public abstract class ClassUtils {
 | 
			
		|||
	 * @return a class instance for the supplied name
 | 
			
		||||
	 * @throws IllegalArgumentException if the class name was not resolvable
 | 
			
		||||
	 * (that is, the class could not be found or the class file could not be loaded)
 | 
			
		||||
	 * @throws IllegalStateException if the corresponding class is resolvable but
 | 
			
		||||
	 * there was a readability mismatch in the inheritance hierarchy of the class
 | 
			
		||||
	 * (typically a missing dependency declaration in a Jigsaw module definition
 | 
			
		||||
	 * for a superclass or interface implemented by the class to be loaded here)
 | 
			
		||||
	 * @see #forName(String, ClassLoader)
 | 
			
		||||
	 */
 | 
			
		||||
	public static Class<?> resolveClassName(String className, @Nullable ClassLoader classLoader)
 | 
			
		||||
| 
						 | 
				
			
			@ -309,12 +313,16 @@ public abstract class ClassUtils {
 | 
			
		|||
		try {
 | 
			
		||||
			return forName(className, classLoader);
 | 
			
		||||
		}
 | 
			
		||||
		catch (ClassNotFoundException ex) {
 | 
			
		||||
			throw new IllegalArgumentException("Could not find class [" + className + "]", ex);
 | 
			
		||||
		catch (IllegalAccessError err) {
 | 
			
		||||
			throw new IllegalStateException("Readability mismatch in inheritance hierarchy of class [" +
 | 
			
		||||
					className + "]: " + err.getMessage(), err);
 | 
			
		||||
		}
 | 
			
		||||
		catch (LinkageError err) {
 | 
			
		||||
			throw new IllegalArgumentException("Unresolvable class definition for class [" + className + "]", err);
 | 
			
		||||
		}
 | 
			
		||||
		catch (ClassNotFoundException ex) {
 | 
			
		||||
			throw new IllegalArgumentException("Could not find class [" + className + "]", ex);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -324,15 +332,24 @@ public abstract class ClassUtils {
 | 
			
		|||
	 * @param className the name of the class to check
 | 
			
		||||
	 * @param classLoader the class loader to use
 | 
			
		||||
	 * (may be {@code null} which indicates the default class loader)
 | 
			
		||||
	 * @return whether the specified class is present
 | 
			
		||||
	 * @return whether the specified class is present (including all of its
 | 
			
		||||
	 * superclasses and interfaces)
 | 
			
		||||
	 * @throws IllegalStateException if the corresponding class is resolvable but
 | 
			
		||||
	 * there was a readability mismatch in the inheritance hierarchy of the class
 | 
			
		||||
	 * (typically a missing dependency declaration in a Jigsaw module definition
 | 
			
		||||
	 * for a superclass or interface implemented by the class to be checked here)
 | 
			
		||||
	 */
 | 
			
		||||
	public static boolean isPresent(String className, @Nullable ClassLoader classLoader) {
 | 
			
		||||
		try {
 | 
			
		||||
			forName(className, classLoader);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		catch (IllegalAccessError err) {
 | 
			
		||||
			throw new IllegalStateException("Readability mismatch in inheritance hierarchy of class [" +
 | 
			
		||||
					className + "]: " + err.getMessage(), err);
 | 
			
		||||
		}
 | 
			
		||||
		catch (Throwable ex) {
 | 
			
		||||
			// Class or one of its dependencies is not present...
 | 
			
		||||
			// Typically ClassNotFoundException or NoClassDefFoundError...
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue