buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/taskdefs/AntConfigLintTask.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.ant.data.taskdefs;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.io.IOException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.ArrayList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.util.HashMap;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import java.util.List;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.util.Map;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import org.apache.tools.ant.BuildException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import org.apache.tools.ant.DynamicElement;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import org.apache.tools.ant.Project;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
import org.apache.tools.ant.Task;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
import com.nokia.helium.ant.data.Database;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import com.nokia.helium.ant.data.types.AntLintCheck;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
import com.nokia.helium.ant.data.types.LintIssue;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
 * Another version of AntLint that fits with the antdata API more closely.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
@SuppressWarnings("serial")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
public class AntConfigLintTask extends Task implements DynamicElement {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
    // Temporary solution, should change to scanning jar
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
    public static final Map<String, String> CHECKS = new HashMap<String, String>() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
            put("wrongtypepropertycheck", "WrongTypePropertyCheck");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
            // put("protected", new Integer(2));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
            // put("private", new Integer(3));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    };
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    private List<AntLintCheck> checks = new ArrayList<AntLintCheck>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    private List<LintIssue> issues = new ArrayList<LintIssue>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    private Database db;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
    private int errorsTotal;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    public AntConfigLintTask() throws IOException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
        setTaskName("antconfiglint");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    public Object createDynamicElement(String name) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        AntLintCheck check = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
        String className = "com.nokia.helium.ant.data.types." + CHECKS.get(name);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
        log("Creating check: " + className, Project.MSG_DEBUG);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
            Class<AntLintCheck> clazz = (Class<AntLintCheck>) Class.forName(className);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
            if (clazz != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
                check = (AntLintCheck) clazz.newInstance();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
                checks.add(check);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
        catch (ClassNotFoundException th) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
            th.printStackTrace();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
            throw new BuildException("Error in Antlint configuration: " + th.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        } catch (InstantiationException th) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
            th.printStackTrace();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
            throw new BuildException("Error in Antlint configuration: " + th.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        } catch (IllegalAccessException th) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
            th.printStackTrace();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
            throw new BuildException("Error in Antlint configuration: " + th.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
        return check;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
    public void execute() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
        errorsTotal = 0;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
            db = new Database(getProject());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
            if (checks.size() == 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
                throw new BuildException("No checks defined.");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
            for (AntLintCheck check : checks) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
                check.setTask(this);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
                log("Running check: " + check, Project.MSG_DEBUG);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
                check.run();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
            for (LintIssue issue : issues) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
                log(issue.toString());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
            if (errorsTotal > 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
                throw new BuildException("AntLint errors found: " + errorsTotal);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        catch (IOException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
            throw new BuildException(e.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    public void addLintIssue(LintIssue issue) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        issues.add(issue);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
        if (issue.getSeverity() == AntLintCheck.SEVERITY_ERROR) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            errorsTotal++;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
    public Database getDatabase() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
        return db;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
}