/*
 * Copyright (C) 2016 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.
 */


subprojects {

  repositories {
      jcenter()
  }
  apply plugin: 'java'
}

 buildscript {

apply from: "$rootDir/gradle-script/libversions.gradle"

  repositories {
    jcenter()
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }

  dependencies {
    classpath libs.shadow_plugin
    classpath libs.gradle_processors_plugin
    classpath libs.jarjar_plugin
  }
}

project.ext {
  uuid = java.util.UUID.randomUUID()
  emitterId = System.getProperty("user.name") + "@" + java.net.InetAddress.getLocalHost().getCanonicalHostName()
}

task stopShip() {
  doLast {
    int nbStopShips = 0
    new File("${rootDir}").eachDirRecurse { File dir ->
      dir.eachFileMatch(~/.+.java/) { File f ->
        f.eachLine { String l ->
          if(l.matches(~/.*STOPSHIP.*/)) {
            nbStopShips++
          }
        }
      }
    }
    println "STOPSHIP: " + nbStopShips
  }
}
