Package com.adobe.ac.pmd.metrics.engine

Source Code of com.adobe.ac.pmd.metrics.engine.FlexMetrics

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.adobe.ac.pmd.metrics.engine;

import java.io.File;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;

import net.sourceforge.pmd.PMDException;

import com.adobe.ac.ncss.filters.FlexFilter;
import com.adobe.ac.ncss.utils.FileUtils;
import com.adobe.ac.pmd.files.FileSetUtils;
import com.adobe.ac.pmd.files.IFlexFile;
import com.adobe.ac.pmd.metrics.AverageClassMetrics;
import com.adobe.ac.pmd.metrics.AverageFunctionMetrics;
import com.adobe.ac.pmd.metrics.ClassMetrics;
import com.adobe.ac.pmd.metrics.InternalFunctionMetrics;
import com.adobe.ac.pmd.metrics.MetricUtils;
import com.adobe.ac.pmd.metrics.PackageMetrics;
import com.adobe.ac.pmd.metrics.ProjectMetrics;
import com.adobe.ac.pmd.metrics.TotalPackageMetrics;
import com.adobe.ac.pmd.nodes.IClass;
import com.adobe.ac.pmd.nodes.IPackage;

public final class FlexMetrics extends AbstractMetrics
{
   private static final FlexFilter       FLEX_FILTER = new FlexFilter();
   private static final Logger           LOGGER      = Logger.getLogger( FlexMetrics.class.getName() );

   private final Map< String, IPackage > asts;
   private final double                  mxmlFactor;

   public FlexMetrics( final File sourceDirectoryPath,
                       final double mxmlFactorToBeSet )
   {
      super( sourceDirectoryPath );

      asts = initAst();
      mxmlFactor = mxmlFactorToBeSet;
   }

   @Override
   public ProjectMetrics loadMetrics()
   {
      final ProjectMetrics metrics = new ProjectMetrics();

      for ( final File directory : getNonEmptyDirectories() )
      {
         final Collection< File > classesInPackage = FileUtils.listFiles( directory,
                                                                          FLEX_FILTER,
                                                                          false );

         if ( directory.isDirectory()
               && !classesInPackage.isEmpty() )
         {
            final String packageFullName = MetricUtils.getQualifiedName( getSourceDirectory(),
                                                                         directory );
            int functionsInPackage = 0;
            int ncssInPackage = 0;
            int asDocsInPackage = 0;
            int multipleLineCommentInPackage = 0;
            final int importsInPackage = 0;

            for ( final File fileInPackage : classesInPackage )
            {
               IClass classNode = null;
               InternalFunctionMetrics functionMetrics = null;
               final IFlexFile file = com.adobe.ac.pmd.files.impl.FileUtils.create( fileInPackage,
                                                                                    getSourceDirectory() );
               if ( asts.containsKey( file.getFullyQualifiedName() )
                     && asts.get( file.getFullyQualifiedName() ).getClassNode() != null )
               {
                  classNode = asts.get( file.getFullyQualifiedName() ).getClassNode();
                  functionsInPackage += classNode.getFunctions().size();
                  functionMetrics = InternalFunctionMetrics.create( metrics,
                                                                    packageFullName,
                                                                    classNode );
                  asDocsInPackage += functionMetrics.getAsDocsInClass();
                  multipleLineCommentInPackage += functionMetrics.getMultipleLineCommentInClass();
                  ncssInPackage += functionMetrics.getNcssInClass();
               }
               final ClassMetrics classMetrics = ClassMetrics.create( packageFullName,
                                                                      fileInPackage,
                                                                      functionMetrics,
                                                                      classNode,
                                                                      file,
                                                                      mxmlFactor );
               asDocsInPackage += classMetrics.getAsDocs();
               multipleLineCommentInPackage += classMetrics.getMultiLineComments();
               metrics.getClassMetrics().add( classMetrics );
            }
            metrics.getPackageMetrics().add( PackageMetrics.create( classesInPackage,
                                                                    packageFullName,
                                                                    functionsInPackage,
                                                                    ncssInPackage,
                                                                    asDocsInPackage,
                                                                    multipleLineCommentInPackage,
                                                                    importsInPackage ) );
         }
      }
      setFinalMetrics( metrics );

      return metrics;
   }

   private Map< String, IPackage > initAst()
   {
      Map< String, IPackage > result = new LinkedHashMap< String, IPackage >();
      try
      {
         result = FileSetUtils.computeAsts( com.adobe.ac.pmd.files.impl.FileUtils.computeFilesList( getSourceDirectory(),
                                                                                                    null,
                                                                                                    "",
                                                                                                    null ) );
      }
      catch ( final PMDException e )
      {
         LOGGER.warning( e.getMessage() );
      }
      return result;
   }

   private void setFinalMetrics( final ProjectMetrics metrics )
   {
      metrics.setTotalPackages( TotalPackageMetrics.create( metrics.getPackageMetrics() ) );
      metrics.setAverageFunctions( AverageFunctionMetrics.create( metrics.getFunctionMetrics(),
                                                                  metrics.getTotalPackages() ) );
      metrics.setAverageObjects( AverageClassMetrics.create( metrics.getClassMetrics(),
                                                             metrics.getTotalPackages() ) );
   }
}
TOP

Related Classes of com.adobe.ac.pmd.metrics.engine.FlexMetrics

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.