void () { if (METHOD_INFOS != null) return; synchronized (GroovyMethodInfo.class) { Map<String, Map<String, List<GroovyMethodInfo>>> methodInfos = new HashMap<>(); Map<String, Map<String, List<GroovyMethodInfo>>> lightMethodInfos = new HashMap<>(); GroovyClassDescriptor.EP_NAME.processWithPluginDescriptor((classDescriptor, pluginDescriptor) -> { ClassLoader classLoader = pluginDescriptor.getClassLoader(); for (GroovyMethodDescriptor method : classDescriptor.methods) { addMethodDescriptor(methodInfos, method, classLoader, classDescriptor.className); } return Unit.INSTANCE; }); for (GroovyMethodDescriptorExtension methodDescriptor : GroovyMethodDescriptorExtension.EP_NAME.getExtensions()) { if (methodDescriptor.className != null) { assert methodDescriptor.lightMethodKey == null; addMethodDescriptor(methodInfos, methodDescriptor, methodDescriptor.getLoaderForClass(), methodDescriptor.className); } else { addMethodDescriptor(lightMethodInfos, methodDescriptor, methodDescriptor.getLoaderForClass(), methodDescriptor.lightMethodKey); } } processUnnamedDescriptors(lightMethodInfos); processUnnamedDescriptors(methodInfos); LIGHT_METHOD_INFOS = lightMethodInfos; METHOD_INFOS = methodInfos; } }