aboutsummaryrefslogtreecommitdiffstats
path: root/anttargetprint/src/com/android
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-03-29 20:24:59 -0700
committerXavier Ducrohet <xav@android.com>2012-04-05 16:36:12 -0700
commit61d029996fe89b21f0b4f8a2934b3ae0bcc414f3 (patch)
tree44ddcc2a31262329dd93a7fc5e7efa6948c63e5c /anttargetprint/src/com/android
parentf418b542ef719ea71b18c8bd6ea2e379d8a39060 (diff)
downloadsdk-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/src/com/android')
-rw-r--r--anttargetprint/src/com/android/anttargetprint/BuildXmlHandler.java108
-rw-r--r--anttargetprint/src/com/android/anttargetprint/Main.java61
2 files changed, 169 insertions, 0 deletions
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();
+ }
+ }
+}