Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2018-04-14 21:48:02 +0000
committerEike Stepper2018-04-14 21:48:02 +0000
commit3ebbd9b9586d44deb4f3be8792cec06980323a75 (patch)
tree0ad0412d5d6ba1b0744503de37b737eb03d0207b /plugins
parent51f5c05052ddb8e4927896d9433d6850dfe7784d (diff)
downloadcdo-3ebbd9b9586d44deb4f3be8792cec06980323a75.tar.gz
cdo-3ebbd9b9586d44deb4f3be8792cec06980323a75.tar.xz
cdo-3ebbd9b9586d44deb4f3be8792cec06980323a75.zip
[Releng] Add Ant task to transfer class members
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/plugin.xml19
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/CDOTask.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/DeleteProjectTask.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ExpandTemplateTask.java35
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ImportProjectTask.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/MigrateModelTask.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/TransferMembersTask.java358
7 files changed, 279 insertions, 149 deletions
diff --git a/plugins/org.eclipse.emf.cdo.migrator/plugin.xml b/plugins/org.eclipse.emf.cdo.migrator/plugin.xml
index a721ec82f9..2355dec4a1 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.migrator/plugin.xml
@@ -59,12 +59,19 @@
</extension>
<extension point="org.eclipse.ant.core.antTasks">
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.ImportProject" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.ImportProjectTask" />
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.DeleteProject" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.DeleteProjectTask" />
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.MigrateModel" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.MigrateModelTask" />
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.GenerateModel" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.GenerateModelTask" />
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.ExpandTemplate" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.ExpandTemplateTask" />
- <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.TransferMembers" headless="true" class="org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.importProject" class="org.eclipse.emf.cdo.internal.migrator.tasks.ImportProjectTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.deleteProject" class="org.eclipse.emf.cdo.internal.migrator.tasks.DeleteProjectTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.migrateModel" class="org.eclipse.emf.cdo.internal.migrator.tasks.MigrateModelTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.generateModel" class="org.eclipse.emf.cdo.internal.migrator.tasks.GenerateModelTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.expandTemplate" class="org.eclipse.emf.cdo.internal.migrator.tasks.ExpandTemplateTask" />
+ <antTask library="ant_tasks/cdo.ant.tasks.jar" name="cdo.transferMembers" class="org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask" />
+ </extension>
+
+ <extension point="org.eclipse.ant.core.antTypes">
+ <antType library="ant_tasks/cdo.ant.tasks.jar" name="templateproperty" class="org.eclipse.emf.cdo.internal.migrator.tasks.ExpandTemplateTask$TemplateProperty" />
+ <antType library="ant_tasks/cdo.ant.tasks.jar" name="sourceclass" class="org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask$SourceClass" />
+ <antType library="ant_tasks/cdo.ant.tasks.jar" name="sourcefield" class="org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask$SourceClass$SourceField" />
+ <antType library="ant_tasks/cdo.ant.tasks.jar" name="sourcemethod" class="org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask$SourceClass$SourceMethod" />
</extension>
</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/CDOTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/CDOTask.java
index fa7c26366c..bf715dfc75 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/CDOTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/CDOTask.java
@@ -85,11 +85,11 @@ public abstract class CDOTask extends Task
protected abstract void doExecute() throws Exception;
- protected final void log(Object object)
+ protected final void verbose(Object object)
{
if (verbose)
{
- System.out.println(object);
+ log(String.valueOf(object));
}
}
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/DeleteProjectTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/DeleteProjectTask.java
index 2f4482cee8..3fbb55f2cb 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/DeleteProjectTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/DeleteProjectTask.java
@@ -46,11 +46,11 @@ public class DeleteProjectTask extends CDOTask
IProject project = root.getProject(projectName);
if (!project.exists())
{
- log("Project " + projectName + " does not exist.");
+ verbose("Project " + projectName + " does not exist.");
return;
}
- log("Deleting project " + projectName + " ...");
+ verbose("Deleting project " + projectName + " ...");
project.delete(deleteContent, true, new NullProgressMonitor());
}
}
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ExpandTemplateTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ExpandTemplateTask.java
index d610d68109..99df9a10d9 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ExpandTemplateTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ExpandTemplateTask.java
@@ -1,3 +1,13 @@
+/*
+ * Copyright (c) 2018 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
package org.eclipse.emf.cdo.internal.migrator.tasks;
import org.apache.tools.ant.BuildException;
@@ -13,7 +23,7 @@ import java.util.Map;
*/
public class ExpandTemplateTask extends CDOTask
{
- private final List<Property> properties = new ArrayList<Property>();
+ private final List<TemplateProperty> templateProperties = new ArrayList<TemplateProperty>();
private File template;
@@ -23,11 +33,11 @@ public class ExpandTemplateTask extends CDOTask
private String placeholderSuffix = "%%";
- public Property createProperty()
+ public TemplateProperty createTemplateProperty()
{
- Property property = new Property();
- properties.add(property);
- return property;
+ TemplateProperty templateProperty = new TemplateProperty();
+ templateProperties.add(templateProperty);
+ return templateProperty;
}
public void setTemplate(File template)
@@ -59,9 +69,9 @@ public class ExpandTemplateTask extends CDOTask
assertTrue("'placeholderPrefix' must be specified.", placeholderPrefix != null && placeholderPrefix.length() != 0);
assertTrue("'placeholderSuffix' must be specified.", placeholderSuffix != null && placeholderSuffix.length() != 0);
- for (Property property : properties)
+ for (TemplateProperty templateProperty : templateProperties)
{
- String name = property.getName();
+ String name = templateProperty.getName();
assertTrue("'name' of property must be specified.", name != null && name.length() != 0);
}
}
@@ -69,6 +79,8 @@ public class ExpandTemplateTask extends CDOTask
@Override
protected void doExecute() throws Exception
{
+ verbose("Expanding template " + template + " to target " + target);
+
String content = readTextFile(template);
Map<String, String> properties = getProperties();
@@ -101,6 +113,7 @@ public class ExpandTemplateTask extends CDOTask
break;
}
+ verbose("Expanding template property '" + entry.getKey() + "' at position " + pos);
result.replace(pos, pos + placeholderLength, value);
start = pos + valueLength;
}
@@ -118,9 +131,9 @@ public class ExpandTemplateTask extends CDOTask
{
Map<String, String> result = new LinkedHashMap<String, String>();
- for (Property property : properties)
+ for (TemplateProperty templateProperty : templateProperties)
{
- result.put(property.getName(), property.getValue());
+ result.put(templateProperty.getName(), templateProperty.getValue());
}
return result;
@@ -129,13 +142,13 @@ public class ExpandTemplateTask extends CDOTask
/**
* @author Eike Stepper
*/
- public static final class Property
+ public static final class TemplateProperty
{
private String name;
private String value;
- public Property()
+ public TemplateProperty()
{
}
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ImportProjectTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ImportProjectTask.java
index c95b6ada2f..f41a353a92 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ImportProjectTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/ImportProjectTask.java
@@ -59,11 +59,11 @@ public class ImportProjectTask extends CDOTask
throw new BuildException("Project " + projectName + " exists in different location: " + existingLocation);
}
- log("Project " + fromLocation + " is already imported.");
+ verbose("Project " + fromLocation + " is already imported.");
return;
}
- log("Importing project " + fromLocation + " ...");
+ verbose("Importing project " + fromLocation + " ...");
IPath locationPath = new Path(fromLocation.getAbsolutePath());
IProjectDescription projectDescription = workspace.newProjectDescription(projectName);
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/MigrateModelTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/MigrateModelTask.java
index cb9033d41e..2b33f449ff 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/MigrateModelTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/MigrateModelTask.java
@@ -52,12 +52,12 @@ public class MigrateModelTask extends CDOTask
String msg = CDOMigratorUtil.adjustGenModel(genModel, featureDelegation);
if (msg == null)
{
- log(Messages.getString("MigrateAction_3"));
+ verbose(Messages.getString("MigrateAction_3"));
}
else
{
genModel.eResource().save(null);
- log(Messages.getString("MigrateAction_4") + msg);
+ verbose(Messages.getString("MigrateAction_4") + msg);
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/TransferMembersTask.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/TransferMembersTask.java
index 30b6b0f2c1..d19926f4c5 100644
--- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/TransferMembersTask.java
+++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/internal/migrator/tasks/TransferMembersTask.java
@@ -1,10 +1,23 @@
+/*
+ * Copyright (c) 2018 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
package org.eclipse.emf.cdo.internal.migrator.tasks;
+import org.eclipse.emf.cdo.internal.migrator.tasks.TransferMembersTask.SourceClass.SourceMember;
+
import org.apache.tools.ant.BuildException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -16,7 +29,7 @@ import java.util.regex.Pattern;
*/
public class TransferMembersTask extends ExpandTemplateTask
{
- private File sourceClass;
+ private final List<SourceClass> sourceClasses = new ArrayList<SourceClass>();
private String importsPlaceholder = "IMPORTS";
@@ -24,15 +37,11 @@ public class TransferMembersTask extends ExpandTemplateTask
private String methodsPlaceholder = "METHODS";
- private boolean transferImports = true;
-
- private final List<TransferField> transferFields = new ArrayList<TransferField>();
-
- private final List<TransferMethod> transferMethods = new ArrayList<TransferMethod>();
-
- public void setSourceClass(File sourceClass)
+ public SourceClass createSourceClass()
{
- this.sourceClass = sourceClass;
+ SourceClass sourceClass = new SourceClass();
+ sourceClasses.add(sourceClass);
+ return sourceClass;
}
public void setImportsPlaceholder(String importsPlaceholder)
@@ -50,113 +59,82 @@ public class TransferMembersTask extends ExpandTemplateTask
this.methodsPlaceholder = methodsPlaceholder;
}
- public void setTransferImports(boolean transferImports)
- {
- this.transferImports = transferImports;
- }
-
- public TransferField createTransferField()
- {
- TransferField transferField = new TransferField();
- transferFields.add(transferField);
- return transferField;
- }
-
- public TransferMethod createTransferMethod()
- {
- TransferMethod transferMethod = new TransferMethod();
- transferMethods.add(transferMethod);
- return transferMethod;
- }
-
@Override
protected void checkAttributes() throws BuildException
{
super.checkAttributes();
- assertTrue("'sourceClass' must be specified.", sourceClass != null);
- assertTrue("'sourceClass' must be point to an existing file.", sourceClass.isFile());
- assertTrue("'importsPlaceholder' must be specified.", importsPlaceholder != null && importsPlaceholder.length() != 0);
- assertTrue("'fieldsPlaceholder' must be specified.", fieldsPlaceholder != null && fieldsPlaceholder.length() != 0);
- assertTrue("'methodsPlaceholder' must be specified.", methodsPlaceholder != null && methodsPlaceholder.length() != 0);
- checkTransferMembers(transferFields);
- checkTransferMembers(transferMethods);
- }
-
- private void checkTransferMembers(List<? extends TransferMember> transferMembers)
- {
- for (TransferMember transferMember : transferMembers)
+ for (SourceClass sourceClass : sourceClasses)
{
- String pattern = transferMember.getPattern();
- assertTrue("'pattern' must be specified.", pattern != null && pattern.length() != 0);
+ sourceClass.checkAttributes();
}
+
+ assertTrue("'importsPlaceholder' must be specified.", importsPlaceholder != null && importsPlaceholder.length() != 0);
+ assertTrue("'fieldsPlaceholder' must be specified.", fieldsPlaceholder != null && fieldsPlaceholder.length() != 0);
+ assertTrue("'methodsPlaceholder' must be specified.", methodsPlaceholder != null && methodsPlaceholder.length() != 0);
}
@Override
protected String generate(String content, Map<String, String> properties) throws Exception
{
- Collector collector = new Collector(sourceClass);
+ Collector collector = new Collector(this);
- StringBuilder imports = new StringBuilder();
- if (transferImports)
+ for (SourceClass sourceClass : sourceClasses)
{
- for (String name : collector.imports.keySet())
- {
- imports.append("import ");
- imports.append(name);
- imports.append(";");
- imports.append(NL);
- }
+ collector.collect(sourceClass);
}
- properties.put(importsPlaceholder, imports.toString());
- properties.put(fieldsPlaceholder, formatMembers(collector.fields, transferFields));
- properties.put(methodsPlaceholder, formatMembers(collector.methods, transferMethods));
+ properties.put(importsPlaceholder, formatImports(collector.imports.keySet()));
+ properties.put(fieldsPlaceholder, formatMembers(collector.fields.values()));
+ properties.put(methodsPlaceholder, formatMembers(collector.methods.values()));
return super.generate(content, properties);
}
- private String formatMembers(Map<String, List<String>> members, List<? extends TransferMember> transferMembers)
+ private String formatImports(Collection<String> imports)
{
- if (transferMembers.isEmpty())
- {
- return "";
- }
+ StringBuilder builder = new StringBuilder();
+ boolean first = true;
- List<Pattern> patterns = new ArrayList<Pattern>();
- for (TransferMember transferMember : transferMembers)
+ for (String name : imports)
{
- patterns.add(Pattern.compile(transferMember.getPattern()));
+ if (first)
+ {
+ first = false;
+ }
+ else
+ {
+ builder.append(NL);
+ }
+
+ builder.append("import ");
+ builder.append(name);
+ builder.append(";");
}
+ return builder.toString();
+ }
+
+ private String formatMembers(Collection<List<String>> members)
+ {
StringBuilder builder = new StringBuilder();
boolean first = true;
- for (Map.Entry<String, List<String>> entry : members.entrySet())
+ for (List<String> texts : members)
{
- String name = entry.getKey();
- for (Pattern pattern : patterns)
+ for (String text : texts)
{
- if (pattern.matcher(name).matches())
+ if (first)
{
- List<String> texts = entry.getValue();
- for (String text : texts)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- builder.append(NL);
- builder.append(NL);
- }
-
- builder.append(text);
- }
-
- break;
+ first = false;
}
+ else
+ {
+ builder.append(NL);
+ builder.append(NL);
+ }
+
+ builder.append(text);
}
}
@@ -166,50 +144,132 @@ public class TransferMembersTask extends ExpandTemplateTask
/**
* @author Eike Stepper
*/
- public static abstract class TransferMember
+ public static final class SourceClass
{
- private String pattern;
+ private File file;
+
+ private boolean imports = true;
+
+ private final List<SourceField> sourceFields = new ArrayList<SourceField>();
- public String getPattern()
+ private final List<SourceMethod> sourceMethods = new ArrayList<SourceMethod>();
+
+ public File getFile()
{
- return pattern;
+ return file;
}
- public void setPattern(String pattern)
+ public void setFile(File file)
{
- this.pattern = pattern;
+ this.file = file;
}
- }
- /**
- * @author Eike Stepper
- */
- public static final class TransferField extends TransferMember
- {
- @Override
- public String toString()
+ public boolean isImports()
{
- StringBuilder builder = new StringBuilder();
- builder.append("TransferField[");
- builder.append(getPattern());
- builder.append("]");
- return builder.toString();
+ return imports;
+ }
+
+ public void setImports(boolean imports)
+ {
+ this.imports = imports;
+ }
+
+ public List<SourceField> getSourceFields()
+ {
+ return sourceFields;
+ }
+
+ public SourceField createSourceField()
+ {
+ SourceField sourceField = new SourceField();
+ sourceFields.add(sourceField);
+ return sourceField;
+ }
+
+ public List<SourceMethod> getSourceMethods()
+ {
+ return sourceMethods;
+ }
+
+ public SourceMethod createSourceMethod()
+ {
+ SourceMethod sourceMethod = new SourceMethod();
+ sourceMethods.add(sourceMethod);
+ return sourceMethod;
}
- }
- /**
- * @author Eike Stepper
- */
- public static final class TransferMethod extends TransferMember
- {
@Override
public String toString()
{
- StringBuilder builder = new StringBuilder();
- builder.append("TransferMethod[");
- builder.append(getPattern());
- builder.append("]");
- return builder.toString();
+ return String.valueOf(file);
+ }
+
+ public void checkAttributes() throws BuildException
+ {
+ assertTrue("'file' must be specified.", file != null);
+ assertTrue("'file' must be point to an existing file.", file.isFile());
+
+ checkSourceMembers(sourceFields);
+ checkSourceMembers(sourceMethods);
+ }
+
+ private static void checkSourceMembers(List<? extends SourceMember> sourceMembers)
+ {
+ for (SourceMember sourceMember : sourceMembers)
+ {
+ Pattern pattern = sourceMember.getPattern();
+ assertTrue("'match' must be specified.", pattern != null);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class SourceMember
+ {
+ private Pattern pattern;
+
+ public Pattern getPattern()
+ {
+ return pattern;
+ }
+
+ public void setMatch(String regex)
+ {
+ pattern = Pattern.compile(regex);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class SourceField extends SourceMember
+ {
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SourceField[");
+ builder.append(getPattern());
+ builder.append("]");
+ return builder.toString();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class SourceMethod extends SourceMember
+ {
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SourceMethod[");
+ builder.append(getPattern());
+ builder.append("]");
+ return builder.toString();
+ }
}
}
@@ -232,28 +292,53 @@ public class TransferMembersTask extends ExpandTemplateTask
public final Map<String, List<String>> methods = new LinkedHashMap<String, List<String>>();
- public Collector(File file) throws IOException
+ private final CDOTask task;
+
+ public Collector(CDOTask task)
{
- String content = readTextFile(file);
- collect(content, IMPORT_PATTERN, 1, imports);
- collect(content, FIELD_PATTERN, 3, fields);
- collect(content, METHOD_PATTERN, 4, methods);
+ this.task = task;
+ }
+
+ public void collect(SourceClass sourceClass) throws IOException
+ {
+ String content = readTextFile(sourceClass.getFile());
+
+ if (sourceClass.isImports())
+ {
+ task.verbose("Collecting imports of " + sourceClass);
+ collect(content, IMPORT_PATTERN, 1, null, imports);
+ }
+
+ if (!sourceClass.getSourceFields().isEmpty())
+ {
+ task.verbose("Collecting fields of " + sourceClass);
+ collect(content, FIELD_PATTERN, 3, sourceClass.getSourceFields(), fields);
+ }
+
+ if (!sourceClass.getSourceMethods().isEmpty())
+ {
+ task.verbose("Collecting methods of " + sourceClass);
+ collect(content, METHOD_PATTERN, 4, sourceClass.getSourceMethods(), methods);
+ }
}
- private static void collect(String content, Pattern pattern, int group, Map<String, List<String>> result)
+ private void collect(String content, Pattern pattern, int group, List<? extends SourceMember> sourceMembers, Map<String, List<String>> result)
{
Matcher matcher = pattern.matcher(content);
- while (matcher.find())
+ int matcherStart = 0;
+
+ while (matcher.find(matcherStart))
{
- String text = matcher.group(0);
String name = matcher.group(group);
+ String text = matcher.group(0);
+ matcherStart = matcher.end() + 1;
if (pattern == METHOD_PATTERN)
{
String braceOrSemicolon = matcher.group(5);
if (braceOrSemicolon.equals("{"))
{
- int start = matcher.end();
+ int start = matcherStart - 1;
int end = content.length();
int nesting = 1;
@@ -268,7 +353,9 @@ public class TransferMembersTask extends ExpandTemplateTask
{
if (--nesting == 0)
{
- String body = content.substring(start, i + 1);
+ matcherStart = i + 1;
+
+ String body = content.substring(start, matcherStart);
text += body;
break;
}
@@ -277,6 +364,14 @@ public class TransferMembersTask extends ExpandTemplateTask
}
}
+ if (sourceMembers != null)
+ {
+ if (!matchName(name, sourceMembers))
+ {
+ continue;
+ }
+ }
+
List<String> texts = result.get(name);
if (texts == null)
{
@@ -285,7 +380,22 @@ public class TransferMembersTask extends ExpandTemplateTask
}
texts.add(text);
+ task.verbose(" " + name);
}
}
+
+ private static boolean matchName(String name, List<? extends SourceMember> sourceMembers)
+ {
+ for (SourceMember sourceMember : sourceMembers)
+ {
+ Pattern pattern = sourceMember.getPattern();
+ if (pattern.matcher(name).matches())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
}

Back to the top