├── gradle.properties ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── src ├── macosMain │ └── kotlin │ │ └── sample │ │ └── SampleMacos.kt ├── commonMain │ └── kotlin │ │ └── chapi │ │ └── domain │ │ ├── core │ │ ├── CodeProject.kt │ │ ├── CodePackageInfo.kt │ │ ├── CodeField.kt │ │ ├── CodeModule.kt │ │ ├── CodePosition.kt │ │ ├── CodeImport.kt │ │ ├── CodeDependency.kt │ │ ├── CodePackage.kt │ │ ├── CodeProperty.kt │ │ ├── CodeContainer.kt │ │ ├── CodeAnnotation.kt │ │ ├── CodeMember.kt │ │ ├── CodeCall.kt │ │ ├── CodeDataStruct.kt │ │ └── CodeFunction.kt │ │ └── DomainConstants.kt └── macosTest │ └── kotlin │ └── sample │ └── SampleTestsNative.kt ├── versions.gradle ├── package.json ├── .gitignore ├── README.md ├── gradlew.bat ├── gradlew └── LICENSE /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'chapi-domain' 2 | 3 | 4 | enableFeaturePreview('GRADLE_METADATA') 5 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/chapi.domain/master/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/macosMain/kotlin/sample/SampleMacos.kt: -------------------------------------------------------------------------------- 1 | package sample 2 | 3 | actual class Sample { 4 | actual fun checkMe() = 7 5 | } 6 | 7 | actual object Platform { 8 | actual val name: String = "Native" 9 | } -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeProject.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodeProject( 7 | var Modules: Array = arrayOf() 8 | ) { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/macosTest/kotlin/sample/SampleTestsNative.kt: -------------------------------------------------------------------------------- 1 | package sample 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertTrue 5 | 6 | class SampleTestsNative { 7 | @Test 8 | fun testHello() { 9 | assertTrue("Native" in hello()) 10 | } 11 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Feb 20 22:50:49 CST 2020 2 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip 3 | distributionBase=GRADLE_USER_HOME 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /versions.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | kotlin_version = '1.3.61' 3 | node_plugin_version = '2.2.1' // https://github.com/node-gradle/gradle-node-plugin/releases 4 | kotlinx_serialization_version = '0.14.0' // https://github.com/Kotlin/kotlinx.serialization/releases 5 | kotlinext_version = '1.0.1-pre.91' 6 | } 7 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodePackageInfo.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodePackageInfo( 7 | var ProjectName: String = "", 8 | var Dependencies: Array = arrayOf() 9 | ) { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeField.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodeField( 7 | var TypeType: String = "", 8 | var TypeValue: String = "", 9 | var Modifiers: Array = arrayOf() 10 | ) { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeModule.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodeModule ( 7 | var Packages : Array = arrayOf(), 8 | var packageInfo : CodePackageInfo = CodePackageInfo() 9 | ) { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodePosition.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | class CodePosition( 7 | var StartLine: Int = 0, 8 | var StartLinePosition: Int = 0, 9 | var StopLine: Int = 0, 10 | var StopLinePosition: Int = 0 11 | ) { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeImport.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodeImport( 7 | var Source: String = "", 8 | var AsName: String = "", 9 | var UsageName: Array = arrayOf(), 10 | var Scope: String = "" 11 | ) { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeDependency.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | open class CodeDependency( 7 | var GroupId: String = "", 8 | var ArtifactId: String = "", 9 | var Scope: String = "", 10 | var Type: String = "", 11 | var Version: String = "", 12 | var Optional: Boolean = false 13 | ) { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/DomainConstants.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain 2 | 3 | public class DomainConstants { 4 | companion object { 5 | val ASSERTION_LIST = arrayOf( 6 | "assert", 7 | "should", 8 | "check", // ArchUnit, 9 | "maynotbe", // ArchUnit, 10 | "is", // RestAssured, 11 | "spec", // RestAssured, 12 | "verify" // Mockito, 13 | ) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "license": "MPL-2.0", 3 | "name": "@chapi/domain", 4 | "version": "$LIBRARY_VERSION_NAME", 5 | "private": false, 6 | "files": [ 7 | "chapi-domain.js", 8 | "package.json", 9 | "README.md" 10 | ], 11 | "peerDependencies": { 12 | "@jetbrains/kotlin-extensions": "^$kotlinext_version", 13 | "kotlin": "^$kotlin_version" 14 | }, 15 | "main": "chapi-domain.js", 16 | "repository": "https://github.com/phodal/chapi-domain", 17 | "author": "Phodal HUANG" 18 | } 19 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodePackage.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlinx.serialization.json.JsonElement 5 | import kotlinx.serialization.json.JsonObject 6 | 7 | @Serializable 8 | class CodePackage( 9 | var Name: String = "", 10 | var ID: String = "", 11 | var codeContainers: Array = arrayOf(), 12 | var Packages : Array = arrayOf(), 13 | 14 | var Extension: JsonElement = JsonObject(HashMap()) 15 | ) { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | 21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 22 | hs_err_pid* 23 | 24 | .idea 25 | build 26 | .gradle 27 | *.iml 28 | !gradle-wrapper.jar 29 | **/gen 30 | **/out 31 | venv/ 32 | keystore.gradle 33 | local.properties 34 | chapi.json 35 | *.ipr 36 | *.iws 37 | gradle.properties 38 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeProperty.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlinx.serialization.json.Json 5 | import kotlinx.serialization.json.JsonConfiguration 6 | 7 | @Serializable 8 | class CodeProperty( 9 | var Modifiers: Array = arrayOf(), 10 | var DefaultValue: String = "", 11 | var TypeValue: String, 12 | var TypeType: String, 13 | var ReturnTypes: Array = arrayOf(), 14 | var Parameters: Array = arrayOf() 15 | ) { 16 | override fun toString(): String { 17 | return Json(JsonConfiguration.Stable).stringify(serializer(), this) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeContainer.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlinx.serialization.json.Json 5 | import kotlinx.serialization.json.JsonConfiguration 6 | 7 | @Serializable 8 | open class CodeContainer( 9 | var FullName: String = "", 10 | var PackageName: String = "", 11 | var Imports: Array = arrayOf(), 12 | var Members: Array = arrayOf(), 13 | var DataStructures: Array = arrayOf(), 14 | var Fields: Array = arrayOf(), 15 | var Containers: Array = arrayOf() 16 | ) { 17 | override fun toString(): String { 18 | return Json(JsonConfiguration.Stable).stringify(serializer(), this) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeAnnotation.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class AnnotationKeyValue(var Key: String = "", var Value: String = "") {} 7 | 8 | @Serializable 9 | open class CodeAnnotation( 10 | var Name: String = "", 11 | var KeyValues: Array = arrayOf() 12 | ) { 13 | open fun isComponentOrRepository(): Boolean { 14 | return this.Name == "Component" || this.Name == "Repository" 15 | } 16 | 17 | open fun isTest(): Boolean { 18 | return this.Name == "Test" 19 | } 20 | 21 | open fun isIgnore(): Boolean { 22 | return this.Name == "Ignore" 23 | } 24 | 25 | open fun isIgnoreOrTest(): Boolean { 26 | return this.isIgnore() || this.isTest() 27 | } 28 | 29 | open fun isOverride(): Boolean { 30 | return this.Name == "Override" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeMember.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | class CodeMember( 7 | var ID: String = "", 8 | var FileID: String = "", 9 | var DataStructID: String = "", 10 | var AliasPackage: String = "", 11 | var Name: String = "", 12 | var Type: String = "", 13 | var StructureNodes: Array = arrayOf(), 14 | var FunctionNodes: Array = arrayOf(), 15 | var Namespace: Array = arrayOf(), 16 | var Position: CodePosition = CodePosition() 17 | ) { 18 | fun buildMemberId() { 19 | val isDefaultFunction = this.DataStructID == "default" 20 | if (isDefaultFunction) { 21 | for (node in this.FunctionNodes) { 22 | this.ID = this.AliasPackage + ":" + node.Name 23 | } 24 | } else { 25 | var packageName = this.FileID 26 | if (this.FileID != this.AliasPackage) { 27 | packageName = this.FileID + "|" + this.AliasPackage 28 | } 29 | if (this.FileID == "" && this.AliasPackage != "") { 30 | packageName = this.AliasPackage 31 | } 32 | this.ID = packageName + "::" + this.DataStructID 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Chapi Domain MultiplePlatform 2 | 3 | ![npm](https://img.shields.io/npm/v/@chapi/domain?label=%40chapi%2Fdomain) 4 | [![Download](https://api.bintray.com/packages/phodal/chapi/chapi-domain/images/download.svg)](https://bintray.com/phodal/chapi/chapi-domain/_latestVersion) 5 | 6 | ## Usage 7 | 8 | ### Setup Java 9 | 10 | 1. add deps 11 | 12 | ```groovy 13 | repositories { 14 | ... 15 | maven {url "https://dl.bintray.com/phodal/chapi"} 16 | } 17 | ``` 18 | 19 | and 20 | 21 | ```groovy 22 | dependencies { 23 | implementation 'com.phodal.chapi:chapi-domain:0.1.1' 24 | } 25 | ``` 26 | 27 | 2. Usage in Code 28 | 29 | ```kotlin 30 | package teapi.application 31 | 32 | import chapi.domain.core.CodeDataStruct 33 | 34 | fun main(): String { 35 | val codeDataStruct = CodeDataStruct() 36 | ... 37 | } 38 | 39 | ``` 40 | 41 | ### Setup JavaScript 42 | 43 | 1. add deps `yarn add @chapi/domain` or `npm install --save @chapi/domain` 44 | 45 | 2. Usage In Code 46 | 47 | ```javascript 48 | var chapi = require("@chapi/domain").chapi.domain.core; 49 | 50 | var dataStruct = new chapi.CodeDataStruct("Hello"); 51 | console.log(dataStruct); 52 | ``` 53 | 54 | 55 | ## Setup 56 | 57 | ### publish package 58 | 59 | ```bash 60 | ./gradlew bintrayUpload 61 | ``` 62 | 63 | License 64 | --- 65 | 66 | [![Phodal's Idea](http://brand.phodal.com/shields/idea-small.svg)](http://ideas.phodal.com/) 67 | 68 | @ 2020 A [Phodal Huang](https://www.phodal.com)'s [Idea](http://github.com/phodal/ideas). This code is distributed under the MPL license. See `LICENSE` in this directory. 69 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeCall.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import chapi.domain.DomainConstants 4 | import kotlinx.serialization.Serializable 5 | import kotlinx.serialization.json.Json 6 | import kotlinx.serialization.json.JsonConfiguration 7 | 8 | @Serializable 9 | open class CodeCall( 10 | var Package: String = "", 11 | var Type: String = "", 12 | var NodeName: String = "", 13 | var FunctionName: String = "", 14 | var Parameters: Array = arrayOf(), 15 | var Position: CodePosition = CodePosition() 16 | ) { 17 | open fun buildClassFullName(): String { 18 | return this.Package + "." + this.NodeName 19 | } 20 | 21 | open fun buildFullMethodName(): String { 22 | if (FunctionName == "") { 23 | return this.Package + "." + this.NodeName 24 | } 25 | 26 | return this.Package + "." + this.NodeName + "." + this.FunctionName 27 | } 28 | 29 | open fun isSystemOutput(): Boolean { 30 | return this.NodeName == "System.out" && (this.FunctionName == "println" || this.FunctionName == "printf" || this.FunctionName == "print") 31 | } 32 | 33 | open fun isThreadSleep(): Boolean { 34 | return this.NodeName == "Thread" && this.FunctionName == "sleep" 35 | } 36 | 37 | open fun hasAssertion(): Boolean { 38 | val methodName = this.FunctionName.toLowerCase() 39 | for (assertion in DomainConstants.ASSERTION_LIST) { 40 | if (methodName.startsWith(assertion)) { 41 | return true 42 | } 43 | } 44 | 45 | return false 46 | } 47 | 48 | override fun toString(): String { 49 | return Json(JsonConfiguration.Stable).stringify(serializer(), this) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeDataStruct.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlinx.serialization.json.Json 5 | import kotlinx.serialization.json.JsonConfiguration 6 | import kotlinx.serialization.json.JsonElement 7 | import kotlinx.serialization.json.JsonObject 8 | 9 | enum class DataStructType (val structType: String) { 10 | EMPTY(""), 11 | CLASS("Class"), 12 | INTERFACE("Interface"), 13 | STRUCT("Struct"), 14 | OBJECT("Object"), 15 | INNERSTRUCTURES("InnerStructures"), 16 | CREATORCLASS("CreatorClass"), 17 | ABSTRACTCLASS("AbstractClass"), 18 | TRAIT("Trait") // for scala 19 | } 20 | 21 | @Serializable 22 | open class CodeDataStruct( 23 | var NodeName: String = "", 24 | var Type: DataStructType = DataStructType.EMPTY, 25 | var Package: String = "", 26 | var FilePath: String = "", 27 | var Fields: Array = arrayOf(), 28 | var MultipleExtend: Array = arrayOf(), 29 | var Implements: Array = arrayOf(), 30 | var Extend: String = "", 31 | var Functions: Array = arrayOf(), 32 | var InnerStructures: Array = arrayOf(), 33 | var Annotations: Array = arrayOf(), 34 | var FunctionCalls: Array = arrayOf(), 35 | 36 | @Deprecated(message = "looking for constructor method for SCALA") 37 | var Parameters: Array = arrayOf(), // for Scala 38 | 39 | var Imports: Array = arrayOf(), 40 | 41 | // todo: select node useonly imports 42 | var Extension: JsonElement = JsonObject(HashMap()) 43 | ) { 44 | open fun isUtilClass(): Boolean { 45 | return this.NodeName.toLowerCase().contains("util") || 46 | this.NodeName.toLowerCase().contains("utils") 47 | } 48 | 49 | fun setMethodsFromMap(methodMap: MutableMap) { 50 | var methodsArray: Array = arrayOf() 51 | for (entry in methodMap) { 52 | methodsArray += entry.value 53 | } 54 | 55 | this.Functions = methodsArray 56 | } 57 | 58 | fun getClassFullName(): String { 59 | return this.Package + "." + this.NodeName 60 | } 61 | 62 | override fun toString(): String { 63 | return Json(JsonConfiguration.Stable).stringify(serializer(), this) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 34 | 35 | @rem Find java.exe 36 | if defined JAVA_HOME goto findJavaFromJavaHome 37 | 38 | set JAVA_EXE=java.exe 39 | %JAVA_EXE% -version >NUL 2>&1 40 | if "%ERRORLEVEL%" == "0" goto init 41 | 42 | echo. 43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 44 | echo. 45 | echo Please set the JAVA_HOME variable in your environment to match the 46 | echo location of your Java installation. 47 | 48 | goto fail 49 | 50 | :findJavaFromJavaHome 51 | set JAVA_HOME=%JAVA_HOME:"=% 52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 53 | 54 | if exist "%JAVA_EXE%" goto init 55 | 56 | echo. 57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 58 | echo. 59 | echo Please set the JAVA_HOME variable in your environment to match the 60 | echo location of your Java installation. 61 | 62 | goto fail 63 | 64 | :init 65 | @rem Get command-line arguments, handling Windows variants 66 | 67 | if not "%OS%" == "Windows_NT" goto win9xME_args 68 | 69 | :win9xME_args 70 | @rem Slurp the command line arguments. 71 | set CMD_LINE_ARGS= 72 | set _SKIP=2 73 | 74 | :win9xME_args_slurp 75 | if "x%~1" == "x" goto execute 76 | 77 | set CMD_LINE_ARGS=%* 78 | 79 | :execute 80 | @rem Setup the command line 81 | 82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 83 | 84 | @rem Execute Gradle 85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 86 | 87 | :end 88 | @rem End local scope for the variables with windows NT shell 89 | if "%ERRORLEVEL%"=="0" goto mainEnd 90 | 91 | :fail 92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 93 | rem the _cmd.exe /c_ return code! 94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 95 | exit /b 1 96 | 97 | :mainEnd 98 | if "%OS%"=="Windows_NT" endlocal 99 | 100 | :omega 101 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/chapi/domain/core/CodeFunction.kt: -------------------------------------------------------------------------------- 1 | package chapi.domain.core 2 | 3 | import kotlinx.serialization.* 4 | import kotlinx.serialization.json.* 5 | 6 | @Serializable 7 | open class CodeFunction( 8 | var Name: String = "", 9 | var Package : String = "", 10 | var ReturnType: String = "", 11 | var MultipleReturns: Array = arrayOf(), 12 | var Parameters: Array = arrayOf(), 13 | var FunctionCalls: Array = arrayOf(), 14 | var Annotations: Array = arrayOf(), 15 | var Override: Boolean = false, 16 | var Modifiers: Array = arrayOf(), 17 | var InnerStructures: Array = arrayOf(), 18 | var InnerFunctions: Array = arrayOf(), 19 | var Position: CodePosition = CodePosition(), 20 | var Extension: JsonElement = JsonObject(HashMap()), 21 | var LocalVariables : Array = arrayOf(), 22 | var IsConstructor: Boolean = false // todo: move to extension 23 | ) { 24 | private var extensionMap = HashMap() 25 | 26 | fun isJavaLangReturnType(): Boolean { 27 | return this.ReturnType == "String" || this.ReturnType == "int" || this.ReturnType == "float" || this.ReturnType == "void" || this.ReturnType == "char" || this.ReturnType == "double" 28 | } 29 | 30 | fun isStatic(): Boolean { 31 | for (modifier in this.Modifiers) { 32 | if (modifier == "static") { 33 | return true 34 | } 35 | } 36 | 37 | return false 38 | } 39 | 40 | fun isGetterSetter(): Boolean { 41 | return this.Name.startsWith("set") || this.Name.startsWith("get") 42 | } 43 | 44 | fun buildFullMethodName(node: CodeDataStruct): String { 45 | return node.Package + "." + node.NodeName + "." + this.Name 46 | } 47 | 48 | 49 | fun getAllCallString(): Array { 50 | var calls = arrayOf() 51 | for (codeCall in this.FunctionCalls) { 52 | if (codeCall.NodeName != "") { 53 | calls += codeCall.buildClassFullName() 54 | } 55 | } 56 | 57 | return calls 58 | } 59 | 60 | fun isJUnitTest(): Boolean { 61 | var isTest = false 62 | for (annotation in this.Annotations) { 63 | if (annotation.isIgnoreOrTest()) { 64 | isTest = true 65 | } 66 | } 67 | return isTest 68 | } 69 | 70 | fun isOverride(): Boolean { 71 | for (annotation in this.Annotations) { 72 | if (annotation.isOverride()) { 73 | return true 74 | } 75 | } 76 | 77 | return false 78 | } 79 | 80 | fun addExtension(key: String, value: String) { 81 | this.extensionMap[key] = JsonPrimitive(value) 82 | this.Extension = JsonObject(this.extensionMap) 83 | } 84 | 85 | fun isReturnNull(): Boolean { 86 | return this.Extension.jsonObject["IsReturnNull"] == JsonPrimitive("true") 87 | } 88 | 89 | override fun toString(): String { 90 | return Json(JsonConfiguration.Stable).stringify(serializer(), this) 91 | } 92 | 93 | fun addVarsFromMap(localVars: MutableMap) { 94 | var vars: Array = arrayOf() 95 | for (entry in localVars) { 96 | val param = CodeProperty(TypeValue = entry.key, TypeType = entry.value) 97 | vars += param 98 | } 99 | 100 | this.LocalVariables = vars 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | # Determine the Java command to use to start the JVM. 86 | if [ -n "$JAVA_HOME" ] ; then 87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 88 | # IBM's JDK on AIX uses strange locations for the executables 89 | JAVACMD="$JAVA_HOME/jre/sh/java" 90 | else 91 | JAVACMD="$JAVA_HOME/bin/java" 92 | fi 93 | if [ ! -x "$JAVACMD" ] ; then 94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 95 | 96 | Please set the JAVA_HOME variable in your environment to match the 97 | location of your Java installation." 98 | fi 99 | else 100 | JAVACMD="java" 101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 102 | 103 | Please set the JAVA_HOME variable in your environment to match the 104 | location of your Java installation." 105 | fi 106 | 107 | # Increase the maximum file descriptors if we can. 108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 109 | MAX_FD_LIMIT=`ulimit -H -n` 110 | if [ $? -eq 0 ] ; then 111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 112 | MAX_FD="$MAX_FD_LIMIT" 113 | fi 114 | ulimit -n $MAX_FD 115 | if [ $? -ne 0 ] ; then 116 | warn "Could not set maximum file descriptor limit: $MAX_FD" 117 | fi 118 | else 119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 120 | fi 121 | fi 122 | 123 | # For Darwin, add options to specify how the application appears in the dock 124 | if $darwin; then 125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 126 | fi 127 | 128 | # For Cygwin, switch paths to Windows format before running java 129 | if $cygwin ; then 130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 132 | JAVACMD=`cygpath --unix "$JAVACMD"` 133 | 134 | # We build the pattern for arguments to be converted via cygpath 135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 136 | SEP="" 137 | for dir in $ROOTDIRSRAW ; do 138 | ROOTDIRS="$ROOTDIRS$SEP$dir" 139 | SEP="|" 140 | done 141 | OURCYGPATTERN="(^($ROOTDIRS))" 142 | # Add a user-defined pattern to the cygpath arguments 143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 145 | fi 146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 147 | i=0 148 | for arg in "$@" ; do 149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 151 | 152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 154 | else 155 | eval `echo args$i`="\"$arg\"" 156 | fi 157 | i=$((i+1)) 158 | done 159 | case $i in 160 | (0) set -- ;; 161 | (1) set -- "$args0" ;; 162 | (2) set -- "$args0" "$args1" ;; 163 | (3) set -- "$args0" "$args1" "$args2" ;; 164 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 165 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 166 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 167 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 168 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 169 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 170 | esac 171 | fi 172 | 173 | # Escape application args 174 | save () { 175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 176 | echo " " 177 | } 178 | APP_ARGS=$(save "$@") 179 | 180 | # Collect all arguments for the java command, following the shell quoting and substitution rules 181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 182 | 183 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 184 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 185 | cd "$(dirname "$0")" 186 | fi 187 | 188 | exec "$JAVACMD" "$@" 189 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | --------------------------------------------------------------------------------