ソースを参照

Only update the generated files if any source file is newer than the generated ones.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@679164 13f79535-47bb-0310-9956-ffa450edef68
pull/37/head
Jeremias Maerki 16年前
コミット
94473ec6c2

+ 11
- 7
src/codegen/java/org/apache/fop/tools/EventProducerCollector.java ファイルの表示

@@ -46,7 +46,7 @@ public class EventProducerCollector {

private static final String CLASSNAME_EVENT_PRODUCER = EventProducer.class.getName();
private static final Map PRIMITIVE_MAP;
static {
Map m = new java.util.HashMap();
m.put("boolean", Boolean.class);
@@ -59,7 +59,7 @@ public class EventProducerCollector {
m.put("double", Double.class);
PRIMITIVE_MAP = Collections.unmodifiableMap(m);
}
private DocletTagFactory tagFactory;
private EventModel model = new EventModel();

@@ -81,21 +81,25 @@ public class EventProducerCollector {
/**
* Scans a file and processes it if it extends the {@link EventProducer} interface.
* @param src the source file (a Java source file)
* @return true if the file contained an EventProducer interface
* @throws IOException if an I/O error occurs
* @throws EventConventionException if the EventProducer conventions are violated
* @throws ClassNotFoundException if a required class cannot be found
*/
public void scanFile(File src)
public boolean scanFile(File src)
throws IOException, EventConventionException, ClassNotFoundException {
JavaDocBuilder builder = new JavaDocBuilder(this.tagFactory);
builder.addSource(src);
JavaClass[] classes = builder.getClasses();
boolean eventProducerFound = false;
for (int i = 0, c = classes.length; i < c; i++) {
JavaClass clazz = classes[i];
if (clazz.isInterface() && implementsInterface(clazz, CLASSNAME_EVENT_PRODUCER)) {
processEventProducerInterface(clazz);
eventProducerFound = true;
}
}
return eventProducerFound;
}

private boolean implementsInterface(JavaClass clazz, String intf) {
@@ -146,13 +150,13 @@ public class EventProducerCollector {
throw new EventConventionException("The first parameter of the method " + methodSig
+ " must be: 'Object source'!");
}
//build method model
DocletTag tag = method.getTagByName("event.severity");
EventSeverity severity;
if (tag != null) {
severity = EventSeverity.valueOf(tag.getValue());
} else {
} else {
severity = EventSeverity.INFO;
}
EventMethodModel methodMeta = new EventMethodModel(
@@ -192,7 +196,7 @@ public class EventProducerCollector {
public EventModel getModel() {
return this.model;
}
/**
* Saves the accumulated event model to an XML file.
* @param modelFile the target model file
@@ -201,5 +205,5 @@ public class EventProducerCollector {
public void saveModelToXML(File modelFile) throws IOException {
getModel().saveToXML(modelFile);
}
}

+ 17
- 6
src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java ファイルの表示

@@ -63,16 +63,21 @@ public class EventProducerCollectorTask extends Task {
public void execute() throws BuildException {
try {
EventProducerCollector collector = new EventProducerCollector();
processFileSets(collector);
long lastModified = processFileSets(collector);
File parentDir = getModelFile().getParentFile();
if (!parentDir.exists() && !parentDir.mkdirs()) {
throw new BuildException(
"Could not create target directory for event model file: " + parentDir);
}
collector.saveModelToXML(getModelFile());
log("Event model written to " + getModelFile());
if (!getModelFile().exists() || lastModified > getModelFile().lastModified()) {
collector.saveModelToXML(getModelFile());
log("Event model written to " + getModelFile());
}
if (getTranslationFile() != null) {
updateTranslationFile();
if (!getTranslationFile().exists()
|| lastModified > getTranslationFile().lastModified()) {
updateTranslationFile();
}
}
} catch (ClassNotFoundException e) {
throw new BuildException(e);
@@ -164,12 +169,14 @@ public class EventProducerCollectorTask extends Task {
/**
* Processes the file sets defined for the task.
* @param collector the collector to use for collecting the event producers
* @return the time of the latest modification of any of the files inspected
* @throws IOException if an I/O error occurs
* @throws EventConventionException if the EventProducer conventions are violated
* @throws ClassNotFoundException if a required class cannot be found
*/
protected void processFileSets(EventProducerCollector collector)
protected long processFileSets(EventProducerCollector collector)
throws IOException, EventConventionException, ClassNotFoundException {
long lastModified = 0;
Iterator iter = filesets.iterator();
while (iter.hasNext()) {
FileSet fs = (FileSet)iter.next();
@@ -179,9 +186,13 @@ public class EventProducerCollectorTask extends Task {
for (int i = 0, c = srcFiles.length; i < c; i++) {
String filename = srcFiles[i];
File src = new File(directory, filename);
collector.scanFile(src);
boolean eventProducerFound = collector.scanFile(src);
if (eventProducerFound) {
lastModified = Math.max(lastModified, src.lastModified());
}
}
}
return lastModified;
}

/**

読み込み中…
キャンセル
保存