public void execute(PersistentCache cache) { File jarFile = jarFile(cache); LOGGER.debug("Generating worker process classes to {}.", jarFile); URL currentClasspath = getClass().getProtectionDomain().getCodeSource().getLocation(); JarJarTask task = new JarJarTask(); task.setDestFile(jarFile); // TODO - calculate this list of classes dynamically final List<Resource> classResources = new ArrayList<Resource>(); List<Class<?>> renamedClasses = Arrays.asList( GradleWorkerMain.class, BootstrapSecurityManager.class, EncodedStream.EncodedInput.class, FilteringClassLoader.class, FilteringClassLoader.Spec.class, ClassLoaderHierarchy.class, ClassLoaderVisitor.class, ClassLoaderSpec.class, JavaReflectionUtil.class, JavaMethod.class, GradleException.class, NoSuchPropertyException.class, NoSuchMethodException.class, UncheckedException.class, PropertyAccessor.class, PropertyMutator.class, Factory.class, Spec.class); List<Class<?>> classes = new ArrayList<Class<?>>(); classes.addAll(renamedClasses); for (Class<?> aClass : classes) { final String fileName = aClass.getName().replace('.', '/') + ".class"; // Prefer the class from the same classpath as the current class. This is for the case where // we're running in a test under an older // version of Gradle, whose worker classes will be visible to us. // TODO - remove this once we have upgraded to a wrapper with these changes in it Enumeration<URL> resources; try { resources = WorkerProcessClassPathProvider.class.getClassLoader().getResources(fileName); } catch (IOException e) { throw new UncheckedIOException(e); } URL resource = null; while (resources.hasMoreElements()) { URL url = resources.nextElement(); resource = url; if (url.toString().startsWith(currentClasspath.toString())) { break; } } URLResource urlResource = new URLResource(resource) { @Override public synchronized String getName() { return fileName; } }; classResources.add(urlResource); } task.add( new ResourceCollection() { public Iterator iterator() { return classResources.iterator(); } public int size() { return classResources.size(); } public boolean isFilesystemOnly() { return true; } }); // Don't rename references to this class Rule rule = new Rule(); rule.setPattern(SystemApplicationClassLoaderWorker.class.getName()); rule.setResult(SystemApplicationClassLoaderWorker.class.getName()); task.addConfiguredRule(rule); // Rename everything else rule = new Rule(); rule.setPattern("org.gradle.**"); rule.setResult("jarjar.@0"); task.addConfiguredRule(rule); AntUtil.execute(task); }
public void addSetMethod(Method method) { setMethods.add(method); }
public void addSetter(Method method) { setters.add(method); }
public void addGetter(Method method) { if (getters.add(method) && method.getAnnotation(Inject.class) != null) { injector = true; } }
public void addCandidateSetMethod(Method method) { setMethods.add(method); }
public void addActionMethod(Method method) { actionMethods.add(method); }