Return-Path: X-Original-To: apmail-ant-notifications-archive@minotaur.apache.org Delivered-To: apmail-ant-notifications-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2DE5CFE3D for ; Tue, 9 Jul 2013 07:17:03 +0000 (UTC) Received: (qmail 53231 invoked by uid 500); 9 Jul 2013 07:17:03 -0000 Delivered-To: apmail-ant-notifications-archive@ant.apache.org Received: (qmail 53135 invoked by uid 500); 9 Jul 2013 07:16:56 -0000 Mailing-List: contact notifications-help@ant.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ant.apache.org Delivered-To: mailing list notifications@ant.apache.org Received: (qmail 53126 invoked by uid 99); 9 Jul 2013 07:16:53 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jul 2013 07:16:53 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jul 2013 07:16:51 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id F3AF323888E2 for ; Tue, 9 Jul 2013 07:16:30 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1501112 - in /ant/easyant/core/trunk/src: main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java test/java/org/apache/easyant/core/services/PluginServiceTest.java Date: Tue, 09 Jul 2013 07:16:30 -0000 To: notifications@ant.apache.org From: jlboudart@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130709071630.F3AF323888E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jlboudart Date: Tue Jul 9 07:16:30 2013 New Revision: 1501112 URL: http://svn.apache.org/r1501112 Log: Better handling of properties when performing reports property values don't need to be expanded by default property expander except properties ending with .properties.file (mandatory if we want report to contains properties loaded by property file like done on buildtypes) Modified: ant/easyant/core/trunk/src/main/java/org/apache/easyant/core/services/impl/DefaultPluginServiceImpl.java ant/easyant/core/trunk/src/test/java/org/apache/easyant/core/services/PluginServiceTest.java 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=1501112&r1=1501111&r2=1501112&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 Tue Jul 9 07:16:30 2013 @@ -20,6 +20,7 @@ package org.apache.easyant.core.services import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.text.ParsePosition; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; @@ -71,10 +72,11 @@ import org.apache.tools.ant.Location; import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; import org.apache.tools.ant.PropertyHelper; -import org.apache.tools.ant.PropertyHelper.PropertyEvaluator; import org.apache.tools.ant.Target; import org.apache.tools.ant.Task; import org.apache.tools.ant.UnknownElement; +import org.apache.tools.ant.property.ParseNextProperty; +import org.apache.tools.ant.property.PropertyExpander; import org.apache.tools.ant.taskdefs.Property; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; @@ -123,8 +125,8 @@ public class DefaultPluginServiceImpl im ResolveOptions resolveOptions = new ResolveOptions(); resolveOptions.setLog(ResolveOptions.LOG_QUIET); resolveOptions.setConfs(conf.split(",")); - ResolveReport report = IvyContext.getContext().getIvy().getResolveEngine().resolve( - pluginIvyFile.toURI().toURL(), resolveOptions); + ResolveReport report = IvyContext.getContext().getIvy().getResolveEngine() + .resolve(pluginIvyFile.toURI().toURL(), resolveOptions); eaReport = new EasyAntReport(); eaReport.setResolveReport(report); eaReport.setModuleDescriptor(report.getModuleDescriptor()); @@ -159,8 +161,8 @@ public class DefaultPluginServiceImpl im ResolveOptions resolveOptions = new ResolveOptions(); resolveOptions.setLog(ResolveOptions.LOG_QUIET); resolveOptions.setConfs(conf.split(",")); - final ResolveReport report = IvyContext.getContext().getIvy().getResolveEngine().resolve(moduleRevisionId, - resolveOptions, true); + final ResolveReport report = IvyContext.getContext().getIvy().getResolveEngine() + .resolve(moduleRevisionId, resolveOptions, true); eaReport = new EasyAntReport(); eaReport.setResolveReport(report); eaReport.setModuleDescriptor(report.getModuleDescriptor()); @@ -181,8 +183,8 @@ public class DefaultPluginServiceImpl im } else if ("jar".equals(artifact.getType())) { path.createPathElement().setLocation(artifact.getLocalFile()); } else { - handleOtherResourceFile(moduleRevisionId, artifact.getName(), artifact.getExt(), artifact - .getLocalFile()); + handleOtherResourceFile(moduleRevisionId, artifact.getName(), artifact.getExt(), + artifact.getLocalFile()); } } if (antFile != null && antFile.exists()) { @@ -210,17 +212,11 @@ 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()); - - //add a property helper to ignore basedir property on reports + // add a property helper to ignore basedir property on reports PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(project); - propertyHelper.add(new PropertyEvaluator() { - - public Object evaluate(String propertyName, PropertyHelper helper) { - return propertyName.equals("basedir") ? "${basedir}" : null; - } - - }); + propertyHelper.add(new BypassDefaultPropertyExpander()); if (properties != null) { for (Entry entry : properties.entrySet()) { @@ -233,6 +229,7 @@ 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 @@ -316,8 +313,8 @@ public class DefaultPluginServiceImpl im importedModuleReport.setMandatory(importTask.isMandatory()); importedModuleReport.setMode(importTask.getMode()); importedModuleReport.setAs(importTask.getAs()); - importedModuleReport.setEasyantReport(getPluginInfo(ModuleRevisionId - .parse(importedModuleReport.getModuleMrid()))); + importedModuleReport + .setEasyantReport(getPluginInfo(ModuleRevisionId.parse(importedModuleReport.getModuleMrid()))); eaReport.addImportedModuleReport(importedModuleReport); Message.debug("Ant file import another module called : " + importedModuleReport.getModuleMrid() + " with mode " @@ -629,4 +626,43 @@ public class DefaultPluginServiceImpl im public EasyAntReport generateEasyAntReport(File moduleDescriptor) throws Exception { return generateEasyAntReport(moduleDescriptor, null, null); } + + /** + * Don't try to expand property on reports. Bypassing default property expander allow us to show real static value + * of properties on reports. + */ + private class BypassDefaultPropertyExpander implements PropertyExpander { + + public String parsePropertyName(String s, ParsePosition pos, ParseNextProperty notUsed) { + int index = pos.getIndex(); + // directly check near, triggering characters: + if (s.length() - index >= 3 && '$' == s.charAt(index) && '{' == s.charAt(index + 1)) { + // int start = index + 2; + int start = index; + + // defer to String.indexOf() for protracted check: + int end = s.indexOf('}', start); + if (end < 0) { + throw new BuildException("Syntax error in property: " + s.substring(index)); + } + + // set marker after "}" + pos.setIndex(end + 1); + + // allow to resolve path to property files + // this is mandatory if we want report to contains properties loaded by + // property file like done on buildtypes + // in that case property needs to be really expanded so we need to strips "${" and "}" characters + String strippedPropertyName = s.substring(start + 2, end); + if (strippedPropertyName.endsWith("properties.file")) { + + return strippedPropertyName; + } + + // in other cases return the whole property with "${" and "}" + return start == end ? "" : s.substring(start, end + 1); + } + return null; + } + } } 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=1501112&r1=1501111&r2=1501112&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 Tue Jul 9 07:16:30 2013 @@ -104,6 +104,12 @@ public class PluginServiceTest { "org.apache.easyant.example.Example"); checkPropertyValueEquals(eaReport.getPropertyDescriptors().get("src.main.java"), "${basedir}/src/main/java"); + checkPropertyValueEquals(eaReport.getPropertyDescriptors().get("target.main.classes"), "${target}/main/classes"); + checkPropertyValueEquals(eaReport.getPropertyDescriptors().get("target"), "${basedir}/target"); + checkPropertyValueEquals(eaReport.getPropertyDescriptors().get("test.framework"), "junit"); + + checkPropertyDefaultValueEquals(eaReport.getPropertyDescriptors().get("target.main.artifact"), + "${target.artifacts}/${target.artifacts.main.jar.name}"); // the property should also be contained in getAvailableProperties which // list all properties (those for the current module and those in @@ -148,7 +154,7 @@ public class PluginServiceTest { checkPropertyDefaultValueEquals(pluginInfo.getPropertyDescriptors().get("compile.java.includes.pattern"), "**/*.java"); checkPropertyDefaultValueEquals(pluginInfo.getPropertyDescriptors().get("target.test.integration.classes"), - "target/integration-test/classes"); + "${target}/integration-test/classes"); } @Test @@ -163,8 +169,9 @@ public class PluginServiceTest { Assert.assertEquals(1, importedModuleReport.getEasyantReport().getImportedModuleReports().size()); Assert.assertNotNull(importedModuleReport.getEasyantReport().getImportedModuleReport("abstract-provisioning")); - checkPropertyDefaultValueEquals(importedModuleReport.getEasyantReport().getPropertyDescriptors().get( - "target.test.integration.classes"), "target/integration-test/classes"); + checkPropertyDefaultValueEquals( + importedModuleReport.getEasyantReport().getPropertyDescriptors().get("target.test.integration.classes"), + "${target}/integration-test/classes"); } public void checkPropertyDefaultValueEquals(PropertyDescriptor propertyDescriptor, String expectedValue) {