/******************************************************************************* * Copyright (c) 2006 Intel Corporation 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: * Intel Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.buildmodel; import java.io.PrintStream; import java.util.HashSet; import java.util.Set; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildIOType; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildResource; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildStep; import org.eclipse.cdt.managedbuilder.core.ITool; /* * this is the build description debug utility class */ public class DbgUtil { public static boolean DEBUG = false; private static PrintStream out = System.out; private static final String TRACE_PREFIX = "BuildModel[ "; //$NON-NLS-1$ private static final String TRACE_SUFIX = " ]"; //$NON-NLS-1$ public static void trace(String str){ out.println(formatMsg(str)); } public static String formatMsg(String msg){ return TRACE_PREFIX + msg + TRACE_SUFIX; } public static String stepName(IBuildStep action){ ITool tool = action instanceof BuildStep ? ((BuildStep)action).getTool() : null; if(tool != null) return tool.getName(); if(action.getBuildDescription().getInputStep() == action) return "input step"; //$NON-NLS-1$ if(action.getBuildDescription().getOutputStep() == action) return "output step"; //$NON-NLS-1$ return "<undefined name>"; //$NON-NLS-1$ } public static String resourceName(IBuildResource rc){ if(rc.getFullPath() != null) return rc.getFullPath().toString(); return rc.getLocation().toString(); } public static String dumpType(IBuildIOType type){ StringBuffer buf = new StringBuffer(); buf.append("dumping type: "); //$NON-NLS-1$ buf.append(type.isInput() ? "INPUT" : "OUTPUT"); //$NON-NLS-1$ //$NON-NLS-2$ buf.append(ioTypeResources(type)); buf.append("end dumping type"); //$NON-NLS-1$ return buf.toString(); } public static String ioTypeResources(IBuildIOType type){ StringBuffer buf = new StringBuffer(); IBuildResource rcs[] = type.getResources(); buf.append("\n"); //$NON-NLS-1$ for(int i = 0; i < rcs.length; i++){ buf.append(resourceName(rcs[i])); buf.append("\n"); //$NON-NLS-1$ } return buf.toString(); } public static String dumpStep(IBuildStep step, boolean inputs) { StringBuffer buf = new StringBuffer(); buf.append("dumping step ").append(stepName(step)).append(inputs ? " inputs" : " outputs"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ IBuildIOType types[] = inputs ? step.getInputIOTypes() : step.getOutputIOTypes(); buf.append("\n"); //$NON-NLS-1$ for(int i = 0; i < types.length; i++){ buf.append("ioType " + i + ":"); //$NON-NLS-1$ //$NON-NLS-2$ buf.append(ioTypeResources(types[i])); } buf.append("end dump step\n"); //$NON-NLS-1$ return buf.toString(); } public static String dumpStep(IBuildStep step){ return dumpStep(step, true) + dumpStep(step, false); } public static String dumpResource(IBuildResource rc){ return dumpResource(rc, true) + dumpResource(rc, false); } public static String dumpResource(IBuildResource rc, boolean producer){ StringBuffer buf = new StringBuffer(); buf.append("dumping resource ").append(resourceName(rc)).append(producer ? " producer:" : " deps:"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ if(producer){ if(rc.getProducerIOType() != null) buf.append(dumpStep(rc.getProducerIOType().getStep())); else buf.append("\nresourse has no producer\n"); //$NON-NLS-1$ } else { IBuildIOType types[] = rc.getDependentIOTypes(); if(types.length > 0){ Set<IBuildStep> set = new HashSet<IBuildStep>(); for(int i = 0; i < types.length; i++){ if(set.add(types[i].getStep())){ buf.append(dumpStep(types[i].getStep())); } } } else { buf.append("\n resource has no deps\n"); //$NON-NLS-1$ } } buf.append("end dump resource\n"); //$NON-NLS-1$ return buf.toString(); } public static void flush(){ out.flush(); } }