blob: ab439b5745eff9502cddbd8f8550b4a8ba484733 [file] [log] [blame]
From 7a53ed04eeb1c4f6381f535fc090c65368dae9ad Mon Sep 17 00:00:00 2001
From: Kirill Likhodedov <Kirill.Likhodedov@gmail.com>
Date: Fri, 21 Oct 2011 18:07:42 +0400
Subject: [PATCH] Let OptionMap.as() accept ClassLoader as the second
parameter. Modify BeanTool.proxy to expect classLoader or
use Thread#getContextClassLoader (as before) in the case of
null
---
src/main/java/org/ini4j/BasicOptionMap.java | 9 +++++++--
src/main/java/org/ini4j/OptionMap.java | 2 ++
src/main/java/org/ini4j/spi/BeanTool.java | 10 ++++++----
3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/main/java/org/ini4j/BasicOptionMap.java b/src/main/java/org/ini4j/BasicOptionMap.java
index d7e665d..3850bf2 100644
--- a/src/main/java/org/ini4j/BasicOptionMap.java
+++ b/src/main/java/org/ini4j/BasicOptionMap.java
@@ -76,12 +76,17 @@ public class BasicOptionMap extends CommonMultiMap<String, String> implements Op
@Override public <T> T as(Class<T> clazz)
{
- return BeanTool.getInstance().proxy(clazz, getDefaultBeanAccess());
+ return BeanTool.getInstance().proxy(clazz, getDefaultBeanAccess(), null);
+ }
+
+ @Override public <T> T as(Class<T> clazz, ClassLoader classLoader)
+ {
+ return BeanTool.getInstance().proxy(clazz, getDefaultBeanAccess(), classLoader);
}
@Override public <T> T as(Class<T> clazz, String keyPrefix)
{
- return BeanTool.getInstance().proxy(clazz, newBeanAccess(keyPrefix));
+ return BeanTool.getInstance().proxy(clazz, newBeanAccess(keyPrefix), null);
}
@Override public String fetch(Object key)
diff --git a/src/main/java/org/ini4j/OptionMap.java b/src/main/java/org/ini4j/OptionMap.java
index dd48089..c13ac73 100644
--- a/src/main/java/org/ini4j/OptionMap.java
+++ b/src/main/java/org/ini4j/OptionMap.java
@@ -25,6 +25,8 @@ public interface OptionMap extends MultiMap<String, String>, CommentedMap<String
<T> T as(Class<T> clazz);
+ <T> T as(Class<T> clazz, ClassLoader classLoader);
+
<T> T as(Class<T> clazz, String keyPrefix);
String fetch(Object key);
diff --git a/src/main/java/org/ini4j/spi/BeanTool.java b/src/main/java/org/ini4j/spi/BeanTool.java
index 05d8be7..7ee22ec 100644
--- a/src/main/java/org/ini4j/spi/BeanTool.java
+++ b/src/main/java/org/ini4j/spi/BeanTool.java
@@ -156,10 +156,12 @@ public class BeanTool
return (T) o;
}
- public <T> T proxy(Class<T> clazz, BeanAccess props)
- {
- return clazz.cast(Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] { clazz },
- new BeanInvocationHandler(props)));
+ public <T> T proxy(Class<T> clazz, BeanAccess props, ClassLoader classLoader) {
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+ return clazz.cast(Proxy.newProxyInstance(classLoader, new Class[]{clazz},
+ new BeanInvocationHandler(props)));
}
@SuppressWarnings("unchecked")
--
1.7.7