diff -r a151135b0cf9 -r aa2539c91954 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompiler.java --- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/TraceCompiler.java Wed Sep 29 17:45:35 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,758 +0,0 @@ -/* - * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: - * - * TraceCompiler command-line main class - * - */ -package com.nokia.tracecompiler; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.nokia.tracecompiler.document.FileDocumentMonitor; -import com.nokia.tracecompiler.document.StringDocumentFactory; -import com.nokia.tracecompiler.engine.TraceCompilerEngineEvents; -import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals; -import com.nokia.tracecompiler.engine.TraceCompilerEngineInterface; -import com.nokia.tracecompiler.engine.TraceLocationList; -import com.nokia.tracecompiler.engine.project.ProjectEngine; -import com.nokia.tracecompiler.engine.utils.TraceUtils; -import com.nokia.tracecompiler.model.TraceCompilerException; -import com.nokia.tracecompiler.model.TraceModel; -import com.nokia.tracecompiler.plugin.TraceCompilerPlugin; -import com.nokia.tracecompiler.project.GroupNames; -import com.nokia.tracecompiler.source.SourceConstants; -import com.nokia.tracecompiler.source.SymbianConstants; -import com.nokia.tracecompiler.utils.DocumentFactory; -import com.nokia.tracecompiler.utils.TraceCompilerVersion; - -/** - * TraceCompiler command-line main class - * - */ -public class TraceCompiler { - - private static String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$ - - /** - * Index of third character - */ - private static final int INDEX_OF_THIRD_CHARACTER = 2; - - /** - * Index of first character - */ - private static final int INDEX_OF_FIRST_CHARACTER = 0; - - /** - * Version option - */ - private static final String VERSION_OPTION = "--version"; //$NON-NLS-1$ - private static final String LEGACY_VERSION_OPTION = "-version"; //$NON-NLS-1$ - private static final String VERSION_OPTION_SF = "-v"; //$NON-NLS-1$ - /** - * Version option instruction text - */ - private static final String VERSION_OPTION_INSTRUCTION_TEXT = "print TraceCompiler version"; //$NON-NLS-1$ - - - /** - * help option - */ - private static final String HELP_OPTION = "--help"; //$NON-NLS-1$ - private static final String HELP_OPTION_SF = "-h"; //$NON-NLS-1$ - private static final String HELP_OPTION_INSTRUCTION_TEXT = "print help"; //$NON-NLS-1$ - - /** - * Verbose option - */ - private static final String VERBOSE_OPTION = "--verbose"; //$NON-NLS-1$ - private static final String VERBOSE_OPTION_SF = "-vb"; //$NON-NLS-1$ - /** - * Verbose option instruction text - */ - private static final String VERBOSE_OPTION_INSTRUCTION_TEXT = "print info messages."; //$NON-NLS-1$ - - /** - * keep going option - */ - private static final String STOP_ON_ERROR_OPTION = "--stopOnError"; //$NON-NLS-1$ - private static final String STOP_ON_ERROR_OPTION_SF = "-soe"; //$NON-NLS-1$ - /** - * keep going option instruction text - */ - private static final String STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT = "On error, stop at the end of the compilation unit."; //$NON-NLS-1$ - - - - /** - * Version text - */ - private static final String VERSION_TEXT = "TraceCompiler version "; //$NON-NLS-1$ - - /** - * Option instruction text - */ - private static final String OPTION_INSTRUCTION_TEXT = "Options:"; //$NON-NLS-1$ - - - private static final String USAGE = "Usage: " + LINE_SEPARATOR + //$NON-NLS-1$ - "tracecompiler [options] Component_UID [Component_name MMP_path source_file...]" + LINE_SEPARATOR + //$NON-NLS-1$ - "\t" + OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$ - "\t" + HELP_OPTION_SF + ", " + HELP_OPTION + ", " + HELP_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ - "\t" + VERSION_OPTION_SF + ", " + VERSION_OPTION + ", " + LEGACY_VERSION_OPTION + "\t" + VERSION_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ - "\t" + VERBOSE_OPTION_SF + ", " + VERBOSE_OPTION + "\t\t" + VERBOSE_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR + //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - "\t" + STOP_ON_ERROR_OPTION_SF + ", " + STOP_ON_ERROR_OPTION + "\t" + STOP_ON_ERROR_OPTION_INSTRUCTION_TEXT + LINE_SEPARATOR; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - - - - /** - * End of source files tag - */ - private static final String ENDOFSOURCEFILES = "*ENDOFSOURCEFILES*"; //$NON-NLS-1$ - - - /** - * Offset to UID - */ - private static final int COMPONENT_UID_ARG = 0; - - /** - * Offset to component name - */ - private static final int COMPONENT_NAME_ARG = 1; - - /** - * Offset to MMP path - */ - private static final int COMPONENT_MMP_PATH_ARG = 2; // CodForChk_Dis_Magic - - /** - * Offset to source files - */ - private static final int SOURCE_FILE_START_OFFSET = 3; // CodForChk_Dis_Magic - - /** - * Number of arguments - */ - private static final int MANDATORY_ARGUMENT_COUNT = 1; - - /** - * MMP file extension - */ - private static final String MMP = ".mmp"; //$NON-NLS-1$ - - /** - * Underscore character - */ - private static final String UNDERSCORE = "_"; //$NON-NLS-1$ - - /** - * Name of the trace folder that include component name - */ - private String traceFolderName; - - /** - * Decode plugins path - */ - private String DECODE_PLUGINS_PATH = "com/nokia/tracecompiler/decodeplugins"; //$NON-NLS-1$ - - /** - * Decode plugin name tag - */ - private String DECODE_PLUGIN_NAME_TAG = ""; //$NON-NLS-1$ - - /** - * Decode plugin class name tag - */ - private String DECODE_PLUGIN_CLASS_NAME_TAG = ""; //$NON-NLS-1$ - - /** - * Decode plugin engine class name template - */ - private String ENGINE_CLASS_NAME_TEMPLATE = DECODE_PLUGIN_NAME_TAG - + "Engine"; //$NON-NLS-1$ - - /** - * Decode plugin engine file name template - */ - private String ENGINE_FILE_NAME_TEMPLATE = DECODE_PLUGIN_CLASS_NAME_TAG - + ".class"; //$NON-NLS-1$ - - /** - * Decode plugins class template - */ - private String CLASS_TEMPLATE = "com.nokia.tracecompiler.decodeplugins." + DECODE_PLUGIN_NAME_TAG + "." + DECODE_PLUGIN_CLASS_NAME_TAG; //$NON-NLS-1$ //$NON-NLS-2$ - - /** - * Main function - * - * @param args - * the command line arguments - */ - public static void main(String[] args) { - ArrayList list = new ArrayList(Arrays.asList(args)); - long startTime = System.currentTimeMillis(); - //create a new session of TraceCompiler - TraceCompiler console = new TraceCompiler(); - - try { - console.parseCommandLine(list); - } catch (Exception e) { //should cover IOException and TraceCompilerIllegalArgumentsException - //There is no point to continue if there are problems with the arguments. - TraceCompilerLogger.printError(e.getMessage()); - printUsage(); - System.exit(1); - } - - boolean error = false; - try { - if(list.size() != 0) { - console.createPlugins(); - console.start(); - console.buildTraceFiles(); - - } - } catch (Exception e) { - if (e instanceof TraceCompilerRootException) { - TraceCompilerLogger.printError(e.getMessage()); - } //else the error should have been reported earlier - error = true; - } finally { - try { - if (!error) { //check if errors have been logged by EventEngine - TraceCompilerEngineEvents events = TraceCompilerEngineGlobals.getEvents(); - if (events != null && events.hasErrorHappened()) { - error = true; - } - } - console.shutdown(); - } catch (TraceCompilerException e) { - error = true; - } - } - - if (console.componentName != null) { - TraceCompilerLogger.printMessage(console.componentName + " took " //$NON-NLS-1$ - + (System.currentTimeMillis() - startTime) + " ms"); //$NON-NLS-1$ - } - if (error) { - System.exit(1); - } else { - System.exit(0); - } - } - - /** - * With Eclipse, the plug-ins are loaded by Eclipse framework. Here they - * must be manually created and started - */ - private ArrayList plugIns = new ArrayList(); - - /** - * Model listener - */ - private TraceCompilerModelListener modelListener; - - /** - * Name of the component - */ - private String componentName; - - /** - * UID of the component - */ - private long componentUID; - - /** - * Component path - */ - private String componentPath; - - /** - * MMP file path - */ - private File mmpPath; - - /** - * Constructor - */ - TraceCompiler() { - - // Creates listeners and preferences - modelListener = new TraceCompilerModelListener(); - } - - /** - * Creates the plug-ins to be registered with TraceCompiler - * @throws TraceCompilerRootException if fail to create a valid plugins - */ - private void createPlugins() throws TraceCompilerRootException { - - // Get location of the TraceCompiler - URL path = getClass().getProtectionDomain().getCodeSource() - .getLocation(); - String decodePluginsPath = path.getPath(); - - // If first character is forward slash and it is located before drive - // letter remove it - if (decodePluginsPath.charAt(INDEX_OF_FIRST_CHARACTER) == SourceConstants.FORWARD_SLASH_CHAR - && decodePluginsPath.charAt(INDEX_OF_THIRD_CHARACTER) == SourceConstants.COLON_CHAR) { - decodePluginsPath = decodePluginsPath.substring(1); - } - - // Concatenate decode plugins path - decodePluginsPath = decodePluginsPath.concat(DECODE_PLUGINS_PATH); - - // Replace slashes with correct separator character - decodePluginsPath = decodePluginsPath.replace( - SourceConstants.FORWARD_SLASH_CHAR, File.separatorChar); - decodePluginsPath = decodePluginsPath.replace( - SourceConstants.BACKSLASH_CHAR, File.separatorChar); - File decodePluginsDir = new File(decodePluginsPath); - String[] decodePlugins = decodePluginsDir.list(); - if (decodePlugins != null) { - for (int i = 0; i < decodePlugins.length; i++) { - - // Get decode plugin name - String decodePluginName = decodePlugins[i]; - - // Get decode plugin path - String decodePluginPath = decodePluginsPath - + File.separatorChar + decodePluginName; - - // Decode plugin must be in own directory - Boolean isDirectory = (new File(decodePluginPath)) - .isDirectory(); - if (isDirectory) { - - // Construct decode plugin engine class name - String engineClassName = ENGINE_CLASS_NAME_TEMPLATE - .replaceFirst(DECODE_PLUGIN_NAME_TAG, - decodePluginName.substring(0, 1) - .toUpperCase() - + decodePluginName.substring(1)); - - // Construct decode plugin engine file name - String engineFileName = ENGINE_FILE_NAME_TEMPLATE - .replaceFirst(DECODE_PLUGIN_CLASS_NAME_TAG, - engineClassName); - String engineFileFullName = decodePluginPath - + File.separatorChar + engineFileName; - - // Check does engine file exist - Boolean exists = (new File(engineFileFullName)).exists(); - if (exists) { - String engineClassFullName = CLASS_TEMPLATE - .replaceFirst(DECODE_PLUGIN_NAME_TAG, - decodePluginName).replaceFirst( - DECODE_PLUGIN_CLASS_NAME_TAG, - engineClassName); - try { - Class engineClass = Class - .forName(engineClassFullName); - TraceCompilerPlugin engine = (TraceCompilerPlugin) engineClass - .newInstance(); - plugIns.add(engine); - TraceCompilerLogger.printInfo("Decode plugin " + engineClassFullName + " added"); //$NON-NLS-1$ //$NON-NLS-2$ - } catch (Exception e) { - String msg = "Decode plugin " + engineClassFullName + " adding failed"; //$NON-NLS-1$ //$NON-NLS-2$ - throw new TraceCompilerRootException(msg, e); - } - } else { - String msg = "Decode plugin file " + engineFileFullName + " does not exist"; //$NON-NLS-1$ //$NON-NLS-2$ - throw new TraceCompilerRootException(msg, null); - } - } - } - } - } - - /** - * Parses the command line - * - * @param args - * the arguments - * @throws TraceCompilerRootException if arguments are invalid - * @throws IOException - */ - private void parseCommandLine(ArrayList list) throws TraceCompilerIllegalArgumentsException, IOException { - TraceCompilerLogger.printInfo("Building traces..."); //$NON-NLS-1$ - if (list.size() == 0) { - printUsage(); - System.exit(0); - } - List switches = new ArrayList(); - - // version, verbose, keepgoing if available could be anywhere, so process them and remove them from the list - for (String element : list) { - if (element.equalsIgnoreCase(HELP_OPTION) || element.equalsIgnoreCase(HELP_OPTION_SF)) { - printUsage(); - System.exit(0); - } - if (element.equalsIgnoreCase(VERBOSE_OPTION) || element.equalsIgnoreCase(VERBOSE_OPTION_SF)) { - TraceCompilerGlobals.setVerbose(true); - switches.add(element); - } - if (element.equalsIgnoreCase(LEGACY_VERSION_OPTION) || element.equalsIgnoreCase(VERSION_OPTION) || element.equalsIgnoreCase(VERSION_OPTION_SF)) { - TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion()); - System.exit(0); - } - if (element.equalsIgnoreCase(STOP_ON_ERROR_OPTION) || element.equalsIgnoreCase(STOP_ON_ERROR_OPTION_SF)) { - TraceCompilerGlobals.setKeepGoing(false); - switches.add(element); - } - } - - //remove switches from the list - for (String string : switches) { - list.remove(string); - } - - switches = null; - - if (list.size() < MANDATORY_ARGUMENT_COUNT) { - throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidTraceCompilerArgumetsExceptionText"), null); //$NON-NLS-1$ - } - - - //the rest of elements must be in the order COMPONENT_UID, COMPONENT_NAME, COMPONENT_MMP_PATH, source... - //COMPONENT_UID must be on the command line, the rest can either be on the command line or stdin - - try { - componentUID = Long.parseLong(list.get(COMPONENT_UID_ARG), - TraceCompilerConstants.HEX_RADIX); - TraceCompilerLogger.printInfo("Component UID: 0x" + Long.toHexString(componentUID)); //$NON-NLS-1$ - - } catch (NumberFormatException e) { - String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$ - throw new TraceCompilerIllegalArgumentsException(msg, null); - } - if (componentUID > 0) { - - // Arguments are given as a parameter - if (list.size() > MANDATORY_ARGUMENT_COUNT + 1) { - parseParameters(list); - - // Otherwise, read arguments from STDIN - } else { - readFromStdin(); - } - } else { - String msg = Messages.getString("TraceCompiler.componentUidIsNotValidExceptionText") + componentUID; //$NON-NLS-1$ - throw new TraceCompilerIllegalArgumentsException(msg, null); - } - } - - - private static void printUsage() { - TraceCompilerLogger.printMessage(VERSION_TEXT + TraceCompilerVersion.getVersion()); - TraceCompilerLogger.printMessage(USAGE); - } - - /** - * Parses parameters - * - * @param args - * the parameters - * @throws TraceCompilerRootException if arguments are not valid - */ - private void parseParameters(List args) throws TraceCompilerIllegalArgumentsException { - //index is safe, already checked by the caller - componentName = args.get(COMPONENT_NAME_ARG); - traceFolderName = TraceCompilerConstants.TRACES_DIRECTORY + UNDERSCORE - + componentName; - - mmpPath = new File(args.get(COMPONENT_MMP_PATH_ARG)); - - if (isMmpValid()) { - - // Move the files from args array to source file list - ArrayList sources = new ArrayList(); - for (int i = 0; i < args.size() - SOURCE_FILE_START_OFFSET; i++) { - sources.add(args.get(SOURCE_FILE_START_OFFSET + i)); - } - - registerFiles(sources); - } else { - throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath, null); //$NON-NLS-1$ - } - - } - - /** - * Read information from STDIN - * @throws IOException if fails to read the input - * @throws TraceCompilerRootException if the list of files is empty - */ - private void readFromStdin() throws IOException, TraceCompilerIllegalArgumentsException { - ArrayList files = new ArrayList(); - - // Create reader - BufferedReader stdin = new BufferedReader( - new InputStreamReader(System.in)); - - int numberOfReceivedLines = 1; - - String line = stdin.readLine(); - - while (line != null) { - - // End of source files received - if (line.equals(ENDOFSOURCEFILES)) { - break; - } - - // Component name - if (numberOfReceivedLines == COMPONENT_NAME_ARG) { - componentName = line; - traceFolderName = TraceCompilerConstants.TRACES_DIRECTORY - + UNDERSCORE + componentName; - - // MMP path - } else if (numberOfReceivedLines == COMPONENT_MMP_PATH_ARG) { - mmpPath = new File(line); - if (!isMmpValid()) { - stdin.close(); - throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.invalidMmpExceptionText") + mmpPath, null); //$NON-NLS-1$ - } - - // Source files - } else { - // Add to the files list - File file = new File(line); - files.add(file.getAbsolutePath()); - } - - numberOfReceivedLines++; - - // Read new line from STDIN - line = stdin.readLine(); - } - stdin.close(); - registerFiles(files); - } - - /** - * Registers files to document monitor. - * - * @param sources - * sources - * @throws TraceCompilerRootException - */ - private void registerFiles(ArrayList sources) throws TraceCompilerIllegalArgumentsException { - - if (sources.size() == 0) { - throw new TraceCompilerIllegalArgumentsException(Messages.getString("TraceCompiler.noSourceFilesExceptionText"), null); //$NON-NLS-1$ - } - File parent = mmpPath.getParentFile(); - boolean found = false; - - componentPath = parent.getAbsolutePath(); - - ProjectEngine.traceFolderName = TraceCompilerConstants.TRACES_DIRECTORY; - - // Find location of "traces" or "traces_" -folder. If - // "traces" or "traces_" -folder does not - // exist, "traces" -folder will be add to same level than "group" or - // "mmpfiles" -folder. If "group" or "mmpfiles" -folder does not exist - // then "traces" -folder will be added to same level than source file. - while (!found && parent != null) { - File[] children = parent.listFiles(); - if (children != null) { - for (int i = 0; i < children.length; i++) { - File child = children[i]; - String childName = child.getName(); - if (child.isDirectory() && isProjectRoot(childName)) { - componentPath = parent.getAbsolutePath(); - found = true; - - // Check that does subdirectory that name is - // "traces_" exist in this directory. If - // it exist use that as traces directory name. - for (i = 0; i < children.length; i++) { - child = children[i]; - childName = child.getName(); - if (child.isDirectory() - && childName - .equalsIgnoreCase(traceFolderName)) { - ProjectEngine.traceFolderName = traceFolderName; - break; - } - } - break; - } - } - } - - if (found == false) { - parent = parent.getParentFile(); - } - } - - registerSourceFiles(sources); - } - - /** - * Checks if this folder is the project root - * - * @param name - * name of the folder - * @return true if this folder is the project root - */ - private boolean isProjectRoot(String name) { - boolean retval = false; - if (name.equalsIgnoreCase(traceFolderName) - || name.equalsIgnoreCase(SymbianConstants.GROUP_DIRECTORY) - || name.equalsIgnoreCase(SymbianConstants.MMPFILES_DIRECTORY) - || name - .equalsIgnoreCase(TraceCompilerConstants.TRACES_DIRECTORY)) { - retval = true; - } - return retval; - } - - /** - * Registers source files - * - * @param files - */ - private void registerSourceFiles(ArrayList files) { - if (files.size() > 0) { - String[] fileArr = new String[files.size()]; - files.toArray(fileArr); - - // Sets the source files to the TraceCompiler document - // factory. It will create a document from each source in the array - FileDocumentMonitor.setFiles(fileArr); - DocumentFactory.registerDocumentFramework( - new FileDocumentMonitor(), StringDocumentFactory.class); - } - } - - /** - * Initializes TraceCompiler - * @throws TraceCompilerRootException if fail to initialize the plugins - * @throws TraceCompilerException - */ - private void start() throws TraceCompilerRootException, TraceCompilerException { - - // Starts TraceCompiler. This is normally called from the Eclipse - // plug-in - // activator, but in console case that does not exist - TraceCompilerEngineGlobals.start(); - - - //Reads the GroupId values from opensystemtrace_types.h - //If this fails a message is logged and trace compiler stops - GroupNames.initialiseGroupName(); - - - // Registers a view to TraceCompiler - TraceCompilerEngineGlobals - .setView(new TraceCompilerView(componentPath)); - - // Registers all plug-in components - for (TraceCompilerPlugin plugin : plugIns) { - TraceCompilerEngineGlobals.registerPlugin(plugin); - } - // Adds a model event listener - TraceCompilerEngineGlobals.getTraceModel().addModelListener( - modelListener); - TraceCompilerEngineGlobals.getTraceModel().addExtensionListener( - modelListener); - TraceCompilerEngineGlobals.getTraceModel().getExtension( - TraceLocationList.class).addLocationListListener(modelListener); - TraceCompilerEngineGlobals.getTraceModel().addProcessingListener(modelListener); - } - - /** - * Parses the sources and generates trace files - * @throws Exception - */ - private void buildTraceFiles() throws Exception { - TraceCompilerEngineInterface tbi = TraceCompilerEngineGlobals - .getTraceCompiler(); - try { - // Opens a trace project - componentName = TraceUtils.convertName(componentName); - - // Set project path before opening project - TraceCompilerEngineGlobals.setProjectPath(componentPath); - tbi.openProject(componentName); - TraceModel model = TraceCompilerEngineGlobals.getTraceModel(); - if (model.isValid()) { - model.setID((int) componentUID); - - // Location errors are printed after a file changes, but the - // last file is not detected by the listener - if (modelListener.getErrors().size() > 0) { - modelListener.printLocationErrors(); - tbi.closeProject(); - throw new TraceCompilerRootException(null, null); - } - tbi.exportProject(); - tbi.closeProject(); - } else { - String msg = "Project creation was cancelled"; //$NON-NLS-1$ - throw new TraceCompilerRootException(msg, null); - } - } catch (TraceCompilerException e) { - TraceCompilerEngineGlobals.getEvents().postError(e); - throw new TraceCompilerRootException("Build trace files failed.", e); //$NON-NLS-1$ - } - } - - /** - * Shuts down TraceCompiler - * @throws TraceCompilerException - */ - private void shutdown() throws TraceCompilerException { - for (TraceCompilerPlugin plugin : plugIns) { - TraceCompilerEngineGlobals.unregisterPlugin(plugin); - } - TraceCompilerEngineGlobals.shutdown(); - } - - /** - * Checks if the MMP file is valid - * - * @return true if MMP file is valid - */ - private boolean isMmpValid() { - boolean valid = false; - String pathStr = mmpPath.getAbsolutePath(); - - if (mmpPath.exists() && pathStr.length() > MMP.length()) { - String end = pathStr.substring(pathStr.length() - MMP.length()); - if (end.equalsIgnoreCase(MMP)) { - valid = true; - } else { - TraceCompilerLogger.printError("Invalid MMP file: " + mmpPath.getAbsolutePath()); //$NON-NLS-1$ - } - } else { - TraceCompilerLogger.printError("Missing or can not access MMP path: " + mmpPath.getAbsolutePath()); //$NON-NLS-1$ - } - return valid; - - } - -}