////////////////////////////////////////////////////////////////////////
//
//  plugin configuration must precede everything else
//

plugins {
	id 'com.diffplug.gradle.p2.asmaven' version '3.10.0'
	id 'com.github.hauner.jarTest' version '1.0.1' apply false
	id 'de.undercouch.download' apply false
	id 'nebula.lint' version '8.3.1'
}


////////////////////////////////////////////////////////////////////////
//
//  required Eclipse components
//

p2AsMaven {
	group 'eclipse-deps', {
		repoEclipse '4.7.2'
		slicingOption 'latestVersionOnly', 'true'
		iu 'org.eclipse.core.commands'
		iu 'org.eclipse.core.contenttype'
		iu 'org.eclipse.core.jobs'
		iu 'org.eclipse.core.resources'
		iu 'org.eclipse.core.runtime'
		iu 'org.eclipse.equinox.app'
		iu 'org.eclipse.equinox.common'
		iu 'org.eclipse.equinox.preferences'
		iu 'org.eclipse.jdt.core'
		iu 'org.eclipse.jface'
		iu 'org.eclipse.osgi'
		iu 'org.eclipse.pde.core'
		iu 'org.eclipse.swt'
		iu 'org.eclipse.ui.ide'
		iu 'org.eclipse.ui.workbench'
	}
	group 'wst-deps', {
		repo 'http://download.eclipse.org/releases/oxygen'
		slicingOption 'latestVersionOnly', 'true'
		iu 'org.eclipse.wst.jsdt.core'
		iu 'org.eclipse.wst.jsdt.ui'
	}
}


////////////////////////////////////////////////////////////////////////
//
//  common Java setup shared by multiple projects
//

version '1.4.4-SNAPSHOT'

subprojects { subproject ->
	// skip generic Java setup for the few projects that have no Java code whatsoever
	switch (subproject.name) {
		case 'com.ibm.wala-repository':
		case 'com.ibm.wala.cast.js.test.data':
		case ~/.*_feature/:
			return
	}

	apply plugin: 'java'

	sourceCompatibility = 1.8

	repositories {
		mavenCentral()
		maven {
			url 'https://artifacts.alfresco.com/nexus/content/repositories/public/'
		}
		maven {
			url 'https://repo.eclipse.org/content/groups/releases/'
		}
		maven {
			url "$rootProject.buildDir/p2asmaven/maven"
		}
	}

	task eclipseProcessTestResources {
		dependsOn processTestResources
	}
}


////////////////////////////////////////////////////////////////////////
//
//  find platform-specific SWT implementations
//

def osgi_platform

switch (System.getProperty('os.name')) {
	case ~/Mac OS X/:
		osgi_platform = 'cocoa.macosx.x86_64'
		break
	case ~/Windows.*/:
		osgi_platform = 'win32.win32.x86_64'
		break
	case ~/Linux/:
		osgi_platform = 'gtk.linux.x86_64'
		break
}

System.setProperty('osgi.platform', osgi_platform)

subprojects {
	configurations.all {
		resolutionStrategy {
			// failOnVersionConflict()
			dependencySubstitution {
				substitute module('eclipse-deps:org.eclipse.swt.${osgi.platform}') with module("eclipse-deps:org.eclipse.swt.${System.getProperty('osgi.platform')}:3.+")
			}
		}
	}
}


////////////////////////////////////////////////////////////////////////
//
//  optional lint checking of Gradle scripts
//

allprojects {
	apply plugin: 'nebula.lint'
	gradleLint.alwaysRun = false
	gradleLint {
		rules = ['all-dependency']
		excludedRules = [
			'duplicate-dependency-class',
			'transitive-duplicate-dependency-class',
			'unused-dependency',
			]
	}
}


////////////////////////////////////////////////////////////////////////
//
//  disable Javadoc linter until documentation is in better shape
//

allprojects {
	tasks.withType(Javadoc) {
		options.addStringOption('Xdoclint:none', '-quiet')
	}
}
