private MetaClass getMetaClassUnderLock() { MetaClass answer = getStrongMetaClass(); if (answer!=null) return answer; answer = getWeakMetaClass(); final MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry(); MetaClassRegistry.MetaClassCreationHandle mccHandle = metaClassRegistry.getMetaClassCreationHandler(); if (isValidWeakMetaClass(answer, mccHandle)) { return answer; } answer = mccHandle.create(classRef.get(), metaClassRegistry); answer.initialize(); if (GroovySystem.isKeepJavaMetaClasses()) { setStrongMetaClass(answer); } else { setWeakMetaClass(answer); } return answer; }
private MetaClass getMetaClassUnderLock() { MetaClass answer; answer = getMetaClassForClass(); if (answer != null) return answer; final MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry(); answer = metaClassRegistry.getMetaClassCreationHandler() .create(get(), metaClassRegistry); answer.initialize(); if (GroovySystem.isKeepJavaMetaClasses()) { setStrongMetaClass(answer); } else { setWeakMetaClass(answer); } return answer; }
private MetaClass getGlobalMetaClass (Class theClass) { MetaClass answer=null; if (constantMetaClassCount!=0) answer = (MetaClass) constantMetaClasses.get(theClass); if (answer!=null) return answer; answer = (MetaClass) weakMetaClasses.get(theClass); if (answer!=null) return answer; synchronized (theClass) { answer = (MetaClass) weakMetaClasses.get(theClass); if (answer!=null) return answer; // We've got a lock on the Class and we need to be sure that we're in // the ReflectionCache before we call MetaClass.initialize(). // There is probably another place to do this, but I want to be sure... final CachedClass forEffect = ReflectionCache.getCachedClass(theClass); answer = metaClassCreationHandle.create(theClass, this); answer.initialize(); if (GroovySystem.isKeepJavaMetaClasses()) { constantMetaClassCount++; constantMetaClasses.put(theClass,answer); } else { weakMetaClasses.put(theClass, answer); } } return answer; }
private MetaClass getMetaClassUnderLock() { MetaClass answer = getStrongMetaClass(); if (answer!=null) return answer; answer = getWeakMetaClass(); final MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry(); MetaClassRegistry.MetaClassCreationHandle mccHandle = metaClassRegistry.getMetaClassCreationHandler(); if (answer != null) { boolean enableGloballyOn = (mccHandle instanceof ExpandoMetaClassCreationHandle); boolean cachedAnswerIsEMC = (answer instanceof ExpandoMetaClass); // if EMC.enableGlobally() is OFF, return whatever the cached answer is. // but if EMC.enableGlobally() is ON and the cached answer is not an EMC, come up with a fresh answer if(!enableGloballyOn || cachedAnswerIsEMC) { return answer; } } answer = mccHandle.create(get(), metaClassRegistry); answer.initialize(); if (GroovySystem.isKeepJavaMetaClasses()) { setStrongMetaClass(answer); } else { setWeakMetaClass(answer); } return answer; }
private MetaClass getMetaClassUnderLock() { MetaClass answer = getStrongMetaClass(); if (answer!=null) return answer; answer = getWeakMetaClass(); final MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry(); MetaClassRegistry.MetaClassCreationHandle mccHandle = metaClassRegistry.getMetaClassCreationHandler(); if (answer != null) { boolean enableGloballyOn = (mccHandle instanceof ExpandoMetaClassCreationHandle); boolean cachedAnswerIsEMC = (answer instanceof ExpandoMetaClass); // if EMC.enableGlobally() is OFF, return whatever the cached answer is. // but if EMC.enableGlobally() is ON and the cached answer is not an EMC, come up with a fresh answer if(!enableGloballyOn || cachedAnswerIsEMC) { return answer; } } answer = mccHandle.create(get(), metaClassRegistry); answer.initialize(); if (GroovySystem.isKeepJavaMetaClasses()) { setStrongMetaClass(answer); } else { setWeakMetaClass(answer); } return answer; }