diff options
author | Xavier Ducrohet <xav@android.com> | 2012-03-29 20:24:59 -0700 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2012-04-05 16:36:12 -0700 |
commit | 61d029996fe89b21f0b4f8a2934b3ae0bcc414f3 (patch) | |
tree | 44ddcc2a31262329dd93a7fc5e7efa6948c63e5c /anttargetprint | |
parent | f418b542ef719ea71b18c8bd6ea2e379d8a39060 (diff) | |
download | sdk-61d029996fe89b21f0b4f8a2934b3ae0bcc414f3.zip sdk-61d029996fe89b21f0b4f8a2934b3ae0bcc414f3.tar.gz sdk-61d029996fe89b21f0b4f8a2934b3ae0bcc414f3.tar.bz2 |
Small tool to print the target graph of Ant builds.
Change-Id: I3ac594477aae6db08178b4def14f8da587ed06d1
Diffstat (limited to 'anttargetprint')
-rw-r--r-- | anttargetprint/.classpath | 7 | ||||
-rw-r--r-- | anttargetprint/.project | 17 | ||||
-rw-r--r-- | anttargetprint/.settings/org.eclipse.jdt.core.prefs | 12 | ||||
-rw-r--r-- | anttargetprint/src/com/android/anttargetprint/BuildXmlHandler.java | 108 | ||||
-rw-r--r-- | anttargetprint/src/com/android/anttargetprint/Main.java | 61 |
5 files changed, 205 insertions, 0 deletions
diff --git a/anttargetprint/.classpath b/anttargetprint/.classpath new file mode 100644 index 0000000..901231a --- /dev/null +++ b/anttargetprint/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> + <classpathentry kind="var" path="ANDROID_SRC/prebuilt/common/kxml2/kxml2-2.3.0.jar" sourcepath="/ANDROID_SRC/dalvik/libcore/xml/src/main/java"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/anttargetprint/.project b/anttargetprint/.project new file mode 100644 index 0000000..10b95ef --- /dev/null +++ b/anttargetprint/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>anttargetprint</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/anttargetprint/.settings/org.eclipse.jdt.core.prefs b/anttargetprint/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8470dc5 --- /dev/null +++ b/anttargetprint/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +#Thu Mar 29 19:40:52 PDT 2012 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/anttargetprint/src/com/android/anttargetprint/BuildXmlHandler.java b/anttargetprint/src/com/android/anttargetprint/BuildXmlHandler.java new file mode 100644 index 0000000..e9bc4f3 --- /dev/null +++ b/anttargetprint/src/com/android/anttargetprint/BuildXmlHandler.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 com.android.anttargetprint; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class BuildXmlHandler extends DefaultHandler { + + private Map<String, String> mTargets = new HashMap<String, String>(); + private int mLevel = 0; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + + mLevel++; + + if (mLevel == 2 && "target".equals(qName)) { + String name = attributes.getValue("name"); + String depends = attributes.getValue("depends"); + + if (name != null) { + if (depends == null) { + depends = ""; + } + + mTargets.put(name, depends); + } + } + + super.startElement(uri, localName, qName, attributes); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + mLevel--; + super.endElement(uri, localName, qName); + } + + Map<String, List<String>> processTargets() { + HashMap<String, List<String>> result = new HashMap<String, List<String>>(); + + for (Entry<String, String> entry : mTargets.entrySet()) { + process(entry.getKey(), entry.getValue(), result); + } + + return result; + } + + private List<String> process(String targetName, String targetDepends, + Map<String, List<String>> resultMap) { + + // first check if this was already processed. + List<String> resultList = resultMap.get(targetName); + if (resultList != null) { + return resultList; + } + + resultList = new ArrayList<String>(); + + if (targetDepends.length() > 0) { + String[] dependencies = targetDepends.split(","); + + for (String dependency : dependencies) { + String dependencyTrim = dependency.trim(); + // get all the dependencies for this targets. + List<String> dependencyList = resultMap.get(dependencyTrim); + if (dependencyList == null) { + dependencyList = process(dependencyTrim, mTargets.get(dependencyTrim), + resultMap); + } + + // add those to the new result list + resultList.addAll(dependencyList); + + // and add this dependency as well + resultList.add(dependencyTrim); + } + } + + resultMap.put(targetName, resultList); + + return resultList; + } + +} diff --git a/anttargetprint/src/com/android/anttargetprint/Main.java b/anttargetprint/src/com/android/anttargetprint/Main.java new file mode 100644 index 0000000..e270d97 --- /dev/null +++ b/anttargetprint/src/com/android/anttargetprint/Main.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 com.android.anttargetprint; + +import java.io.File; +import java.util.List; +import java.util.Map.Entry; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + + +public class Main { + + /** + * @param args + */ + public static void main(String[] args) { + + if (args.length != 1) { + System.err.println("USAGE: <prog> [FILE]"); + System.exit(1); + } + + try { + SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); + BuildXmlHandler handler = new BuildXmlHandler(); + parser.parse(new File(args[0]), handler); + + for (Entry<String, List<String>> entry : handler.processTargets().entrySet()) { + String name = entry.getKey(); + if (name.charAt(0) != '-') { + System.out.print(entry.getKey()); + System.out.print(" : "); + for (String v : entry.getValue()) { + System.out.print(v); + System.out.print(" > "); + } + System.out.println(); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + } +} |