/** * Marks the provided classes as cache relevant. This means that the provided * classes will be considered when checking for changes to determine whether * or not the generator needs to rerun after a refresh. If no cache relevant * classes are added any change to reloadable classes will cause the generator * to rerun. * * @param classes * the classes to consider when checking for changes. */ protected void addCacheRelevantClasses(final Collection<MetaClass> classes) { for (final MetaClass clazz : classes) { addCacheRelevantClass(clazz); } }
/** * @return True iff this generator does not need to be run again this refresh. */ protected boolean isCacheValid() { return hasGenerationCache() && !(MetaClassFactory.hasAnyChanges() && hasRelevantChanges()); }
@Override public String call() throws Exception { final String generatedCode; if (isCacheEnabled() && isCacheValid()) { log.info("Using cached output from " + AbstractAsyncGenerator.this.getClass().getName()); generatedCode = getGeneratedCache(); } else { log.info("Running generator " + AbstractAsyncGenerator.this.getClass().getName()); clearCacheRelevantClasses(); generatedCode = generate(logger, context); setGeneratedCache(generatedCode); } return generatedCode; } });
private boolean hasRelevantChanges() { final String generatorName = this.getClass().getSimpleName(); final Set<String> relevantClasses = cacheRelevantClasses.get(this.getClass()); if (relevantClasses == null) { log.debug("No classes marked as relevant for {}. Assuming there are relevant changes.", generatorName); return true; } for (final MetaClass clazz : MetaClassFactory.getAllNewOrUpdatedClasses()) { final boolean previouslyMarkedRelevant = relevantClasses.contains(clazz.getFullyQualifiedName()); if (previouslyMarkedRelevant || isRelevantClass(clazz)) { log.debug("New or updated class {} is {} cache relevant for {}.", clazz.getFullyQualifiedName(), (previouslyMarkedRelevant ? "previously marked as" : "now marked as"), generatorName); return true; } else { log.trace("New or updated class {} is not cache relevant for {}.", clazz.getFullyQualifiedName(), generatorName); } } for (final String deleted : MetaClassFactory.getAllDeletedClasses()) { if (relevantClasses.contains(deleted)) { log.debug("Deleted class {} was cache relevant for {}.", deleted, generatorName); return true; } else { log.trace("Deleted class {} is not cache relevant for {}.", deleted, generatorName); } } return false; }
@Override public String call() throws Exception { final String generatedCode; if (isCacheEnabled() && isCacheValid()) { log.info("Using cached output from " + AbstractAsyncGenerator.this.getClass().getName()); generatedCode = getGeneratedCache(); } else { log.info("Running generator " + AbstractAsyncGenerator.this.getClass().getName()); clearCacheRelevantClasses(); generatedCode = generate(logger, context); setGeneratedCache(generatedCode); } return generatedCode; } });
private boolean hasRelevantChanges() { final String generatorName = this.getClass().getSimpleName(); final Set<String> relevantClasses = cacheRelevantClasses.get(this.getClass()); if (relevantClasses == null) { log.debug("No classes marked as relevant for {}. Assuming there are relevant changes.", generatorName); return true; } for (final MetaClass clazz : MetaClassFactory.getAllNewOrUpdatedClasses()) { final boolean previouslyMarkedRelevant = relevantClasses.contains(clazz.getFullyQualifiedName()); if (previouslyMarkedRelevant || isRelevantClass(clazz)) { log.debug("New or updated class {} is {} cache relevant for {}.", clazz.getFullyQualifiedName(), (previouslyMarkedRelevant ? "previously marked as" : "now marked as"), generatorName); return true; } else { log.trace("New or updated class {} is not cache relevant for {}.", clazz.getFullyQualifiedName(), generatorName); } } for (final String deleted : MetaClassFactory.getAllDeletedClasses()) { if (relevantClasses.contains(deleted)) { log.debug("Deleted class {} was cache relevant for {}.", deleted, generatorName); return true; } else { log.trace("Deleted class {} is not cache relevant for {}.", deleted, generatorName); } } return false; }
/** * @return True iff this generator does not need to be run again this refresh. */ protected boolean isCacheValid() { return hasGenerationCache() && !(MetaClassFactory.hasAnyChanges() && hasRelevantChanges()); }
/** * Marks the provided classes as cache relevant. This means that the provided * classes will be considered when checking for changes to determine whether * or not the generator needs to rerun after a refresh. If no cache relevant * classes are added any change to reloadable classes will cause the generator * to rerun. * * @param classes * the classes to consider when checking for changes. */ protected void addCacheRelevantClasses(final Collection<MetaClass> classes) { for (final MetaClass clazz : classes) { addCacheRelevantClass(clazz); } }