diff --git a/core/src/main/java/org/kohsuke/stapler/WebApp.java b/core/src/main/java/org/kohsuke/stapler/WebApp.java index 69feff2447..172df2ab8b 100644 --- a/core/src/main/java/org/kohsuke/stapler/WebApp.java +++ b/core/src/main/java/org/kohsuke/stapler/WebApp.java @@ -218,26 +218,32 @@ public void setClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } - public MetaClass getMetaClass(Class c) { - return getMetaClass(Klass.java(c)); - } - - public MetaClass getMetaClass(Klass<?> c) { - if(c==null) return null; - if (c.navigator == KlassNavigator.JAVA) { - ClassValue<MetaClass> _classMap; + private ClassValue<MetaClass> getClassMap() { + ClassValue<MetaClass> _classMap = classMap; + if (_classMap == null) { synchronized (this) { - if (classMap == null) { - classMap = new ClassValue<MetaClass>() { + _classMap = classMap; + if (_classMap == null) { + classMap = _classMap = new ClassValue<>() { @Override protected MetaClass computeValue(Class<?> c) { return new MetaClass(WebApp.this, Klass.java(c)); } }; } - _classMap = classMap; } - return _classMap.get(c.toJavaClass()); + } + return _classMap; + } + + public MetaClass getMetaClass(Class c) { + return getMetaClass(Klass.java(c)); + } + + public MetaClass getMetaClass(Klass<?> c) { + if(c==null) return null; + if (c.navigator == KlassNavigator.JAVA) { + return getClassMap().get(c.toJavaClass()); } else { // probably now impossible outside tests return new MetaClass(this,c);