You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by jl...@apache.org on 2013/05/24 14:57:49 UTC
svn commit: r1486043 - in /ant/easyant/core/trunk/src:
main/java/org/apache/easyant/core/ant/listerners/
main/java/org/apache/easyant/core/services/impl/
main/java/org/apache/easyant/tasks/
test/java/org/apache/easyant/core/services/
Author: jlboudart
Date: Fri May 24 12:57:49 2013
New Revision: 1486043
URL: http://svn.apache.org/r1486043
Log:
EASYANT-57 Task declared in imported/included build script are not handled by PluginService
Added:
ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/ant/listerners/TaskCollectorFromImplicitTargetListener.java
Modified:
ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java
ant/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java
ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java
Added: ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/ant/listerners/TaskCollectorFromImplicitTargetListener.java
URL: http://svn.apache.org/viewvc/ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/ant/listerners/TaskCollectorFromImplicitTargetListener.java?rev=1486043&view=auto
==============================================================================
--- ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/ant/listerners/TaskCollectorFromImplicitTargetListener.java (added)
+++ ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/ant/listerners/TaskCollectorFromImplicitTargetListener.java Fri May 24 12:57:49 2013
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.easyant.core.ant.listerners;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.easyant.tasks.Import;
+import org.apache.easyant.tasks.ParameterTask;
+import org.apache.easyant.tasks.PathTask;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.ComponentHelper;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.Property;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+
+public class TaskCollectorFromImplicitTargetListener implements BuildListener {
+ private List<Task> tasksCollected = new ArrayList<Task>();
+ private List<Class<?>> supportedClasses = new ArrayList<Class<?>>();
+
+ public TaskCollectorFromImplicitTargetListener() {
+ supportedClasses.add(ParameterTask.class);
+ supportedClasses.add(Property.class);
+ supportedClasses.add(Import.class);
+ supportedClasses.add(Path.class);
+ supportedClasses.add(PathTask.class);
+ supportedClasses.add(FileSet.class);
+ }
+
+ public void taskStarted(BuildEvent buildEvent) {
+ if (buildEvent.getTarget().getName().equals("")) {
+ Task task = buildEvent.getTask();
+ if (task.getTaskType() != null) {
+ Class<?> taskClass = ComponentHelper.getComponentHelper(buildEvent.getProject()).getComponentClass(
+ task.getTaskType());
+ if (taskClass != null) {
+ for (Class<?> supportedClass : supportedClasses) {
+ if (supportedClass.isAssignableFrom(taskClass)) {
+ tasksCollected.add(task);
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ public List<Task> getTasksCollected() {
+ return tasksCollected;
+ }
+
+ public List<Class<?>> getSupportedClasses() {
+ return supportedClasses;
+ }
+
+ public void buildFinished(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void buildStarted(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void messageLogged(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void targetFinished(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void targetStarted(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void taskFinished(BuildEvent buildEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Modified: ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java
URL: http://svn.apache.org/viewvc/ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java?rev=1486043&r1=1486042&r2=1486043&view=diff
==============================================================================
--- ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java (original)
+++ ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java Fri May 24 12:57:49 2013
@@ -29,6 +29,7 @@ import java.util.Map.Entry;
import org.apache.easyant.core.EasyAntConstants;
import org.apache.easyant.core.EasyAntMagicNames;
import org.apache.easyant.core.ant.ProjectUtils;
+import org.apache.easyant.core.ant.listerners.TaskCollectorFromImplicitTargetListener;
import org.apache.easyant.core.descriptor.EasyAntModuleDescriptor;
import org.apache.easyant.core.descriptor.PluginType;
import org.apache.easyant.core.descriptor.PropertyDescriptor;
@@ -63,6 +64,7 @@ import org.apache.ivy.plugins.repository
import org.apache.ivy.plugins.resolver.DependencyResolver;
import org.apache.ivy.util.Message;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.ComponentHelper;
import org.apache.tools.ant.ExtensionPoint;
import org.apache.tools.ant.Location;
@@ -206,6 +208,8 @@ public class DefaultPluginServiceImpl im
project.setNewProperty(EasyAntMagicNames.AUDIT_MODE, "true");
project.setNewProperty(EasyAntMagicNames.SKIP_CORE_REVISION_CHECKER, "true");
project.addReference(EasyAntMagicNames.EASYANT_IVY_INSTANCE, easyantIvySettings);
+ project.addBuildListener(new TaskCollectorFromImplicitTargetListener());
+
if (properties != null) {
for (Entry<String, String> entry : properties.entrySet()) {
project.setNewProperty(entry.getKey(), entry.getValue());
@@ -217,40 +221,28 @@ public class DefaultPluginServiceImpl im
}
private void analyseProject(Project project, EasyAntReport eaReport, String conf) throws IOException, Exception {
+ // handle tasks from implicit target
+ // When using import/include, ant create a "implicit target" to process root tasks. When tasks are declared
+ // outside of a target in root project we are able to parse them "normally" as this implicit target is added to
+ // the project. However this is not the case for tasks declared outside any target in imported build script.
+ // So we use a listener to collect required informations
+ for (BuildListener buildListener : project.getBuildListeners()) {
+ if (buildListener instanceof TaskCollectorFromImplicitTargetListener) {
+ TaskCollectorFromImplicitTargetListener taskCollectorFromImplicitTargetListener = (TaskCollectorFromImplicitTargetListener) buildListener;
+ for (Task task : taskCollectorFromImplicitTargetListener.getTasksCollected()) {
+ handleTask(project, eaReport, conf, task);
+ }
+ }
+ }
+
+ // handle tasks declared in targets
Map<String, Target> targets = ProjectUtils.removeDuplicateTargets(project.getTargets());
for (Target target : targets.values()) {
- handleTarget(target, eaReport);
- for (int i = 0; i < target.getTasks().length; i++) {
- Task task = target.getTasks()[i];
- Class<?> taskClass = ComponentHelper.getComponentHelper(project).getComponentClass(task.getTaskType());
- if (taskClass == null) {
- continue;
- }
- if (ParameterTask.class.isAssignableFrom(taskClass)) {
- ParameterTask parameterTask = (ParameterTask) maybeConfigureTask(task);
- handleParameterTask(parameterTask, eaReport);
- }
- if (Property.class.isAssignableFrom(taskClass)) {
- Property propertyTask = (Property) maybeConfigureTask(task);
- handleProperty(propertyTask, eaReport);
- }
- if (Import.class.isAssignableFrom(taskClass)) {
- Import importTask = (Import) maybeConfigureTask(task);
- handleImport(importTask, eaReport, conf);
- }
- if (Path.class.isAssignableFrom(taskClass)) {
- Path path = (Path) maybeConfigureTask(task);
- handlePathParameter(task.getRuntimeConfigurableWrapper().getId(), path, task.getOwningTarget(),
- eaReport);
- }
- if (PathTask.class.isAssignableFrom(taskClass)) {
- PathTask pathTask = (PathTask) maybeConfigureTask(task);
- handlePathParameter(pathTask, eaReport);
- }
- if (FileSet.class.isAssignableFrom(taskClass)) {
- FileSet fileSet = (FileSet) maybeConfigureTask(task);
- handleFilesetParameter(task.getRuntimeConfigurableWrapper().getId(), fileSet, task
- .getOwningTarget(), eaReport);
+ if (!"".equals(target.getName())) {
+ handleTarget(target, eaReport);
+ for (int i = 0; i < target.getTasks().length; i++) {
+ Task task = target.getTasks()[i];
+ handleTask(project, eaReport, conf, task);
}
}
}
@@ -270,6 +262,38 @@ public class DefaultPluginServiceImpl im
}
}
+ private void handleTask(Project project, EasyAntReport eaReport, String conf, Task task) throws Exception {
+ Class<?> taskClass = ComponentHelper.getComponentHelper(project).getComponentClass(task.getTaskType());
+ if (taskClass != null) {
+ if (ParameterTask.class.isAssignableFrom(taskClass)) {
+ ParameterTask parameterTask = (ParameterTask) maybeConfigureTask(task);
+ handleParameterTask(parameterTask, eaReport);
+ }
+ if (Property.class.isAssignableFrom(taskClass)) {
+ Property propertyTask = (Property) maybeConfigureTask(task);
+ handleProperty(propertyTask, eaReport);
+ }
+ if (Import.class.isAssignableFrom(taskClass)) {
+ Import importTask = (Import) maybeConfigureTask(task);
+ handleImport(importTask, eaReport, conf);
+ }
+ if (Path.class.isAssignableFrom(taskClass)) {
+ Path path = (Path) maybeConfigureTask(task);
+ handlePathParameter(task.getRuntimeConfigurableWrapper().getId(), path, task.getOwningTarget(),
+ eaReport);
+ }
+ if (PathTask.class.isAssignableFrom(taskClass)) {
+ PathTask pathTask = (PathTask) maybeConfigureTask(task);
+ handlePathParameter(pathTask, eaReport);
+ }
+ if (FileSet.class.isAssignableFrom(taskClass)) {
+ FileSet fileSet = (FileSet) maybeConfigureTask(task);
+ handleFilesetParameter(task.getRuntimeConfigurableWrapper().getId(), fileSet, task.getOwningTarget(),
+ eaReport);
+ }
+ }
+ }
+
private void handleImport(Import importTask, EasyAntReport eaReport, String conf) throws Exception {
ImportedModuleReport importedModuleReport = new ImportedModuleReport();
@@ -391,57 +415,55 @@ public class DefaultPluginServiceImpl im
}
private void handleTarget(Target target, EasyAntReport eaReport) {
- if (!"".equals(target.getName())) {
- boolean isExtensionPoint = target instanceof ExtensionPoint;
- if (!isExtensionPoint) {
- TargetReport targetReport = new TargetReport();
- targetReport.setName(target.getName());
- StringBuilder sb = new StringBuilder();
- Enumeration<?> targetDeps = target.getDependencies();
- while (targetDeps.hasMoreElements()) {
- String t = (String) targetDeps.nextElement();
- sb.append(t);
- if (targetDeps.hasMoreElements()) {
- sb.append(",");
- }
- }
- targetReport.setDepends(sb.toString());
- targetReport.setDescription(target.getDescription());
- targetReport.setIfCase(target.getIf());
- targetReport.setUnlessCase(target.getUnless());
- for (Iterator<?> iterator = target.getProject().getTargets().values().iterator(); iterator.hasNext();) {
- Target currentTarget = (Target) iterator.next();
- if (currentTarget instanceof ExtensionPoint) {
- Enumeration<?> dependencies = currentTarget.getDependencies();
- while (dependencies.hasMoreElements()) {
- String dep = (String) dependencies.nextElement();
- if (dep.equals(target.getName())) {
- targetReport.setExtensionPoint(currentTarget.getName());
- }
+ boolean isExtensionPoint = target instanceof ExtensionPoint;
+ if (!isExtensionPoint) {
+ TargetReport targetReport = new TargetReport();
+ targetReport.setName(target.getName());
+ StringBuilder sb = new StringBuilder();
+ Enumeration<?> targetDeps = target.getDependencies();
+ while (targetDeps.hasMoreElements()) {
+ String t = (String) targetDeps.nextElement();
+ sb.append(t);
+ if (targetDeps.hasMoreElements()) {
+ sb.append(",");
+ }
+ }
+ targetReport.setDepends(sb.toString());
+ targetReport.setDescription(target.getDescription());
+ targetReport.setIfCase(target.getIf());
+ targetReport.setUnlessCase(target.getUnless());
+ for (Iterator<?> iterator = target.getProject().getTargets().values().iterator(); iterator.hasNext();) {
+ Target currentTarget = (Target) iterator.next();
+ if (currentTarget instanceof ExtensionPoint) {
+ Enumeration<?> dependencies = currentTarget.getDependencies();
+ while (dependencies.hasMoreElements()) {
+ String dep = (String) dependencies.nextElement();
+ if (dep.equals(target.getName())) {
+ targetReport.setExtensionPoint(currentTarget.getName());
}
-
}
+
}
+ }
- eaReport.addTargetReport(targetReport);
+ eaReport.addTargetReport(targetReport);
- Message.debug("Ant file has a target called : " + targetReport.getName());
- } else {
- ExtensionPointReport extensionPoint = new ExtensionPointReport(target.getName());
- StringBuilder sb = new StringBuilder();
- Enumeration<?> targetDeps = target.getDependencies();
- while (targetDeps.hasMoreElements()) {
- String t = (String) targetDeps.nextElement();
- sb.append(t);
- if (targetDeps.hasMoreElements()) {
- sb.append(",");
- }
+ Message.debug("Ant file has a target called : " + targetReport.getName());
+ } else {
+ ExtensionPointReport extensionPoint = new ExtensionPointReport(target.getName());
+ StringBuilder sb = new StringBuilder();
+ Enumeration<?> targetDeps = target.getDependencies();
+ while (targetDeps.hasMoreElements()) {
+ String t = (String) targetDeps.nextElement();
+ sb.append(t);
+ if (targetDeps.hasMoreElements()) {
+ sb.append(",");
}
- extensionPoint.setDepends(sb.toString());
- extensionPoint.setDescription(target.getDescription());
- eaReport.addExtensionPointReport(extensionPoint);
- Message.debug("Ant file has an extensionPoint called : " + extensionPoint.getName());
}
+ extensionPoint.setDepends(sb.toString());
+ extensionPoint.setDescription(target.getDescription());
+ eaReport.addExtensionPointReport(extensionPoint);
+ Message.debug("Ant file has an extensionPoint called : " + extensionPoint.getName());
}
}
@@ -484,13 +506,14 @@ public class DefaultPluginServiceImpl im
Project p = buildProject(null);
Target implicitTarget = ProjectUtils.createTopLevelTarget();
- p.addTarget("", implicitTarget);
+ p.addTarget(implicitTarget);
LoadModule loadModule = new LoadModule();
loadModule.setBuildModule(moduleDescriptor);
loadModule.setBuildFile(optionalAntModule);
loadModule.setOwningTarget(implicitTarget);
loadModule.setLocation(new Location(ProjectUtils.emulateMainScript(p).getAbsolutePath()));
loadModule.setProject(p);
+ loadModule.setTaskName("load-module");
loadModule.execute();
ProjectHelper projectHelper = ProjectUtils.getConfiguredProjectHelper(p);
projectHelper.resolveExtensionOfAttributes(p);
Modified: ant/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java
URL: http://svn.apache.org/viewvc/ant/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java?rev=1486043&r1=1486042&r2=1486043&view=diff
==============================================================================
--- ant/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java (original)
+++ ant/easyant/core/trunk/src/main/java/org/apache/easyant/tasks/LoadModule.java Fri May 24 12:57:49 2013
@@ -250,7 +250,7 @@ public class LoadModule extends Abstract
}
}
- initTask(projectIvyInstance).execute();
+ initTask(projectIvyInstance).perform();
// FIXME: hack as ResolutionCacheManager use XmlModuleDescriptorParser under the hood
EasyAntRepositoryCacheManager cacheManager = new EasyAntRepositoryCacheManager("default-project-cache",
@@ -268,7 +268,7 @@ public class LoadModule extends Abstract
ImportTask importTask = new ImportTask();
importTask.setFile(buildModule.getAbsolutePath());
importTask.setOptional(true);
- initTask(importTask).execute();
+ initTask(importTask).perform();
}
protected void loadBuildModule(File buildModule) {
@@ -302,7 +302,7 @@ public class LoadModule extends Abstract
propTask.setBuildConfigurations(property.getBuildConfigurations());
propTask.setTaskType("antlib:org.apache.easyant:property");
getOwningTarget().addTask(propTask);
- initTask(propTask).execute();
+ initTask(propTask).perform();
}
}
if (md.getConfigureProjectDescriptor() != null) {
@@ -312,7 +312,7 @@ public class LoadModule extends Abstract
configureProject.setBasedir(descriptor.getBasedir());
configureProject.setTaskType("antlib:org.apache.easyant:configure-project");
getOwningTarget().addTask(configureProject);
- initTask(configureProject).execute();
+ initTask(configureProject).perform();
}
if (md.getBuildType() != null) {
@@ -329,7 +329,7 @@ public class LoadModule extends Abstract
importTask.setTaskType("antlib:org.apache.easyant:import");
getOwningTarget().addTask(importTask);
- initTask(importTask).execute();
+ initTask(importTask).perform();
}
}
for (Iterator<?> iterator = md.getPlugins().iterator(); iterator.hasNext();) {
@@ -347,7 +347,7 @@ public class LoadModule extends Abstract
importTask.setExcludes(plugin.getExcludes());
importTask.setTaskType("antlib:org.apache.easyant:import");
getOwningTarget().addTask(importTask);
- initTask(importTask).execute();
+ initTask(importTask).perform();
}
}
// Apply ExtensionPointMapping
@@ -356,7 +356,7 @@ public class LoadModule extends Abstract
bindTarget.setTarget(epMapping.getTarget());
bindTarget.setExtensionOf(epMapping.getExtensionPoint());
bindTarget.setBuildConfigurations(epMapping.getBuildConfigurations());
- initTask(bindTarget).execute();
+ initTask(bindTarget).perform();
}
} catch (Exception e) {
throw new BuildException("problem while parsing Ivy module file: " + e.getMessage(), e);
@@ -473,7 +473,7 @@ public class LoadModule extends Abstract
configureBuildScopedRepository.setSettingsRef(IvyInstanceHelper.buildProjectIvyReference(getProject()));
configureBuildScopedRepository.setGenerateWrapperResoler(true);
getProject().setProperty(EasyAntMagicNames.EASYANT_BUILD_REPOSITORY, EasyAntConstants.BUILD_SCOPE_REPOSITORY);
- initTask(configureBuildScopedRepository).execute();
+ initTask(configureBuildScopedRepository).perform();
}
}
Modified: ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java
URL: http://svn.apache.org/viewvc/ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java?rev=1486043&r1=1486042&r2=1486043&view=diff
==============================================================================
--- ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java (original)
+++ ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java Fri May 24 12:57:49 2013
@@ -92,7 +92,7 @@ public class PluginServiceTest {
// the report should contain the run-java plugin
boolean containsBuildType = false;
- boolean containsPlugin = true;
+ boolean containsPlugin = false;
for (ImportedModuleReport importedModule : eaReport.getImportedModuleReports()) {
if (importedModule.getModuleMrid().equals("org.apache.easyant.buildtypes#build-std-java;0.9")) {
containsBuildType = true;
@@ -154,4 +154,23 @@ public class PluginServiceTest {
String description = pluginService.getPluginDescription("org.apache.easyant.plugins#run-java;0.9");
Assert.assertEquals("This module provides java bytecode execution feature.", description);
}
+
+ @Test
+ public void testGetPluginInfo() throws Exception {
+ EasyAntReport pluginInfo = pluginService.getPluginInfo("org.apache.easyant.plugins#compile-java;0.9");
+ Assert.assertNotNull(pluginInfo);
+ Assert.assertEquals(2, pluginInfo.getImportedModuleReports().size());
+ ImportedModuleReport importedModuleReport = pluginInfo.getImportedModuleReport("abstract-compile");
+ Assert.assertNotNull(importedModuleReport);
+ Assert.assertNotNull(importedModuleReport.getEasyantReport());
+ // abstract-compile import abstract-provisioning
+ Assert.assertEquals(1, importedModuleReport.getEasyantReport().getImportedModuleReports().size());
+
+ Assert.assertNotNull(pluginInfo.getPropertyDescriptors().get("compile.java.includes.pattern"));
+ Assert.assertEquals("**/*.java", pluginInfo.getPropertyDescriptors().get("compile.java.includes.pattern")
+ .getDefaultValue());
+ Assert.assertNotNull(pluginInfo.getPropertyDescriptors().get("target.test.integration.classes"));
+ Assert.assertEquals("target/integration-test/classes", pluginInfo.getPropertyDescriptors().get(
+ "target.test.integration.classes").getDefaultValue());
+ }
}