├── src ├── .DS_Store ├── main │ ├── .DS_Store │ ├── resources │ │ ├── .DS_Store │ │ ├── static │ │ │ ├── .DS_Store │ │ │ ├── jacoco │ │ │ │ ├── up.gif │ │ │ │ ├── class.gif │ │ │ │ ├── down.gif │ │ │ │ ├── group.gif │ │ │ │ ├── sort.gif │ │ │ │ ├── branchfc.gif │ │ │ │ ├── branchnc.gif │ │ │ │ ├── branchpc.gif │ │ │ │ ├── bundle.gif │ │ │ │ ├── greenbar.gif │ │ │ │ ├── method.gif │ │ │ │ ├── package.gif │ │ │ │ ├── redbar.gif │ │ │ │ ├── report.gif │ │ │ │ ├── session.gif │ │ │ │ ├── source.gif │ │ │ │ ├── prettify.css │ │ │ │ └── package-info.java │ │ │ ├── images │ │ │ │ ├── .DS_Store │ │ │ │ └── icon │ │ │ │ │ ├── build.png │ │ │ │ │ ├── login.png │ │ │ │ │ ├── logo.png │ │ │ │ │ ├── reset.png │ │ │ │ │ ├── project1.png │ │ │ │ │ ├── project2.png │ │ │ │ │ ├── report.png │ │ │ │ │ ├── Untitled-1.jpg │ │ │ │ │ ├── avatar-01.jpg │ │ │ │ │ ├── avatar-02.jpg │ │ │ │ │ ├── avatar-03.jpg │ │ │ │ │ ├── avatar-04.jpg │ │ │ │ │ ├── avatar-05.jpg │ │ │ │ │ ├── avatar-06.jpg │ │ │ │ │ ├── logo-blue.png │ │ │ │ │ ├── logo-mini.png │ │ │ │ │ ├── logo-white.png │ │ │ │ │ ├── avatar-big-01.jpg │ │ │ │ │ ├── mangosteen.jpeg │ │ │ │ │ └── mangosteenlogo.jpeg │ │ │ ├── css │ │ │ │ └── images │ │ │ │ │ ├── bg-title-01.jpg │ │ │ │ │ ├── bg-title-02.jpg │ │ │ │ │ ├── ui-icons_444444_256x240.png │ │ │ │ │ ├── ui-icons_555555_256x240.png │ │ │ │ │ ├── ui-icons_777620_256x240.png │ │ │ │ │ ├── ui-icons_777777_256x240.png │ │ │ │ │ ├── ui-icons_cc0000_256x240.png │ │ │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ ├── vendor │ │ │ │ ├── slick │ │ │ │ │ ├── ajax-loader.gif │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── slick.eot │ │ │ │ │ │ ├── slick.ttf │ │ │ │ │ │ ├── slick.woff │ │ │ │ │ │ └── slick.svg │ │ │ │ │ ├── config.rb │ │ │ │ │ ├── slick.less │ │ │ │ │ └── slick.scss │ │ │ │ ├── lightbox2 │ │ │ │ │ ├── src │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── next.png │ │ │ │ │ │ │ ├── prev.png │ │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ │ └── loading.gif │ │ │ │ │ └── dist │ │ │ │ │ │ └── images │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ ├── next.png │ │ │ │ │ │ ├── prev.png │ │ │ │ │ │ └── loading.gif │ │ │ │ ├── font-awesome-4.7 │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ │ └── HELP-US-OUT.txt │ │ │ │ ├── font-awesome-5 │ │ │ │ │ └── webfonts │ │ │ │ │ │ ├── fa-brands-400.eot │ │ │ │ │ │ ├── fa-brands-400.ttf │ │ │ │ │ │ ├── fa-brands-400.woff │ │ │ │ │ │ ├── fa-regular-400.eot │ │ │ │ │ │ ├── fa-regular-400.ttf │ │ │ │ │ │ ├── fa-solid-900.eot │ │ │ │ │ │ ├── fa-solid-900.ttf │ │ │ │ │ │ ├── fa-solid-900.woff │ │ │ │ │ │ ├── fa-solid-900.woff2 │ │ │ │ │ │ ├── fa-brands-400.woff2 │ │ │ │ │ │ ├── fa-regular-400.woff │ │ │ │ │ │ └── fa-regular-400.woff2 │ │ │ │ ├── mdi-font │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── Material-Design-Iconic-Font.eot │ │ │ │ │ │ ├── Material-Design-Iconic-Font.ttf │ │ │ │ │ │ ├── Material-Design-Iconic-Font.woff │ │ │ │ │ │ └── Material-Design-Iconic-Font.woff2 │ │ │ │ ├── vector-map │ │ │ │ │ ├── jqvmap.min.css │ │ │ │ │ └── jquery.vmap.sampledata.js │ │ │ │ ├── smk-accordion │ │ │ │ │ └── accordion.css │ │ │ │ ├── counter-up │ │ │ │ │ └── jquery.counterup.min.js │ │ │ │ ├── countdown │ │ │ │ │ └── countdowntime.js │ │ │ │ └── bootstrap-progressbar │ │ │ │ │ └── bootstrap-progressbar.min.js │ │ │ ├── fonts │ │ │ │ └── poppins │ │ │ │ │ ├── poppins-v5-latin-100.eot │ │ │ │ │ ├── poppins-v5-latin-100.ttf │ │ │ │ │ ├── poppins-v5-latin-100.woff │ │ │ │ │ ├── poppins-v5-latin-200.eot │ │ │ │ │ ├── poppins-v5-latin-200.ttf │ │ │ │ │ ├── poppins-v5-latin-200.woff │ │ │ │ │ ├── poppins-v5-latin-300.eot │ │ │ │ │ ├── poppins-v5-latin-300.ttf │ │ │ │ │ ├── poppins-v5-latin-300.woff │ │ │ │ │ ├── poppins-v5-latin-500.eot │ │ │ │ │ ├── poppins-v5-latin-500.ttf │ │ │ │ │ ├── poppins-v5-latin-500.woff │ │ │ │ │ ├── poppins-v5-latin-600.eot │ │ │ │ │ ├── poppins-v5-latin-600.ttf │ │ │ │ │ ├── poppins-v5-latin-600.woff │ │ │ │ │ ├── poppins-v5-latin-700.eot │ │ │ │ │ ├── poppins-v5-latin-700.ttf │ │ │ │ │ ├── poppins-v5-latin-700.woff │ │ │ │ │ ├── poppins-v5-latin-800.eot │ │ │ │ │ ├── poppins-v5-latin-800.ttf │ │ │ │ │ ├── poppins-v5-latin-800.woff │ │ │ │ │ ├── poppins-v5-latin-900.eot │ │ │ │ │ ├── poppins-v5-latin-900.ttf │ │ │ │ │ ├── poppins-v5-latin-900.woff │ │ │ │ │ ├── poppins-v5-latin-100.woff2 │ │ │ │ │ ├── poppins-v5-latin-200.woff2 │ │ │ │ │ ├── poppins-v5-latin-300.woff2 │ │ │ │ │ ├── poppins-v5-latin-500.woff2 │ │ │ │ │ ├── poppins-v5-latin-600.woff2 │ │ │ │ │ ├── poppins-v5-latin-700.woff2 │ │ │ │ │ ├── poppins-v5-latin-800.woff2 │ │ │ │ │ ├── poppins-v5-latin-900.woff2 │ │ │ │ │ ├── poppins-v5-latin-italic.eot │ │ │ │ │ ├── poppins-v5-latin-italic.ttf │ │ │ │ │ ├── poppins-v5-latin-100italic.eot │ │ │ │ │ ├── poppins-v5-latin-100italic.ttf │ │ │ │ │ ├── poppins-v5-latin-200italic.eot │ │ │ │ │ ├── poppins-v5-latin-200italic.ttf │ │ │ │ │ ├── poppins-v5-latin-300italic.eot │ │ │ │ │ ├── poppins-v5-latin-300italic.ttf │ │ │ │ │ ├── poppins-v5-latin-500italic.eot │ │ │ │ │ ├── poppins-v5-latin-500italic.ttf │ │ │ │ │ ├── poppins-v5-latin-600italic.eot │ │ │ │ │ ├── poppins-v5-latin-600italic.ttf │ │ │ │ │ ├── poppins-v5-latin-700italic.eot │ │ │ │ │ ├── poppins-v5-latin-700italic.ttf │ │ │ │ │ ├── poppins-v5-latin-800italic.eot │ │ │ │ │ ├── poppins-v5-latin-800italic.ttf │ │ │ │ │ ├── poppins-v5-latin-900italic.eot │ │ │ │ │ ├── poppins-v5-latin-900italic.ttf │ │ │ │ │ ├── poppins-v5-latin-italic.woff │ │ │ │ │ ├── poppins-v5-latin-italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-regular.eot │ │ │ │ │ ├── poppins-v5-latin-regular.ttf │ │ │ │ │ ├── poppins-v5-latin-regular.woff │ │ │ │ │ ├── poppins-v5-latin-regular.woff2 │ │ │ │ │ ├── poppins-v5-latin-100italic.woff │ │ │ │ │ ├── poppins-v5-latin-100italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-200italic.woff │ │ │ │ │ ├── poppins-v5-latin-200italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-300italic.woff │ │ │ │ │ ├── poppins-v5-latin-300italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-500italic.woff │ │ │ │ │ ├── poppins-v5-latin-500italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-600italic.woff │ │ │ │ │ ├── poppins-v5-latin-600italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-700italic.woff │ │ │ │ │ ├── poppins-v5-latin-700italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-800italic.woff │ │ │ │ │ ├── poppins-v5-latin-800italic.woff2 │ │ │ │ │ ├── poppins-v5-latin-900italic.woff │ │ │ │ │ └── poppins-v5-latin-900italic.woff2 │ │ │ └── js │ │ │ │ └── common.js │ │ ├── templates │ │ │ ├── foot.html │ │ │ ├── header.html │ │ │ ├── menu.html │ │ │ ├── jacocoReportDetail.html │ │ │ ├── projectList.html │ │ │ └── resetCoverage.html │ │ ├── logback.xml │ │ └── application.properties │ └── java │ │ └── com │ │ └── mangosteen │ │ ├── MangosteenApplication.java │ │ ├── exception │ │ └── MangosteenException.java │ │ ├── jacoco │ │ ├── core │ │ │ ├── package-info.java │ │ │ ├── runtime │ │ │ │ ├── package-info.java │ │ │ │ ├── IRemoteCommandVisitor.java │ │ │ │ ├── AbstractRuntime.java │ │ │ │ ├── IRuntime.java │ │ │ │ ├── RemoteControlWriter.java │ │ │ │ ├── OfflineInstrumentationAccessGenerator.java │ │ │ │ └── IExecutionDataAccessorGenerator.java │ │ │ ├── data │ │ │ │ ├── package-info.java │ │ │ │ ├── IExecutionDataVisitor.java │ │ │ │ ├── ISessionInfoVisitor.java │ │ │ │ └── IncompatibleExecDataVersionException.java │ │ │ ├── tools │ │ │ │ └── package-info.java │ │ │ ├── instr │ │ │ │ └── package-info.java │ │ │ ├── internal │ │ │ │ ├── flow │ │ │ │ │ ├── IProbeIdGenerator.java │ │ │ │ │ ├── IFrame.java │ │ │ │ │ └── ClassProbesVisitor.java │ │ │ │ ├── instr │ │ │ │ │ ├── IProbeInserter.java │ │ │ │ │ ├── NoneProbeArrayStrategy.java │ │ │ │ │ ├── ProbeCounter.java │ │ │ │ │ ├── IProbeArrayStrategy.java │ │ │ │ │ └── LocalProbeArrayStrategy.java │ │ │ │ ├── analysis │ │ │ │ │ ├── filter │ │ │ │ │ │ ├── IFilter.java │ │ │ │ │ │ ├── IFilterContext.java │ │ │ │ │ │ ├── SyntheticFilter.java │ │ │ │ │ │ ├── KotlinNotNullOperatorFilter.java │ │ │ │ │ │ ├── EnumFilter.java │ │ │ │ │ │ ├── PrivateEmptyNoArgConstructorFilter.java │ │ │ │ │ │ ├── KotlinLateinitFilter.java │ │ │ │ │ │ ├── IFilterOutput.java │ │ │ │ │ │ ├── KotlinGeneratedFilter.java │ │ │ │ │ │ ├── Filters.java │ │ │ │ │ │ └── AnnotationGeneratedFilter.java │ │ │ │ │ └── SourceFileCoverageImpl.java │ │ │ │ ├── InputStreams.java │ │ │ │ └── data │ │ │ │ │ └── CompactDataInput.java │ │ │ ├── analysis │ │ │ │ ├── ISourceFileCoverage.java │ │ │ │ ├── ICoverageVisitor.java │ │ │ │ ├── IBundleCoverage.java │ │ │ │ ├── IMethodCoverage.java │ │ │ │ ├── IPackageCoverage.java │ │ │ │ ├── ILine.java │ │ │ │ ├── ISourceNode.java │ │ │ │ └── package-info.java │ │ │ └── JaCoCo.java │ │ └── report │ │ │ ├── csv │ │ │ ├── package-info.java │ │ │ └── CSVGroupHandler.java │ │ │ ├── xml │ │ │ └── package-info.java │ │ │ ├── check │ │ │ ├── package-info.java │ │ │ └── IViolationsOutput.java │ │ │ ├── html │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── internal │ │ │ └── html │ │ │ │ ├── index │ │ │ │ ├── package-info.java │ │ │ │ ├── IIndexUpdate.java │ │ │ │ └── ElementIndex.java │ │ │ │ ├── resources │ │ │ │ └── package-info.java │ │ │ │ ├── table │ │ │ │ ├── package-info.java │ │ │ │ ├── ITableItem.java │ │ │ │ ├── TableItemComparator.java │ │ │ │ └── LabelColumn.java │ │ │ │ ├── ILinkable.java │ │ │ │ └── page │ │ │ │ ├── SourceFileItem.java │ │ │ │ ├── GroupPage.java │ │ │ │ └── MethodItem.java │ │ │ ├── IMultiReportOutput.java │ │ │ ├── ISourceFileLocator.java │ │ │ ├── FileMultiReportOutput.java │ │ │ ├── DirectorySourceFileLocator.java │ │ │ ├── IReportVisitor.java │ │ │ └── MultiSourceFileLocator.java │ │ ├── dao │ │ ├── UserMapper.java │ │ └── ProjectMapper.java │ │ ├── service │ │ ├── CodeRepository.java │ │ ├── MangosteenUserService.java │ │ ├── CollectingLogOutputStream.java │ │ ├── LogOption.java │ │ └── impl │ │ │ └── SvnRepositoryImpl.java │ │ ├── model │ │ ├── Project.java │ │ ├── ProjectConfig.java │ │ └── ExecuteRecords.java │ │ ├── configContext │ │ ├── WebConfig.java │ │ ├── MangosteenDataSource.java │ │ └── LoginFilter.java │ │ └── tools │ │ └── MD5Tools.java └── test │ └── java │ └── com │ ├── pay │ └── mangosteen │ │ └── MangosteenApplicationTests.java │ └── mangosteen │ └── service │ ├── impl │ └── GitRepositoryImplTest.java │ ├── JacocoServiceTest.java │ └── ProjectServiceTest.java └── docs └── jacocoagent.jar /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/.DS_Store -------------------------------------------------------------------------------- /docs/jacocoagent.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/docs/jacocoagent.jar -------------------------------------------------------------------------------- /src/main/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/static/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/up.gif -------------------------------------------------------------------------------- /src/main/resources/static/images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/class.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/class.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/down.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/group.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/group.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/sort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/sort.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/branchfc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/branchfc.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/branchnc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/branchnc.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/branchpc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/branchpc.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/bundle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/bundle.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/greenbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/greenbar.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/method.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/method.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/package.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/package.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/redbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/redbar.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/report.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/report.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/session.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/session.gif -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/source.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/jacoco/source.gif -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/build.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/login.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/reset.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/project1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/project1.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/project2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/project2.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/report.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/bg-title-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/bg-title-01.jpg -------------------------------------------------------------------------------- /src/main/resources/static/css/images/bg-title-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/bg-title-02.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/Untitled-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/Untitled-1.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-01.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-02.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-03.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-04.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-05.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-06.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/logo-blue.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/logo-mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/logo-mini.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/logo-white.png -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/avatar-big-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/avatar-big-01.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/mangosteen.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/mangosteen.jpeg -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/slick/ajax-loader.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/slick/fonts/slick.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/slick/fonts/slick.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/slick/fonts/slick.woff -------------------------------------------------------------------------------- /src/main/resources/static/images/icon/mangosteenlogo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/images/icon/mangosteenlogo.jpeg -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/src/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/src/images/next.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/src/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/src/images/prev.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_555555_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_555555_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_777620_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_777620_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_777777_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_777777_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/css/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/css/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/dist/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/dist/images/close.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/dist/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/dist/images/next.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/dist/images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/dist/images/prev.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/src/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/src/images/close.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/src/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/src/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/lightbox2/dist/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/lightbox2/dist/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-100italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-200italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-300italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-500italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-600italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-700italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-800italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/fonts/poppins/poppins-v5-latin-900italic.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-4.7/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-5/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/font-awesome-4.7/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guochangxie/mangosteen/HEAD/src/main/resources/static/vendor/mdi-font/fonts/Material-Design-Iconic-Font.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/config.rb: -------------------------------------------------------------------------------- 1 | css_dir = "." 2 | sass_dir = "." 3 | images_dir = "." 4 | fonts_dir = "fonts" 5 | relative_assets = true 6 | 7 | output_style = :compact 8 | line_comments = false 9 | 10 | preferred_syntax = :scss -------------------------------------------------------------------------------- /src/test/java/com/pay/mangosteen/MangosteenApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.pay.mangosteen; 2 | 3 | import org.junit.Test; 4 | public class MangosteenApplicationTests { 5 | 6 | @Test 7 | public void contextLoads() { 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/font-awesome-4.7/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/prettify.css: -------------------------------------------------------------------------------- 1 | /* Pretty printing styles. Used with prettify.js. */ 2 | 3 | .str { color: #2A00FF; } 4 | .kwd { color: #7F0055; font-weight:bold; } 5 | .com { color: #3F5FBF; } 6 | .typ { color: #606; } 7 | .lit { color: #066; } 8 | .pun { color: #660; } 9 | .pln { color: #000; } 10 | .tag { color: #008; } 11 | .atn { color: #606; } 12 | .atv { color: #080; } 13 | .dec { color: #606; } 14 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/MangosteenApplication.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen; 2 | 3 | 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication 8 | public class MangosteenApplication { 9 | 10 | public static void main(String[] args) { 11 | 12 | SpringApplication.run(MangosteenApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/exception/MangosteenException.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.exception; 2 | 3 | /** 4 | * @author guochang.xie 5 | * @Description: TODO 6 | * @date 2019/2/1810:53 AM 7 | */ 8 | public class MangosteenException extends RuntimeException { 9 | 10 | 11 | 12 | public MangosteenException(String message) { 13 | super(message); 14 | } 15 | 16 | public MangosteenException(String message, Throwable cause) { 17 | super(message, cause); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/templates/foot.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 |
6 |
7 | 10 |
11 |
12 |
13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |     4 |        5 |          ${LOG_HOME}/mangosteen.%d{yyyy-MM-dd}.log 6 |          30 7 |        8 |        9 |          %-4relative [%thread] %-5level %logger{35} - %msg%n 10 |        11 |     12 | 13 |     14 |        15 |     16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Meta information about JaCoCo. 15 | */ 16 | package com.mangosteen.jacoco.core; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/csv/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Brock Janiczak - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * CSV report implementation. 15 | */ 16 | package com.mangosteen.jacoco.report.csv; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/xml/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Brock Janiczak - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * XML report implementation. 15 | */ 16 | package com.mangosteen.jacoco.report.xml; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/check/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Rules check implementation. 15 | */ 16 | package com.mangosteen.jacoco.report.check; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/html/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * HTML report implementation. 15 | */ 16 | package com.mangosteen.jacoco.report.html; 17 | -------------------------------------------------------------------------------- /src/main/resources/templates/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 |
7 |
8 |
9 | 14 | 15 |
16 |
17 |
18 |
19 | 20 | 21 |
22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Common interfaces and utilities for report generation. 15 | */ 16 | package com.mangosteen.jacoco.report; 17 | -------------------------------------------------------------------------------- /src/main/resources/static/jacoco/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Internal: Resources for HTML reports. 15 | */ 16 | package com.mangosteen.jacoco.report.internal.html.resources; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Runtime control and execution data collection. 15 | */ 16 | package com.mangosteen.jacoco.core.runtime; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/data/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Representation and persistence of execution data and session information. 15 | */ 16 | package com.mangosteen.jacoco.core.data; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/index/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Internal: Index generation for HTML reports. 15 | */ 16 | package com.mangosteen.jacoco.report.internal.html.index; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/resources/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Internal: Resources for HTML reports. 15 | */ 16 | package com.mangosteen.jacoco.report.internal.html.resources; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.dao; 2 | 3 | 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | /** 8 | * @author guochang.xie 9 | * @Description: TODO 10 | * @date 2019/3/264:23 PM 11 | */ 12 | 13 | @Mapper 14 | public interface UserMapper { 15 | 16 | @Select("select passwd from tb_user where userName =#{userName}") 17 | String queryPasswdByUserName(String userName); 18 | 19 | @Select("SELECT " + 20 | "role " + 21 | "FROM " + 22 | " tb_role tr " + 23 | " JOIN tb_userrole tur ON tr.id = tur.roleId " + 24 | " JOIN tb_user tu ON tu.id = tur.userId " + 25 | " AND tu.userName = #{userName}") 26 | String queryUserRole(String userName); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/table/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Internal: Sortable HTML table for coverage node elements. 15 | */ 16 | package com.mangosteen.jacoco.report.internal.html.table; 17 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/tools/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | * Collection of tools build on top of the JaCoCo core APIs. The tools offer 15 | * more high-level functionality useful for integrating JaCoCo. 16 | */ 17 | package com.mangosteen.jacoco.core.tools; 18 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/service/CodeRepository.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | 4 | import java.io.File; 5 | import java.util.List; 6 | 7 | /** 8 | * @author guochang.xie 9 | * @Description: TODO 10 | * @date 2019/4/1012:15 PM 11 | */ 12 | public interface CodeRepository { 13 | 14 | /** 15 | * 从代码仓库下载代码 16 | * @param repository 本地文件路径 17 | * @param branch 要下载的分支地址 18 | * @return 19 | */ 20 | boolean downLoad(File repository, String branch); 21 | 22 | /** 23 | * 从代码仓库更新代码 24 | * @param file 本地代码位置 25 | * @param branch 要更新的分支地址 26 | * @return 27 | */ 28 | boolean update(File file, String branch); 29 | 30 | /** 31 | * 32 | * @param baseUrl 33 | * @param diffUrl 34 | * @return 变更的方法列表 35 | */ 36 | List diff(String baseUrl, String diffUrl); 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/instr/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | *

15 | * Instrumentation of Java class files for code coverage. The main entry point 16 | * is the class {@link com.mangosteen.jacoco.core.instr.Instrumenter}. 17 | *

18 | */ 19 | package com.mangosteen.jacoco.core.instr; 20 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/model/Project.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.model; 2 | 3 | 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class Project { 10 | 11 | 12 | private int id; 13 | 14 | private String projectName; 15 | 16 | private String projectGroup; 17 | 18 | private String codeBranch; 19 | 20 | private String projectConfig; 21 | 22 | 23 | @Override 24 | public String toString() { 25 | final StringBuilder sb = new StringBuilder("{"); 26 | sb.append("\"id\":") 27 | .append(id); 28 | sb.append(",\"projectName\":\"") 29 | .append(projectName).append('\"'); 30 | sb.append(",\"projectGroup\":\"") 31 | .append(projectGroup).append('\"'); 32 | sb.append(",\"codeBranch\":\"") 33 | .append(codeBranch).append('\"'); 34 | sb.append('}'); 35 | return sb.toString(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/service/MangosteenUserService.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | import com.mangosteen.dao.UserMapper; 4 | import com.mangosteen.tools.MD5Tools; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | /** 9 | * @author guochang.xie 10 | * @Description: TODO 11 | * @date 2019/4/107:00 PM 12 | */ 13 | @Service 14 | public class MangosteenUserService { 15 | @Autowired 16 | private UserMapper userMapper; 17 | 18 | public boolean isLogin(String userName,String passwd){ 19 | String passWord = userMapper.queryPasswdByUserName(userName); 20 | String encryption = MD5Tools.encryption(passwd); 21 | if(encryption.equals(passWord)){ 22 | return true; 23 | } 24 | return false; 25 | } 26 | 27 | 28 | public String queryUserRole(String userName){ 29 | return userMapper.queryUserRole(userName); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/flow/IProbeIdGenerator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.flow; 13 | 14 | /** 15 | * Internal interface to create probe ids unique within a class. 16 | */ 17 | public interface IProbeIdGenerator { 18 | 19 | /** 20 | * Returns the next unique probe id. 21 | * 22 | * @return unique probe id 23 | */ 24 | int nextId(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/model/ProjectConfig.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.model; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Setter 7 | @Getter 8 | public class ProjectConfig { 9 | 10 | private int id ; 11 | private int projectId; 12 | private String serverIp; 13 | private int serverPort; 14 | private String serverContainer; 15 | 16 | 17 | @Override 18 | public String toString() { 19 | final StringBuilder sb = new StringBuilder("{"); 20 | sb.append("\"id\":") 21 | .append(id); 22 | sb.append(",\"projectId\":") 23 | .append(projectId); 24 | sb.append(",\"serverIp\":\"") 25 | .append(serverIp).append('\"'); 26 | sb.append(",\"serverPort\":\"") 27 | .append(serverPort).append('\"'); 28 | sb.append(",\"serverContainer\":\"") 29 | .append(serverContainer).append('\"'); 30 | sb.append('}'); 31 | return sb.toString(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/vector-map/jqvmap.min.css: -------------------------------------------------------------------------------- 1 | .jqvmap-label, 2 | .jqvmap-pin { 3 | pointer-events: none 4 | } 5 | .jqvmap-label { 6 | position: absolute; 7 | display: none; 8 | -webkit-border-radius: 3px; 9 | -moz-border-radius: 3px; 10 | border-radius: 3px; 11 | background: #292929; 12 | color: #fff; 13 | font-family: sans-serif, Verdana; 14 | font-size: smaller; 15 | padding: 3px 16 | } 17 | .jqvmap-zoomin, 18 | .jqvmap-zoomout { 19 | position: absolute; 20 | left: 10px; 21 | -webkit-border-radius: 3px; 22 | -moz-border-radius: 3px; 23 | border-radius: 3px; 24 | background: #000; 25 | padding: 3px; 26 | color: #fff; 27 | width: 15px; 28 | height: 15px; 29 | cursor: pointer; 30 | line-height: 10px; 31 | text-align: center 32 | } 33 | .jqvmap-zoomin { 34 | top: 10px 35 | } 36 | .jqvmap-zoomout { 37 | top: 30px 38 | } 39 | .jqvmap-region { 40 | cursor: pointer 41 | } 42 | .jqvmap-ajax_response { 43 | width: 100%; 44 | height: 500px 45 | } -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/instr/IProbeInserter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.instr; 13 | 14 | /** 15 | * Internal interface for insertion of probes into in the instruction sequence 16 | * of a method. 17 | */ 18 | interface IProbeInserter { 19 | 20 | /** 21 | * Inserts the probe with the given id. 22 | * 23 | * @param id 24 | * id of the probe to insert 25 | */ 26 | void insertProbe(int id); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/configContext/WebConfig.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.configContext; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 6 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 | import org.springframework.web.socket.server.standard.ServerEndpointExporter; 9 | 10 | 11 | @Configuration 12 | public class WebConfig implements WebMvcConfigurer { 13 | 14 | @Override 15 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 16 | registry.addResourceHandler( 17 | "/static/**") 18 | .addResourceLocations( 19 | "classpath:/static/"); 20 | } 21 | @Bean 22 | public ServerEndpointExporter serverEndpointExporter() { 23 | return new ServerEndpointExporter(); 24 | } 25 | 26 | 27 | } 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/ISourceFileCoverage.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | /** 15 | * Coverage data of a single source file. The name of this node is the local 16 | * name of the source file. 17 | */ 18 | public interface ISourceFileCoverage extends ISourceNode { 19 | 20 | /** 21 | * Returns the VM name of the package the source file belongs to. 22 | * 23 | * @return package name 24 | */ 25 | String getPackageName(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/ICoverageVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | /** 15 | * Interface for coverage data output as a stream of {@link IClassCoverage} 16 | * instances. 17 | */ 18 | public interface ICoverageVisitor { 19 | 20 | /** 21 | * For analyzed class coverage data is emitted to this method. 22 | * 23 | * @param coverage 24 | * coverage data for a class 25 | */ 26 | void visitCoverage(IClassCoverage coverage); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/flow/IFrame.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.flow; 13 | 14 | import org.objectweb.asm.MethodVisitor; 15 | 16 | /** 17 | * Representation of the current stackmap frame content. 18 | */ 19 | public interface IFrame { 20 | 21 | /** 22 | * Emits a frame event with the current content to the given visitor. 23 | * 24 | * @param mv 25 | * method visitor to emit frame event to 26 | */ 27 | void accept(MethodVisitor mv); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.servlet.context-path=/mangosteen 2 | server.port =8086 3 | server.address=0.0.0.0 4 | #### thymeleaf配置 ####### 5 | spring.thymeleaf.cache=false 6 | spring.thymeleaf.encoding=UTF-8 7 | spring.thymeleaf.servlet.content-type=text/html 8 | spring.thymeleaf.mode=LEGACYHTML5 9 | ###静态资源文件路径配置,指定外部文件也为静态资源文件,就可以直接通过浏览器访问 10 | #spring.resources.static-locations =file:/Users/guochang.xie/Documents/tmp/ci-jacoco/ 11 | spring.resources.static-locations =file:/opt/mangosteenWorkSpace/ 12 | #数据源服务配置 13 | datasource.url=jdbc:mysql://10.10.111.10:3306/mangosteen?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&verifyServerCertificate=false&useSSL=false 14 | datasource.driverClassName=com.mysql.jdbc.Driver 15 | datasource.username=mangosteen 16 | datasource.password=mangosteen 17 | datasource.test-on-borrow=false 18 | datasource.test-while-idle=true 19 | datasource.time-between-eviction-runs-millis= 3600000 20 | #mongosteen项目保存路径 21 | mangosteen.workspace=/opt/mangosteenWorkSpace 22 | #spring.jpa.show-sql=true 23 | #logging.level.com.mangosteen.dao=debug 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/IBundleCoverage.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | import java.util.Collection; 15 | 16 | /** 17 | * Coverage data of a bundle. A bundle groups a collection of packages. 18 | * 19 | * @see IPackageCoverage 20 | */ 21 | public interface IBundleCoverage extends ICoverageNode { 22 | 23 | /** 24 | * Returns all packages contained in this bundle. 25 | * 26 | * @return all packages 27 | */ 28 | Collection getPackages(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/table/ITableItem.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.table; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | import com.mangosteen.jacoco.report.internal.html.ILinkable; 16 | 17 | /** 18 | * Interface for a item (row) in a coverage data table. 19 | */ 20 | public interface ITableItem extends ILinkable { 21 | 22 | /** 23 | * Returns the corresponding node data. 24 | * 25 | * @return node data 26 | */ 27 | ICoverageNode getNode(); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/data/IExecutionDataVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.data; 13 | 14 | /** 15 | * Interface for data output of collected execution data. This interface is 16 | * meant to be implemented by parties that want to retrieve data from the 17 | * coverage runtime. 18 | */ 19 | public interface IExecutionDataVisitor { 20 | 21 | /** 22 | * Provides execution data for a class. 23 | * 24 | * @param data 25 | * execution data for a class 26 | */ 27 | void visitClassExecution(ExecutionData data); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/tools/MD5Tools.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.tools; 2 | 3 | import java.security.MessageDigest; 4 | import java.security.NoSuchAlgorithmException; 5 | 6 | /** 7 | * @author guochang.xie 8 | * @Description: TODO 9 | * @date 2019/3/264:36 PM 10 | */ 11 | public class MD5Tools { 12 | 13 | public static String encryption(String plainText) { 14 | String re_md5 = new String(); 15 | try { 16 | MessageDigest md = MessageDigest.getInstance("MD5"); 17 | md.update(plainText.getBytes()); 18 | byte b[] = md.digest(); 19 | 20 | int i; 21 | 22 | StringBuffer buf = new StringBuffer(""); 23 | for (int offset = 0; offset < b.length; offset++) { 24 | i = b[offset]; 25 | if (i < 0) 26 | i += 256; 27 | if (i < 16) 28 | buf.append("0"); 29 | buf.append(Integer.toHexString(i)); 30 | } 31 | 32 | re_md5 = buf.toString(); 33 | 34 | } catch (NoSuchAlgorithmException e) { 35 | e.printStackTrace(); 36 | } 37 | return re_md5; 38 | } 39 | } 40 | 41 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/IMethodCoverage.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | /** 15 | * Coverage data of a single method. The name of this node is the local method 16 | * name. 17 | */ 18 | public interface IMethodCoverage extends ISourceNode { 19 | 20 | /** 21 | * Returns the descriptor of the method. 22 | * 23 | * @return descriptor 24 | */ 25 | String getDesc(); 26 | 27 | /** 28 | * Returns the generic signature of the method if defined. 29 | * 30 | * @return generic signature or null 31 | */ 32 | String getSignature(); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/index/IIndexUpdate.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.index; 13 | 14 | import com.mangosteen.jacoco.report.internal.html.ILinkable; 15 | 16 | /** 17 | * Every report page that should become part of the index must be added via this 18 | * interface. 19 | */ 20 | public interface IIndexUpdate { 21 | 22 | /** 23 | * Adds a class to the index. 24 | * 25 | * @param link 26 | * link to the class 27 | * @param classid 28 | * identifier of the class 29 | */ 30 | void addClass(ILinkable link, long classid); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/data/ISessionInfoVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.data; 13 | 14 | /** 15 | * Interface for data output of collected session information. This interface is 16 | * meant to be implemented by parties that want to retrieve data from the 17 | * coverage runtime. 18 | */ 19 | public interface ISessionInfoVisitor { 20 | 21 | /** 22 | * Provides session information for the subsequent execution data calls. In 23 | * case of merged sessions this method might be called multiple times. 24 | * 25 | * @param info 26 | * session information 27 | */ 28 | void visitSessionInfo(SessionInfo info); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/service/CollectingLogOutputStream.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.apache.commons.exec.LogOutputStream; 5 | 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | 9 | /** 10 | * @author guochang.xie 11 | * @Description: TODO 12 | * @date 2019/5/62:03 PM 13 | */ 14 | @Slf4j 15 | public class CollectingLogOutputStream extends LogOutputStream { 16 | private final List lines = new LinkedList(); 17 | private final boolean logToStandardOut; 18 | 19 | public CollectingLogOutputStream(boolean logToStandardOut) { 20 | this.logToStandardOut = logToStandardOut; 21 | } 22 | 23 | @Override 24 | protected void processLine(String line, int level) { 25 | if (logToStandardOut) { 26 | log.info(line); 27 | } 28 | lines.add(line); 29 | } 30 | 31 | public List getLines() { 32 | return lines; 33 | } 34 | 35 | public String getLine(){ 36 | StringBuffer stringBuffer=new StringBuffer(); 37 | for(String line:lines){ 38 | stringBuffer.append(line); 39 | stringBuffer.append("\r\n"); 40 | } 41 | return stringBuffer.toString(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/smk-accordion/accordion.css: -------------------------------------------------------------------------------- 1 | .accordionjs { 2 | position: relative; 3 | margin: 0; 4 | padding: 0; 5 | list-style: none; 6 | margin-top: 10px; 7 | margin-bottom: 20px; 8 | } 9 | .accordionjs .acc_section { 10 | border: 1px solid #ccc; 11 | position: relative; 12 | z-index: 10; 13 | margin-top: -1px; 14 | overflow: hidden; 15 | } 16 | .accordionjs .acc_section .acc_head { 17 | position: relative; 18 | background: #fff; 19 | padding: 10px; 20 | display: block; 21 | cursor: pointer; 22 | } 23 | .accordionjs .acc_section .acc_head h3 { 24 | line-height: 1; 25 | margin: 5px 0; 26 | } 27 | .accordionjs .acc_section .acc_content { 28 | padding: 10px; 29 | } 30 | .accordionjs .acc_section:first-of-type, 31 | .accordionjs .acc_section:first-of-type .acc_head { 32 | border-top-left-radius: 3px; 33 | border-top-right-radius: 3px; 34 | } 35 | .accordionjs .acc_section:last-of-type, 36 | .accordionjs .acc_section:last-of-type .acc_content { 37 | border-bottom-left-radius: 3px; 38 | border-bottom-right-radius: 3px; 39 | } 40 | .accordionjs .acc_section.acc_active > .acc_content { 41 | display: block; 42 | } 43 | .accordionjs .acc_section.acc_active > .acc_head { 44 | background: #F9F9F9; 45 | border-bottom: 1px solid #ccc; 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/instr/NoneProbeArrayStrategy.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.instr; 13 | 14 | import org.objectweb.asm.ClassVisitor; 15 | import org.objectweb.asm.MethodVisitor; 16 | 17 | /** 18 | * The strategy does not emit any code at all. This is used for interface types 19 | * without any code. 20 | */ 21 | class NoneProbeArrayStrategy implements IProbeArrayStrategy { 22 | 23 | public int storeInstance(final MethodVisitor mv, final boolean clinit, 24 | final int variable) { 25 | throw new UnsupportedOperationException(); 26 | } 27 | 28 | public void addMembers(final ClassVisitor delegate, final int probeCount) { 29 | // nothing to do 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/IRemoteCommandVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | import java.io.IOException; 15 | 16 | /** 17 | * Interface for remote commands to a coverage runtime. 18 | */ 19 | public interface IRemoteCommandVisitor { 20 | 21 | /** 22 | * Requests a execution data dump with an optional reset. 23 | * 24 | * @param dump 25 | * true if the dump should be executed 26 | * @param reset 27 | * true if the reset should be executed 28 | * @throws IOException 29 | * in case of problems with the remote connection 30 | */ 31 | void visitDumpCommand(boolean dump, boolean reset) throws IOException; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/table/TableItemComparator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.table; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | 16 | import java.util.Comparator; 17 | 18 | /** 19 | * Adapter to sort table items based on their coverage nodes. 20 | */ 21 | class TableItemComparator implements Comparator { 22 | 23 | private final Comparator comparator; 24 | 25 | TableItemComparator(final Comparator comparator) { 26 | this.comparator = comparator; 27 | } 28 | 29 | public int compare(final ITableItem i1, final ITableItem i2) { 30 | return comparator.compare(i1.getNode(), i2.getNode()); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/resources/templates/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/check/IViolationsOutput.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.check; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | 16 | /** 17 | * Call-back interface which is used to report rule violations to. 18 | * 19 | */ 20 | public interface IViolationsOutput { 21 | 22 | /** 23 | * Called for every rule violation. 24 | * 25 | * @param node 26 | * node which violates a rule 27 | * @param rule 28 | * rule which is violated 29 | * @param limit 30 | * limit which is violated 31 | * @param message 32 | * readable message describing this violation 33 | */ 34 | void onViolation(ICoverageNode node, Rule rule, Limit limit, String message); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/service/LogOption.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | import java.io.*; 4 | 5 | /** 6 | * @author guochang.xie 7 | * @Description: TODO 8 | * @date 2019/5/64:33 PM 9 | */ 10 | public class LogOption { 11 | 12 | private String filePath; 13 | public LogOption(String filePath){ 14 | this.filePath=filePath; 15 | } 16 | public void writeLog(String log){ 17 | 18 | BufferedWriter bwriter = null; 19 | try { 20 | File dir = new File(filePath); 21 | if(!dir.exists() && !dir.isDirectory()) { 22 | dir.mkdirs(); 23 | } 24 | File logFile = new File(filePath + "/" + "build.log"); 25 | if(!logFile.exists()) { 26 | logFile.createNewFile(); 27 | } 28 | bwriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(logFile, true))); 29 | bwriter.write(log); 30 | bwriter.newLine(); 31 | bwriter.flush(); 32 | }catch (Exception exception){ 33 | 34 | } 35 | finally{ 36 | if(bwriter != null){ 37 | try { 38 | bwriter.close(); 39 | } catch (IOException e) { 40 | e.printStackTrace(); 41 | } 42 | } 43 | } 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/JaCoCo.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core; 13 | 14 | /** 15 | * Static Meta information about JaCoCo. 16 | */ 17 | public final class JaCoCo { 18 | 19 | /** Qualified build version of the JaCoCo core library. */ 20 | public static final String VERSION; 21 | 22 | /** Absolute URL of the current JaCoCo home page */ 23 | public static final String HOMEURL; 24 | 25 | /** Name of the runtime package of this build */ 26 | public static final String RUNTIMEPACKAGE; 27 | 28 | static { 29 | /*final ResourceBundle bundle = ResourceBundle 30 | .getBundle("jacoco");*/ 31 | VERSION = "$qualified.bundle.version$"; 32 | HOMEURL = "$jacoco.home.url$"; 33 | RUNTIMEPACKAGE = "$jacoco.home.url$"; 34 | } 35 | 36 | private JaCoCo() { 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/model/ExecuteRecords.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.model; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.Date; 7 | 8 | /** 9 | * @author guochang.xie 10 | * @Description: TODO 11 | * @date 2018/12/209:43 AM 12 | */ 13 | @Getter 14 | @Setter 15 | public class ExecuteRecords { 16 | 17 | private int id ; 18 | 19 | private String projectName; 20 | 21 | private String codeBranch; 22 | 23 | private Date executeTime; 24 | 25 | private String serverIp; 26 | 27 | private String reportPath; 28 | 29 | private String diffUrl; 30 | 31 | //是否为git仓库 32 | private boolean isGit; 33 | //是否为增量覆盖率 34 | private boolean isIncrement; 35 | 36 | 37 | @Override 38 | public String toString() { 39 | final StringBuilder sb = new StringBuilder("{"); 40 | sb.append("\"projectName\":\"") 41 | .append(projectName).append('\"'); 42 | sb.append(",\"codeBranch\":\"") 43 | .append(codeBranch).append('\"'); 44 | sb.append(",\"executeTime\":\"") 45 | .append(executeTime).append('\"'); 46 | sb.append(",\"serverIp\":\"") 47 | .append(serverIp).append('\"'); 48 | sb.append(",\"reportPath\":\"") 49 | .append(reportPath).append('\"'); 50 | sb.append('}'); 51 | return sb.toString(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/AbstractRuntime.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | import java.util.Random; 15 | 16 | /** 17 | * Base {@link IRuntime} implementation. 18 | */ 19 | public abstract class AbstractRuntime implements IRuntime { 20 | 21 | /** access to the runtime data */ 22 | protected RuntimeData data; 23 | 24 | /** 25 | * Subclasses must call this method when overwriting it. 26 | */ 27 | public void startup(final RuntimeData data) throws Exception { 28 | this.data = data; 29 | } 30 | 31 | private static final Random RANDOM = new Random(); 32 | 33 | /** 34 | * Creates a random session identifier. 35 | * 36 | * @return random session identifier 37 | */ 38 | public static String createRandomId() { 39 | return Integer.toHexString(RANDOM.nextInt()); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/IPackageCoverage.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | import java.util.Collection; 15 | 16 | /** 17 | * Coverage data of a Java package containing classes and source files. The name 18 | * of this node is the package name in VM notation (slash separated). The name 19 | * of the default package is the empty string. 20 | * 21 | * @see IClassCoverage 22 | * @see ISourceFileCoverage 23 | */ 24 | public interface IPackageCoverage extends ICoverageNode { 25 | 26 | /** 27 | * Returns all classes contained in this package. 28 | * 29 | * @return all classes 30 | */ 31 | Collection getClasses(); 32 | 33 | /** 34 | * Returns all source files in this package. 35 | * 36 | * @return all source files 37 | */ 38 | Collection getSourceFiles(); 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/IMultiReportOutput.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import java.io.IOException; 15 | import java.io.OutputStream; 16 | 17 | /** 18 | * Interface to emit multiple binary files. 19 | */ 20 | public interface IMultiReportOutput { 21 | 22 | /** 23 | * Creates a file at the given local path. The returned {@link OutputStream} 24 | * has to be closed before the next document is created. 25 | * 26 | * @param path 27 | * local path to the new document 28 | * @return output for the content 29 | * @throws IOException 30 | * if the creation fails 31 | */ 32 | OutputStream createFile(String path) throws IOException; 33 | 34 | /** 35 | * Closes the underlying resource container. 36 | * 37 | * @throws IOException 38 | * if closing fails 39 | */ 40 | void close() throws IOException; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/IRuntime.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | /** 15 | * This interface represents a particular mechanism to collect execution 16 | * information in the target VM at runtime. 17 | */ 18 | public interface IRuntime extends IExecutionDataAccessorGenerator { 19 | 20 | /** 21 | * Starts the coverage runtime. This method MUST be called before any class 22 | * instrumented for this runtime is loaded. 23 | * 24 | * @param data 25 | * the execution data for this runtime 26 | * @throws Exception 27 | * any internal problem during startup 28 | */ 29 | void startup(RuntimeData data) throws Exception; 30 | 31 | /** 32 | * Allows the coverage runtime to cleanup internals. This class should be 33 | * called when classes instrumented for this runtime are not used any more. 34 | */ 35 | void shutdown(); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/configContext/MangosteenDataSource.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.configContext; 2 | 3 | import com.alibaba.druid.pool.DruidDataSource; 4 | import org.mybatis.spring.SqlSessionFactoryBean; 5 | import org.mybatis.spring.annotation.MapperScan; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | 8 | import org.springframework.boot.context.properties.ConfigurationProperties; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | 12 | import javax.sql.DataSource; 13 | 14 | @Configuration 15 | @MapperScan(basePackages="com.mangosteen.dao",sqlSessionFactoryRef="mangosteenSqlSessionFactory") 16 | public class MangosteenDataSource { 17 | 18 | @Bean(name = "mangosteenMysqlDataSource") 19 | @ConfigurationProperties("datasource") 20 | public DataSource initDataSouurce(){ 21 | DruidDataSource dataSource = new DruidDataSource(); 22 | dataSource.setTimeBetweenConnectErrorMillis(300000); 23 | dataSource.setMinEvictableIdleTimeMillis(600000); 24 | return dataSource; 25 | } 26 | 27 | @Bean(name="mangosteenSqlSessionFactory") 28 | public SqlSessionFactoryBean createSqlSessionFactoryBean(@Qualifier("mangosteenMysqlDataSource") DataSource mangosteenDataSource){ 29 | SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); 30 | sqlSessionFactoryBean.setDataSource(mangosteenDataSource); 31 | return sqlSessionFactoryBean; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/ILine.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | /** 15 | * The instruction and branch coverage of a single source line is described by 16 | * this interface. 17 | */ 18 | public interface ILine { 19 | 20 | /** 21 | * Returns the instruction counter for this line. 22 | * 23 | * @return instruction counter 24 | */ 25 | ICounter getInstructionCounter(); 26 | 27 | /** 28 | * Returns the branches counter for this line. 29 | * 30 | * @return branches counter 31 | */ 32 | ICounter getBranchCounter(); 33 | 34 | /** 35 | * Returns the coverage status of this line, calculated from the 36 | * instructions counter and branch counter. 37 | * 38 | * @see ICounter#EMPTY 39 | * @see ICounter#NOT_COVERED 40 | * @see ICounter#PARTLY_COVERED 41 | * @see ICounter#FULLY_COVERED 42 | * 43 | * @return status of this line 44 | */ 45 | int getStatus(); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/IFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.MethodNode; 15 | 16 | /** 17 | * Interface for filter implementations. Instances of filters are created for 18 | * analysis of each class and so can have per-class state. 19 | */ 20 | public interface IFilter { 21 | 22 | /** 23 | * This method is called for every method. The filter implementation is 24 | * expected to inspect the provided method and report its result to the 25 | * given {@link IFilterOutput} instance. 26 | * 27 | * @param methodNode 28 | * method to inspect 29 | * @param context 30 | * context information for the method 31 | * @param output 32 | * callback to report filtering results to 33 | */ 34 | void filter(MethodNode methodNode, IFilterContext context, 35 | IFilterOutput output); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/ILinkable.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html; 13 | 14 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 15 | 16 | /** 17 | * Abstraction for items that can be linked to in a report. 18 | */ 19 | public interface ILinkable { 20 | 21 | /** 22 | * Returns a relative link to the item that works from the given base 23 | * folder. 24 | * 25 | * @param base 26 | * folder where the link should be inserted 27 | * @return relative link or null if the target does not exist 28 | */ 29 | String getLink(ReportOutputFolder base); 30 | 31 | /** 32 | * Returns the display label used for the link. 33 | * 34 | * @return display label 35 | */ 36 | String getLinkLabel(); 37 | 38 | /** 39 | * Optional style class to be associated with the link. 40 | * 41 | * @return link style class or null 42 | */ 43 | String getLinkStyle(); 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/IFilterContext.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import java.util.Set; 15 | 16 | /** 17 | * Context information provided to filters. 18 | */ 19 | public interface IFilterContext { 20 | 21 | /** 22 | * @return vm name of the enclosing class 23 | */ 24 | String getClassName(); 25 | 26 | /** 27 | * @return vm name of the super class of the enclosing class 28 | */ 29 | String getSuperClassName(); 30 | 31 | /** 32 | * @return vm names of the class annotations of the enclosing class 33 | */ 34 | Set getClassAnnotations(); 35 | 36 | /** 37 | * @return file name of the corresponding source file or null 38 | * if not available 39 | */ 40 | String getSourceFileName(); 41 | 42 | /** 43 | * @return value of SourceDebugExtension attribute or null if 44 | * not available 45 | */ 46 | String getSourceDebugExtension(); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/SourceFileCoverageImpl.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ISourceFileCoverage; 15 | 16 | /** 17 | * Implementation of {@link ISourceFileCoverage}. 18 | */ 19 | public class SourceFileCoverageImpl extends SourceNodeImpl implements 20 | ISourceFileCoverage { 21 | 22 | private final String packagename; 23 | 24 | /** 25 | * Creates a source file data object with the given parameters. 26 | * 27 | * @param name 28 | * name of the source file 29 | * @param packagename 30 | * vm name of the package the source file belongs to 31 | */ 32 | public SourceFileCoverageImpl(final String name, final String packagename) { 33 | super(ElementType.SOURCEFILE, name); 34 | this.packagename = packagename; 35 | } 36 | 37 | // === ISourceFileCoverage implementation === 38 | 39 | public String getPackageName() { 40 | return packagename; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/ISourceFileLocator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import java.io.IOException; 15 | import java.io.Reader; 16 | 17 | /** 18 | * Interface to look-up source files that will be included with the report. 19 | */ 20 | public interface ISourceFileLocator { 21 | 22 | /** 23 | * Tries to locate the given source file and opens a reader with the 24 | * appropriate encoding. 25 | * 26 | * @param packageName 27 | * VM name of the package 28 | * @param fileName 29 | * name of the source file 30 | * @return reader if the file could be located, null otherwise 31 | * @throws IOException 32 | * in case of problems while opening the file 33 | */ 34 | Reader getSourceFile(String packageName, String fileName) 35 | throws IOException; 36 | 37 | /** 38 | * Returns number of blank characters that represent a tab in source code. 39 | * 40 | * @return tab width as number of blanks 41 | */ 42 | int getTabWidth(); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/page/SourceFileItem.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.page; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | import com.mangosteen.jacoco.core.analysis.ISourceFileCoverage; 16 | import com.mangosteen.jacoco.report.internal.html.table.ITableItem; 17 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 18 | import com.mangosteen.jacoco.report.internal.html.resources.Styles; 19 | 20 | /** 21 | * Table items representing a source file which cannot be linked. 22 | * 23 | */ 24 | final class SourceFileItem implements ITableItem { 25 | 26 | private final ICoverageNode node; 27 | 28 | SourceFileItem(final ISourceFileCoverage node) { 29 | this.node = node; 30 | } 31 | 32 | public String getLinkLabel() { 33 | return node.getName(); 34 | } 35 | 36 | public String getLinkStyle() { 37 | return Styles.EL_SOURCE; 38 | } 39 | 40 | public String getLink(final ReportOutputFolder base) { 41 | return null; 42 | } 43 | 44 | public ICoverageNode getNode() { 45 | return node; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/SyntheticFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.Opcodes; 15 | import org.objectweb.asm.tree.MethodNode; 16 | 17 | /** 18 | * Filters synthetic methods unless they represent bodies of lambda expressions. 19 | */ 20 | public final class SyntheticFilter implements IFilter { 21 | 22 | public void filter(final MethodNode methodNode, 23 | final IFilterContext context, final IFilterOutput output) { 24 | if ((methodNode.access & Opcodes.ACC_SYNTHETIC) == 0) { 25 | return; 26 | } 27 | 28 | if (methodNode.name.startsWith("lambda$")) { 29 | return; 30 | } 31 | 32 | if (KotlinGeneratedFilter.isKotlinClass(context)) { 33 | if (KotlinDefaultArgumentsFilter 34 | .isDefaultArgumentsMethodName(methodNode.name)) { 35 | return; 36 | } 37 | 38 | if (KotlinCoroutineFilter.isLastArgumentContinuation(methodNode)) { 39 | return; 40 | } 41 | } 42 | 43 | output.ignore(methodNode.instructions.getFirst(), 44 | methodNode.instructions.getLast()); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/InputStreams.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal; 13 | 14 | import java.io.ByteArrayOutputStream; 15 | import java.io.IOException; 16 | import java.io.InputStream; 17 | 18 | /** 19 | * Utilities for {@link InputStream}s. 20 | */ 21 | public final class InputStreams { 22 | 23 | private InputStreams() { 24 | } 25 | 26 | /** 27 | * Reads all bytes from an input stream into a byte array. The provided 28 | * {@link InputStream} is not closed by this method. 29 | * 30 | * @param is 31 | * the input stream to read from 32 | * @return a byte array containing all the bytes from the stream 33 | * @throws IOException 34 | * if an I/O error occurs 35 | */ 36 | public static byte[] readFully(final InputStream is) throws IOException { 37 | final byte[] buf = new byte[1024]; 38 | final ByteArrayOutputStream out = new ByteArrayOutputStream(); 39 | while (true) { 40 | final int r = is.read(buf); 41 | if (r == -1) { 42 | break; 43 | } 44 | out.write(buf, 0, r); 45 | } 46 | return out.toByteArray(); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/ISourceNode.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.analysis; 13 | 14 | /** 15 | * Interface for coverage nodes that have individual source lines like methods, 16 | * classes and source files. 17 | */ 18 | public interface ISourceNode extends ICoverageNode { 19 | 20 | /** Place holder for unknown lines (no debug information) */ 21 | int UNKNOWN_LINE = -1; 22 | 23 | /** 24 | * The number of the first line coverage information is available for. If no 25 | * line is contained, the method returns -1. 26 | * 27 | * @return number of the first line or {@link #UNKNOWN_LINE} 28 | */ 29 | int getFirstLine(); 30 | 31 | /** 32 | * The number of the last line coverage information is available for. If no 33 | * line is contained, the method returns -1. 34 | * 35 | * @return number of the last line or {@link #UNKNOWN_LINE} 36 | */ 37 | int getLastLine(); 38 | 39 | /** 40 | * Returns the line information for given line. 41 | * 42 | * @param nr 43 | * line number of interest 44 | * @return line information 45 | */ 46 | ILine getLine(int nr); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/dao/ProjectMapper.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.dao; 2 | 3 | import com.mangosteen.model.Project; 4 | import com.mangosteen.model.ProjectConfig; 5 | import org.apache.ibatis.annotations.*; 6 | 7 | import java.util.List; 8 | 9 | @Mapper 10 | public interface ProjectMapper { 11 | 12 | @Select("select id,projectName,projectGroup,codeBranch from tb_project") 13 | List queryAllProject(); 14 | 15 | @Insert("INSERT INTO tb_project(`projectName`, `projectGroup`, `codeBranch`,`projectConfig`) VALUES " + 16 | "(#{projectName}, 'default', #{codeBranch},#{projectConfig});") 17 | @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") 18 | int saveProject(Project project); 19 | 20 | @Insert("") 26 | void saveProjectConfig(@Param("projectConfigs") List projectConfigs); 27 | 28 | @Select("select id,projectName,projectGroup,codeBranch,projectConfig from tb_project where projectName=#{projectName}") 29 | Project queryProjectByName(String projectName); 30 | 31 | @Update("update tb_project set projectName=#{projectName} ,codeBranch=#{codeBranch} ,projectConfig=#{projectConfig} where id =#{id}") 32 | void updateProjectById(Project project); 33 | 34 | @Delete("delete from tb_project where projectName=#{projectName}") 35 | void deleteByProjectName(String projectName); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/FileMultiReportOutput.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import java.io.*; 15 | 16 | import static java.lang.String.format; 17 | 18 | /** 19 | * Implementation of {@link IMultiReportOutput} that writes files directly to a 20 | * given directory. 21 | */ 22 | public class FileMultiReportOutput implements IMultiReportOutput { 23 | 24 | private final File basedir; 25 | 26 | /** 27 | * Creates a new instance for document output in the given base directory. 28 | * 29 | * @param basedir 30 | * base directory 31 | */ 32 | public FileMultiReportOutput(final File basedir) { 33 | this.basedir = basedir; 34 | } 35 | 36 | public OutputStream createFile(final String path) throws IOException { 37 | final File file = new File(basedir, path); 38 | final File parent = file.getParentFile(); 39 | parent.mkdirs(); 40 | if (!parent.isDirectory()) { 41 | throw new IOException(format("Can't create directory %s.", parent)); 42 | } 43 | return new BufferedOutputStream(new FileOutputStream(file)); 44 | } 45 | 46 | public void close() throws IOException { 47 | // nothing to do here 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/service/impl/SvnRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service.impl; 2 | 3 | import com.mangosteen.service.CodeRepository; 4 | import com.mangosteen.tools.SvnManager; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.apache.commons.lang3.StringUtils; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.io.BufferedReader; 10 | import java.io.File; 11 | import java.io.FileReader; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | /** 16 | * @author guochang.xie 17 | * @Description: TODO 18 | * @date 2019/3/2010:47 AM 19 | */ 20 | @Service("svnImpl") 21 | @Slf4j 22 | public class SvnRepositoryImpl implements CodeRepository { 23 | 24 | @Override 25 | public boolean downLoad(File repository, String branch) { 26 | 27 | SvnManager svnManager=new SvnManager(); 28 | svnManager.init(); 29 | try { 30 | svnManager.checkOutModel(repository,branch); 31 | } catch (Exception e) { 32 | log.error("svn 检出失败,详情为:{}",e.getMessage()); 33 | return false; 34 | } 35 | return true; 36 | } 37 | 38 | @Override 39 | public boolean update(File file, String branch) { 40 | SvnManager svnManager=new SvnManager(); 41 | svnManager.init(); 42 | try { 43 | svnManager.updateModel(file); 44 | } catch (Exception e) { 45 | log.error("svn 更新失败,详情为:{}",e.getMessage()); 46 | return false; 47 | } 48 | return true; 49 | } 50 | 51 | @Override 52 | public List diff(String baseUrl, String diffUrl) { 53 | SvnManager svnManager=new SvnManager(); 54 | svnManager.init(); 55 | return svnManager.doDiffStatus(baseUrl, diffUrl); 56 | 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.Opcodes; 15 | import org.objectweb.asm.tree.AbstractInsnNode; 16 | import org.objectweb.asm.tree.MethodNode; 17 | 18 | /** 19 | * Filters branch in bytecode that Kotlin compiler generates for not-null 20 | * assertion operator. 21 | */ 22 | public final class KotlinNotNullOperatorFilter implements IFilter { 23 | 24 | public void filter(final MethodNode methodNode, 25 | final IFilterContext context, final IFilterOutput output) { 26 | final Matcher matcher = new Matcher(); 27 | for (AbstractInsnNode i = methodNode.instructions 28 | .getFirst(); i != null; i = i.getNext()) { 29 | matcher.match(i, output); 30 | } 31 | } 32 | 33 | private static class Matcher extends AbstractMatcher { 34 | public void match(final AbstractInsnNode start, 35 | final IFilterOutput output) { 36 | if (Opcodes.IFNONNULL != start.getOpcode()) { 37 | return; 38 | } 39 | cursor = start; 40 | nextIsInvokeStatic("kotlin/jvm/internal/Intrinsics", "throwNpe"); 41 | if (cursor == null) { 42 | return; 43 | } 44 | output.ignore(start, cursor); 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/EnumFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.MethodNode; 15 | 16 | /** 17 | * Filters methods values and valueOf that compiler 18 | * creates for enums. 19 | */ 20 | public final class EnumFilter implements IFilter { 21 | 22 | public void filter(final MethodNode methodNode, 23 | final IFilterContext context, final IFilterOutput output) { 24 | if (isMethodFiltered(context.getClassName(), 25 | context.getSuperClassName(), methodNode.name, 26 | methodNode.desc)) { 27 | output.ignore(methodNode.instructions.getFirst(), 28 | methodNode.instructions.getLast()); 29 | } 30 | } 31 | 32 | private boolean isMethodFiltered(final String className, 33 | final String superClassName, final String methodName, 34 | final String methodDesc) { 35 | if ("java/lang/Enum".equals(superClassName)) { 36 | if ("values".equals(methodName) 37 | && ("()[L" + className + ";").equals(methodDesc)) { 38 | return true; 39 | } 40 | if ("valueOf".equals(methodName) 41 | && ("(Ljava/lang/String;)L" + className + ";") 42 | .equals(methodDesc)) { 43 | return true; 44 | } 45 | } 46 | return false; 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/instr/ProbeCounter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.instr; 13 | 14 | import com.mangosteen.jacoco.core.internal.flow.ClassProbesVisitor; 15 | import com.mangosteen.jacoco.core.internal.flow.MethodProbesVisitor; 16 | import org.objectweb.asm.Opcodes; 17 | 18 | /** 19 | * Internal class to remember the total number of probes required for a class. 20 | */ 21 | class ProbeCounter extends ClassProbesVisitor { 22 | 23 | private int count; 24 | private boolean methods; 25 | 26 | ProbeCounter() { 27 | count = 0; 28 | methods = false; 29 | } 30 | 31 | @Override 32 | public MethodProbesVisitor visitMethod(final int access, final String name, 33 | final String desc, final String signature, final String[] exceptions) { 34 | if (!InstrSupport.CLINIT_NAME.equals(name) 35 | && (access & Opcodes.ACC_ABSTRACT) == 0) { 36 | methods = true; 37 | } 38 | return null; 39 | } 40 | 41 | @Override 42 | public void visitTotalProbeCount(final int count) { 43 | this.count = count; 44 | } 45 | 46 | int getCount() { 47 | return count; 48 | } 49 | 50 | /** 51 | * @return true if the class has non-abstract methods other 52 | * than a static initializer 53 | */ 54 | boolean hasMethods() { 55 | return methods; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/resources/static/js/common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 校验文本是否为空 3 | * tips:提示信息 4 | * 使用方法:$("#id").validate("提示文本"); 5 | * @itmyhome 6 | */ 7 | $.fn.validate = function(tips){ 8 | 9 | if($(this).val() == "" || $.trim($(this).val()).length == 0){ 10 | alert(tips + "不能为空!"); 11 | $(this).focus(); 12 | throw SyntaxError(); 13 | } 14 | } 15 | /** 16 | * 扩展jQuery动态创建表单,post提交数据后页面可以跳转 17 | * url:要跳转的页面 18 | * args:后台传递参数,{arg0:'arg0',arg1:'arg1'} 19 | * 用法为:$.StandardPost('url/path/req',{arg0:'arg0',arg1:'arg1'}); 20 | */ 21 | $.extend({ 22 | StandardPost:function(url,args){ 23 | var body = $(document.body), 24 | form = $("
"), 25 | input; 26 | form.attr({"action":url}); 27 | $.each(args,function(key,value){ 28 | input = $(""); 29 | input.attr({"name":key}); 30 | input.val(value); 31 | form.append(input); 32 | }); 33 | 34 | form.appendTo(document.body); 35 | form.submit(); 36 | document.body.removeChild(form[0]); 37 | } 38 | }); 39 | 40 | 41 | $.fn.serializeObject = function() { 42 | var o = {}; 43 | var a = this.serializeArray(); 44 | $.each(a, function() { 45 | if (o[this.name]) { 46 | if (!o[this.name].push) { 47 | o[this.name] = [ o[this.name] ]; 48 | } 49 | o[this.name].push(this.value || ''); 50 | } else { 51 | o[this.name] = this.value || ''; 52 | } 53 | }); 54 | return o; 55 | }; 56 | 57 | 58 | 59 | function changeFrameHeight(){ 60 | var ifm= document.getElementById("reportIframe"); 61 | ifm.height=document.documentElement.clientHeight; 62 | ifm.weight=document.documentElement.clientWidth; 63 | 64 | } 65 | 66 | 67 | window.onresize=function(){ 68 | changeFrameHeight(); 69 | 70 | } 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/page/GroupPage.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.page; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 16 | import com.mangosteen.jacoco.report.internal.html.IHTMLReportContext; 17 | 18 | /** 19 | * Page showing coverage information for a node that groups other nodes. The 20 | * page shows a table of linked nodes. 21 | */ 22 | public class GroupPage extends TablePage { 23 | 24 | /** 25 | * Creates a new visitor in the given context. 26 | * 27 | * @param node 28 | * corresponding coverage data 29 | * @param parent 30 | * optional hierarchical parent 31 | * @param folder 32 | * base folder to create this page in 33 | * @param context 34 | * settings context 35 | */ 36 | public GroupPage(final ICoverageNode node, final ReportPage parent, 37 | final ReportOutputFolder folder, final IHTMLReportContext context) { 38 | super(node, parent, folder, context); 39 | } 40 | 41 | @Override 42 | protected String getOnload() { 43 | return "initialSort(['breadcrumb', 'coveragetable'])"; 44 | } 45 | 46 | @Override 47 | protected String getFileName() { 48 | return "index.html"; 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.Opcodes; 15 | import org.objectweb.asm.tree.MethodNode; 16 | 17 | /** 18 | * Filters private empty constructors that do not have arguments. 19 | */ 20 | public final class PrivateEmptyNoArgConstructorFilter implements IFilter { 21 | 22 | private static final String CONSTRUCTOR_NAME = ""; 23 | private static final String CONSTRUCTOR_DESC = "()V"; 24 | 25 | public void filter(final MethodNode methodNode, 26 | final IFilterContext context, final IFilterOutput output) { 27 | if ((methodNode.access & Opcodes.ACC_PRIVATE) != 0 28 | && CONSTRUCTOR_NAME.equals(methodNode.name) 29 | && CONSTRUCTOR_DESC.equals(methodNode.desc) && new Matcher() 30 | .match(methodNode, context.getSuperClassName())) { 31 | output.ignore(methodNode.instructions.getFirst(), 32 | methodNode.instructions.getLast()); 33 | } 34 | } 35 | 36 | private static class Matcher extends AbstractMatcher { 37 | private boolean match(final MethodNode methodNode, 38 | final String superClassName) { 39 | firstIsALoad0(methodNode); 40 | nextIsInvokeSuper(superClassName, CONSTRUCTOR_DESC); 41 | nextIs(Opcodes.RETURN); 42 | return cursor != null; 43 | } 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/test/java/com/mangosteen/service/impl/GitRepositoryImplTest.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service.impl; 2 | 3 | import org.junit.After; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | import java.io.File; 8 | 9 | /** 10 | * GitRepositoryImpl Tester. 11 | * 12 | * @author 13 | * @version 1.0 14 | * @since
Apr 10, 2019
15 | */ 16 | public class GitRepositoryImplTest { 17 | 18 | 19 | GitRepositoryImpl gitRepository=new GitRepositoryImpl(); 20 | @Before 21 | public void before() throws Exception { 22 | } 23 | 24 | @After 25 | public void after() throws Exception { 26 | } 27 | 28 | /** 29 | * Method: downLoad(File repository, String branch) 30 | */ 31 | @Test 32 | public void testDownLoad() throws Exception { 33 | //TODO: Test goes here... 34 | gitRepository.downLoad(new File("/Users/guochang.xie/Documents/tmp/Kubo-ci"),"http://gitlab.cardinfo.com.cn/QA/Kubo-CI.git"); 35 | } 36 | 37 | /** 38 | * Method: update(File file, String branch) 39 | */ 40 | @Test 41 | public void testUpdate() throws Exception { 42 | //TODO: Test goes here... 43 | } 44 | 45 | /** 46 | * Method: diff(String baseUrl, String diffUrl, String diffRestFile) 47 | */ 48 | @Test 49 | public void testDiff() throws Exception { 50 | //TODO: Test goes here... 51 | } 52 | 53 | 54 | /** 55 | * Method: prepareTreeParser(Repository repository, String ref) 56 | */ 57 | @Test 58 | public void testPrepareTreeParser() throws Exception { 59 | //TODO: Test goes here... 60 | /* 61 | try { 62 | Method method = GitRepositoryImpl.getClass().getMethod("prepareTreeParser", Repository.class, String.class); 63 | method.setAccessible(true); 64 | method.invoke(, ); 65 | } catch(NoSuchMethodException e) { 66 | } catch(IllegalAccessException e) { 67 | } catch(InvocationTargetException e) { 68 | } 69 | */ 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/DirectorySourceFileLocator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import java.io.File; 15 | import java.io.FileInputStream; 16 | import java.io.IOException; 17 | import java.io.InputStream; 18 | 19 | /** 20 | * Locator for source files that picks source files from a given directory in 21 | * the file system. 22 | */ 23 | public class DirectorySourceFileLocator extends InputStreamSourceFileLocator { 24 | 25 | private final File directory; 26 | 27 | /** 28 | * Creates a new locator that searches for source files in the given 29 | * directory. 30 | * 31 | * @param directory 32 | * directory to search for source file 33 | * @param encoding 34 | * encoding of the source files, null for platform 35 | * default encoding 36 | * @param tabWidth 37 | * tab width in source files as number of blanks 38 | * 39 | */ 40 | public DirectorySourceFileLocator(final File directory, 41 | final String encoding, final int tabWidth) { 42 | super(encoding, tabWidth); 43 | this.directory = directory; 44 | } 45 | 46 | @Override 47 | protected InputStream getSourceStream(final String path) throws IOException { 48 | final File file = new File(directory, path); 49 | if (file.exists()) { 50 | return new FileInputStream(file); 51 | } else { 52 | return null; 53 | } 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/instr/IProbeArrayStrategy.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.instr; 13 | 14 | import org.objectweb.asm.ClassVisitor; 15 | import org.objectweb.asm.MethodVisitor; 16 | 17 | /** 18 | * Strategies to retrieve the probe array instance for each method within a 19 | * type. This abstraction is required as we need to follow a different strategy 20 | * depending on whether the instrumented type is a class or interface. 21 | */ 22 | public interface IProbeArrayStrategy { 23 | 24 | /** 25 | * Creates code that stores the probe array instance in the given variable. 26 | * 27 | * @param mv 28 | * visitor to create code 29 | * @param clinit 30 | * true in case of {@code } method 31 | * @param variable 32 | * variable index to store probe array to 33 | * @return maximum stack size required by the generated code 34 | */ 35 | int storeInstance(MethodVisitor mv, boolean clinit, int variable); 36 | 37 | /** 38 | * Adds additional class members required by this strategy. This method is 39 | * called after all original members of the class has been processed. 40 | * 41 | * @param cv 42 | * visitor to create fields and classes 43 | * @param probeCount 44 | * total number of probes required for this class 45 | */ 46 | void addMembers(ClassVisitor cv, int probeCount); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Fabian Mastenbroek - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.Opcodes; 15 | import org.objectweb.asm.tree.AbstractInsnNode; 16 | import org.objectweb.asm.tree.MethodNode; 17 | 18 | /** 19 | * Filters branch in bytecode that Kotlin compiler generates for reading from 20 | * lateinit properties. 21 | */ 22 | public class KotlinLateinitFilter implements IFilter { 23 | 24 | private final static String OWNER = "kotlin/jvm/internal/Intrinsics"; 25 | private final static String NAME = "throwUninitializedPropertyAccessException"; 26 | 27 | public void filter(final MethodNode methodNode, 28 | final IFilterContext context, final IFilterOutput output) { 29 | final Matcher matcher = new Matcher(); 30 | for (AbstractInsnNode i = methodNode.instructions 31 | .getFirst(); i != null; i = i.getNext()) { 32 | matcher.match(i, output); 33 | } 34 | } 35 | 36 | private static class Matcher extends AbstractMatcher { 37 | public void match(final AbstractInsnNode start, 38 | final IFilterOutput output) { 39 | 40 | if (Opcodes.IFNONNULL != start.getOpcode()) { 41 | return; 42 | } 43 | cursor = start; 44 | 45 | nextIs(Opcodes.LDC); 46 | nextIsInvokeStatic(OWNER, NAME); 47 | 48 | if (cursor != null) { 49 | output.ignore(start, cursor); 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/analysis/package-info.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | 13 | /** 14 | *

15 | * Coverage calculation and analysis. The coverage information is calculated 16 | * with an {@link com.mangosteen.jacoco.core.analysis.Analyzer} instance from class files 17 | * (target) and 18 | * {@linkplain com.mangosteen.jacoco.core.data.IExecutionDataVisitor execution data} 19 | * (actual). 20 | *

21 | * 22 | *

23 | * The {@link com.mangosteen.jacoco.core.analysis.CoverageBuilder} creates a hierarchy of 24 | * {@link com.mangosteen.jacoco.core.analysis.ICoverageNode} instances with the following 25 | * {@link com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType types}: 26 | *

27 | * 28 | *
29 |  * +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#GROUP Group} (optional)
30 |  *     +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#BUNDLE Bundle}
31 |  *         +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#PACKAGE Package}
32 |  *             +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#SOURCEFILE Source File}
33 |  *                 +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#CLASS Class}
34 |  *                     +-- {@linkplain com.mangosteen.jacoco.core.analysis.ICoverageNode.ElementType#METHOD Method}
35 |  * 
36 | */ 37 | package com.mangosteen.jacoco.core.analysis; 38 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/index/ElementIndex.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.index; 13 | 14 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 15 | import com.mangosteen.jacoco.report.internal.html.ILinkable; 16 | 17 | import java.util.HashMap; 18 | import java.util.Map; 19 | 20 | /** 21 | * An index over all report pages that allows queries according to certain 22 | * criteria. 23 | */ 24 | public class ElementIndex implements IIndexUpdate { 25 | 26 | private final ReportOutputFolder baseFolder; 27 | 28 | private final Map allClasses = new HashMap(); 29 | 30 | /** 31 | * Creates a new empty index for a HTML report. 32 | * 33 | * @param baseFolder 34 | * base folder where all links are calculated relative to 35 | */ 36 | public ElementIndex(final ReportOutputFolder baseFolder) { 37 | this.baseFolder = baseFolder; 38 | } 39 | 40 | /** 41 | * Returns the link to the class with the given identifier if a 42 | * corresponding page exists. 43 | * 44 | * @param classid 45 | * class identifier 46 | * @return Link or null 47 | */ 48 | public String getLinkToClass(final long classid) { 49 | return allClasses.get(Long.valueOf(classid)); 50 | } 51 | 52 | // === IIndexUpdater === 53 | 54 | public void addClass(final ILinkable link, final long classid) { 55 | allClasses.put(Long.valueOf(classid), link.getLink(baseFolder)); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/data/IncompatibleExecDataVersionException.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann, somechris - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.data; 13 | 14 | import java.io.IOException; 15 | 16 | /** 17 | * Signals that execution data in an incompatible version was tried to read. 18 | */ 19 | public class IncompatibleExecDataVersionException extends IOException { 20 | 21 | private static final long serialVersionUID = 1L; 22 | 23 | private final int actualVersion; 24 | 25 | /** 26 | * Creates a new exception to flag version mismatches in execution data. 27 | * 28 | * @param actualVersion 29 | * version found in the exec data 30 | */ 31 | public IncompatibleExecDataVersionException(final int actualVersion) { 32 | super(String.format("Cannot read execution data version 0x%x. " 33 | + "This version of JaCoCo uses execution data version 0x%x.", 34 | Integer.valueOf(actualVersion), 35 | Integer.valueOf(ExecutionDataWriter.FORMAT_VERSION))); 36 | this.actualVersion = actualVersion; 37 | } 38 | 39 | /** 40 | * Gets the version expected in the execution data which can be read by this 41 | * version of JaCoCo. 42 | * 43 | * @return expected version in execution data 44 | */ 45 | public int getExpectedVersion() { 46 | return ExecutionDataWriter.FORMAT_VERSION; 47 | } 48 | 49 | /** 50 | * Gets the actual version found in the execution data. 51 | * 52 | * @return actual version in execution data 53 | */ 54 | public int getActualVersion() { 55 | return actualVersion; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/resources/templates/jacocoReportDetail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 45 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/IFilterOutput.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.AbstractInsnNode; 15 | 16 | import java.util.Set; 17 | 18 | /** 19 | * Interface used by filters to mark filtered items. 20 | */ 21 | public interface IFilterOutput { 22 | 23 | /** 24 | * Marks sequence of instructions that should be ignored during computation 25 | * of coverage. 26 | * 27 | * @param fromInclusive 28 | * first instruction that should be ignored, inclusive 29 | * @param toInclusive 30 | * last instruction coming after fromInclusive that 31 | * should be ignored, inclusive 32 | */ 33 | void ignore(AbstractInsnNode fromInclusive, AbstractInsnNode toInclusive); 34 | 35 | /** 36 | * Marks two instructions that should be merged during computation of 37 | * coverage. 38 | * 39 | * @param i1 40 | * first instruction 41 | * @param i2 42 | * second instruction 43 | */ 44 | void merge(AbstractInsnNode i1, AbstractInsnNode i2); 45 | 46 | /** 47 | * Marks instruction whose outgoing branches should be replaced during 48 | * computation of coverage. 49 | * 50 | * @param source 51 | * instruction which branches should be replaced 52 | * @param newTargets 53 | * new targets of branches 54 | */ 55 | void replaceBranches(AbstractInsnNode source, 56 | Set newTargets); 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/IReportVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import com.mangosteen.jacoco.core.data.ExecutionData; 15 | import com.mangosteen.jacoco.core.data.SessionInfo; 16 | 17 | import java.io.IOException; 18 | import java.util.Collection; 19 | import java.util.List; 20 | 21 | /** 22 | * Interface for all implementations to retrieve structured report data. Unlike 23 | * nested {@link IReportGroupVisitor} instances the root visitor accepts exactly one 24 | * bundle or group. 25 | */ 26 | public interface IReportVisitor extends IReportGroupVisitor { 27 | 28 | /** 29 | * Initializes the report with global information. This method has to be 30 | * called before any other method can be called. 31 | * 32 | * @param sessionInfos 33 | * list of chronological ordered {@link SessionInfo} objects 34 | * where execution data has been collected for this report. 35 | * @param executionData 36 | * collection of all {@link ExecutionData} objects that are 37 | * considered for this report 38 | * @throws IOException 39 | * in case of IO problems with the report writer 40 | */ 41 | void visitInfo(List sessionInfos, 42 | Collection executionData) throws IOException; 43 | 44 | /** 45 | * Has to be called after all report data has been emitted. 46 | * 47 | * @throws IOException 48 | * in case of IO problems with the report writer 49 | */ 50 | void visitEnd() throws IOException; 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/resources/templates/projectList.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Title 5 | 6 | 7 |
8 | 9 |
10 |
11 |
12 |
13 |

14 | 项目列表

15 |
16 | 18 |
19 |
20 |
21 | 22 | 23 |
24 |
25 | 26 | 27 |
28 |
29 | 30 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
31 |   32 |   33 |   34 |
42 |
43 | 44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/counter-up/jquery.counterup.min.js: -------------------------------------------------------------------------------- 1 | (function($){"use strict";$.fn.counterUp=function(options){var settings=$.extend({time:400,delay:10,offset:100,beginAt:0,formatter:false,context:"window",callback:function(){}},options),s;return this.each(function(){var $this=$(this),counter={time:$(this).data("counterup-time")||settings.time,delay:$(this).data("counterup-delay")||settings.delay,offset:$(this).data("counterup-offset")||settings.offset,beginAt:$(this).data("counterup-beginat")||settings.beginAt,context:$(this).data("counterup-context")||settings.context};var counterUpper=function(){var nums=[];var divisions=counter.time/counter.delay;var num=$(this).attr("data-num")?$(this).attr("data-num"):$this.text();var isComma=/[0-9]+,[0-9]+/.test(num);num=num.replace(/,/g,"");var decimalPlaces=(num.split(".")[1]||[]).length;if(counter.beginAt>num)counter.beginAt=num;var isTime=/[0-9]+:[0-9]+:[0-9]+/.test(num);if(isTime){var times=num.split(":"),m=1;s=0;while(times.length>0){s+=m*parseInt(times.pop(),10);m*=60}}for(var i=divisions;i>=counter.beginAt/num*divisions;i--){var newNum=parseFloat(num/divisions*i).toFixed(decimalPlaces);if(isTime){newNum=parseInt(s/divisions*i);var hours=parseInt(newNum/3600)%24;var minutes=parseInt(newNum/60)%60;var seconds=parseInt(newNum%60,10);newNum=(hours<10?"0"+hours:hours)+":"+(minutes<10?"0"+minutes:minutes)+":"+(seconds<10?"0"+seconds:seconds)}if(isComma){while(/(\d+)(\d{3})/.test(newNum.toString())){newNum=newNum.toString().replace(/(\d+)(\d{3})/,"$1"+","+"$2")}}if(settings.formatter){newNum=settings.formatter.call(this,newNum)}nums.unshift(newNum)}$this.data("counterup-nums",nums);$this.text(counter.beginAt);var f=function(){if(!$this.data("counterup-nums")){settings.callback.call(this);return}$this.html($this.data("counterup-nums").shift());if($this.data("counterup-nums").length){setTimeout($this.data("counterup-func"),counter.delay)}else{$this.data("counterup-nums",null);$this.data("counterup-func",null);settings.callback.call(this)}};$this.data("counterup-func",f);setTimeout($this.data("counterup-func"),counter.delay)};$this.waypoint(function(direction){counterUpper();this.destroy()},{offset:counter.offset+"%",context:counter.context})})}})(jQuery); 2 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/table/LabelColumn.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.table; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 16 | import com.mangosteen.jacoco.report.internal.html.HTMLElement; 17 | import com.mangosteen.jacoco.report.internal.html.resources.Resources; 18 | 19 | import java.io.IOException; 20 | import java.util.Comparator; 21 | import java.util.List; 22 | 23 | /** 24 | * Column for the item label. The implementation is stateless, instances might 25 | * be used in parallel. 26 | */ 27 | public class LabelColumn implements IColumnRenderer { 28 | 29 | private static final Comparator COMPARATOR = new Comparator() { 30 | public int compare(final ITableItem i1, final ITableItem i2) { 31 | return i1.getLinkLabel().compareToIgnoreCase(i2.getLinkLabel()); 32 | } 33 | }; 34 | 35 | public boolean init(final List items, 36 | final ICoverageNode total) { 37 | return true; 38 | } 39 | 40 | public void footer(final HTMLElement td, final ICoverageNode total, 41 | final Resources resources, final ReportOutputFolder base) 42 | throws IOException { 43 | td.text("Total"); 44 | } 45 | 46 | public void item(final HTMLElement td, final ITableItem item, 47 | final Resources resources, final ReportOutputFolder base) 48 | throws IOException { 49 | td.a(item, base); 50 | } 51 | 52 | public Comparator getComparator() { 53 | return COMPARATOR; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/internal/html/page/MethodItem.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.internal.html.page; 13 | 14 | import com.mangosteen.jacoco.core.analysis.ICoverageNode; 15 | import com.mangosteen.jacoco.core.analysis.IMethodCoverage; 16 | import com.mangosteen.jacoco.core.analysis.ISourceNode; 17 | import com.mangosteen.jacoco.report.internal.html.resources.Styles; 18 | import com.mangosteen.jacoco.report.internal.html.table.ITableItem; 19 | import com.mangosteen.jacoco.report.internal.ReportOutputFolder; 20 | import com.mangosteen.jacoco.report.internal.html.ILinkable; 21 | 22 | /** 23 | * Table items representing a method. 24 | */ 25 | final class MethodItem implements ITableItem { 26 | 27 | private final IMethodCoverage node; 28 | 29 | private final String label; 30 | 31 | private final ILinkable sourcePage; 32 | 33 | MethodItem(final IMethodCoverage node, final String label, 34 | final ILinkable sourcePage) { 35 | this.node = node; 36 | this.label = label; 37 | this.sourcePage = sourcePage; 38 | } 39 | 40 | public String getLinkLabel() { 41 | return label; 42 | } 43 | 44 | public String getLinkStyle() { 45 | return Styles.EL_METHOD; 46 | } 47 | 48 | public String getLink(final ReportOutputFolder base) { 49 | if (sourcePage == null) { 50 | return null; 51 | } 52 | final String link = sourcePage.getLink(base); 53 | final int first = node.getFirstLine(); 54 | return first != ISourceNode.UNKNOWN_LINE ? link + "#L" + first : link; 55 | } 56 | 57 | public ICoverageNode getNode() { 58 | return node; 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/test/java/com/mangosteen/service/JacocoServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | import com.mangosteen.MangosteenApplication; 4 | import org.junit.After; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | import org.junit.runner.RunWith; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.boot.test.context.SpringBootTest; 10 | import org.springframework.test.context.junit4.SpringRunner; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * JacocoService Tester. 16 | * 17 | * @author 18 | * @version 1.0 19 | * @since
Feb 25, 2019
20 | */ 21 | 22 | @RunWith(SpringRunner.class) 23 | @SpringBootTest(classes = MangosteenApplication.class) 24 | public class JacocoServiceTest { 25 | 26 | @Autowired 27 | private JacocoService jacocoService; 28 | @Before 29 | public void before() throws Exception { 30 | } 31 | 32 | @After 33 | public void after() throws Exception { 34 | } 35 | 36 | /** 37 | * Method: visitDumpCommand(String address, int port, String saveFile) 38 | */ 39 | @Test 40 | public void testVisitDumpCommand() throws Exception { 41 | //TODO: Test goes here... 42 | } 43 | 44 | /** 45 | * Method: resetDump(String address, int port) 46 | */ 47 | @Test 48 | public void testResetDump() throws Exception { 49 | 50 | } 51 | 52 | /** 53 | * Method: readyClassesFromSVN(String devBranch, String sourceFile) 54 | */ 55 | @Test 56 | public void testReadyClasses() throws Exception { 57 | //TODO: Test goes here... 58 | } 59 | 60 | /** 61 | * Method: doDiff(String baseUrl, String diffUrl, String resultFilePath) 62 | */ 63 | @Test 64 | public void testDoDidd() throws Exception { 65 | 66 | } 67 | 68 | /** 69 | * Method: paseDiffFile(String filePath) 70 | */ 71 | @Test 72 | public void testPaseDiffFile() throws Exception { 73 | 74 | } 75 | 76 | /** 77 | * Method: buildReport(ExecuteRecords executeRecords) 78 | */ 79 | @Test 80 | public void testBuildReport() throws Exception { 81 | //TODO: Test goes here... 82 | } 83 | 84 | 85 | } 86 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/fonts/slick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/flow/ClassProbesVisitor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.flow; 13 | 14 | import com.mangosteen.jacoco.core.internal.instr.InstrSupport; 15 | import org.objectweb.asm.ClassVisitor; 16 | 17 | /** 18 | * A {@link ClassVisitor} with additional methods to get probe insertion 19 | * information for each method 20 | */ 21 | public abstract class ClassProbesVisitor extends ClassVisitor { 22 | 23 | /** 24 | * New visitor instance without delegate visitor. 25 | */ 26 | public ClassProbesVisitor() { 27 | this(null); 28 | } 29 | 30 | /** 31 | * New visitor instance that delegates to the given visitor. 32 | * 33 | * @param cv 34 | * optional next visitor in chain 35 | */ 36 | public ClassProbesVisitor(final ClassVisitor cv) { 37 | super(InstrSupport.ASM_API_VERSION, cv); 38 | } 39 | 40 | /** 41 | * When visiting a method we need a {@link MethodProbesVisitor} to handle 42 | * the probes of that method. 43 | */ 44 | @Override 45 | public abstract MethodProbesVisitor visitMethod(int access, String name, 46 | String desc, String signature, String[] exceptions); 47 | 48 | /** 49 | * Reports the total number of encountered probes. For classes this method 50 | * is called just before {@link ClassVisitor#visitEnd()}. For interfaces 51 | * this method is called before the first method (the static initializer) is 52 | * emitted. 53 | * 54 | * @param count 55 | * total number of probes 56 | */ 57 | public abstract void visitTotalProbeCount(int count); 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/RemoteControlWriter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | import com.mangosteen.jacoco.core.data.ExecutionDataWriter; 15 | 16 | import java.io.IOException; 17 | import java.io.OutputStream; 18 | 19 | /** 20 | * {@link ExecutionDataWriter} with commands added for runtime remote control. 21 | */ 22 | public class RemoteControlWriter extends ExecutionDataWriter implements 23 | IRemoteCommandVisitor { 24 | 25 | /** Block identifier to confirm successful command execution. */ 26 | public static final byte BLOCK_CMDOK = 0x20; 27 | 28 | /** Block identifier for dump command */ 29 | public static final byte BLOCK_CMDDUMP = 0x40; 30 | 31 | /** 32 | * Creates a new writer based on the given output stream. 33 | * 34 | * @param output 35 | * stream to write commands to 36 | * @throws IOException 37 | * if the header can't be written 38 | */ 39 | public RemoteControlWriter(final OutputStream output) throws IOException { 40 | super(output); 41 | } 42 | 43 | /** 44 | * Sends a confirmation that a commands has been successfully executed and 45 | * the response is completed. 46 | * 47 | * @throws IOException 48 | * in case of problems with the remote connection 49 | */ 50 | public void sendCmdOk() throws IOException { 51 | out.writeByte(RemoteControlWriter.BLOCK_CMDOK); 52 | } 53 | 54 | public void visitDumpCommand(final boolean dump, final boolean reset) 55 | throws IOException { 56 | out.writeByte(RemoteControlWriter.BLOCK_CMDDUMP); 57 | out.writeBoolean(dump); 58 | out.writeBoolean(reset); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Nikolay Krasko - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.AbstractInsnNode; 15 | import org.objectweb.asm.tree.MethodNode; 16 | 17 | /** 18 | * Filters methods generated by the Kotlin compiler. Kotlin classes are 19 | * identified by the @kotlin.Metadata annotations. In such classes 20 | * generated methods do not have line numbers. 21 | */ 22 | public class KotlinGeneratedFilter implements IFilter { 23 | 24 | static final String KOTLIN_METADATA_DESC = "Lkotlin/Metadata;"; 25 | 26 | static boolean isKotlinClass(final IFilterContext context) { 27 | return context.getClassAnnotations().contains(KOTLIN_METADATA_DESC); 28 | } 29 | 30 | public void filter(final MethodNode methodNode, 31 | final IFilterContext context, final IFilterOutput output) { 32 | 33 | if (context.getSourceFileName() == null) { 34 | // probably full debug information is missing 35 | // disabled filtering as all methods might be erroneously skipped 36 | return; 37 | } 38 | 39 | if (!isKotlinClass(context)) { 40 | return; 41 | } 42 | 43 | if (hasLineNumber(methodNode)) { 44 | return; 45 | } 46 | 47 | output.ignore(methodNode.instructions.getFirst(), 48 | methodNode.instructions.getLast()); 49 | } 50 | 51 | private boolean hasLineNumber(final MethodNode methodNode) { 52 | for (AbstractInsnNode i = methodNode.instructions 53 | .getFirst(); i != null; i = i.getNext()) { 54 | if (AbstractInsnNode.LINE == i.getType()) { 55 | return true; 56 | } 57 | } 58 | return false; 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/countdown/countdowntime.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | "use strict"; 3 | 4 | $.fn.extend({ 5 | 6 | countdown100: function(options) { 7 | var defaults = { 8 | timeZone: "", 9 | endtimeYear: 0, 10 | endtimeMonth: 0, 11 | endtimeDate: 0, 12 | endtimeHours: 0, 13 | endtimeMinutes: 0, 14 | endtimeSeconds: 0, 15 | } 16 | 17 | var options = $.extend(defaults, options); 18 | 19 | return this.each(function() { 20 | var obj = $(this); 21 | var timeNow = new Date(); 22 | 23 | var tZ = options.timeZone; 24 | var endYear = options.endtimeYear; 25 | var endMonth = options.endtimeMonth; 26 | var endDate = options.endtimeDate; 27 | var endHours = options.endtimeHours; 28 | var endMinutes = options.endtimeMinutes; 29 | var endSeconds = options.endtimeSeconds; 30 | 31 | if(tZ === "") { 32 | var deadline = new Date(endYear, endMonth - 1, endDate, endHours, endMinutes, endSeconds); 33 | } 34 | else { 35 | var deadline = moment.tz([endYear, endMonth - 1, endDate, endHours, endMinutes, endSeconds], tZ).format(); 36 | } 37 | 38 | if(Date.parse(deadline) < Date.parse(timeNow)) { 39 | var deadline = new Date(Date.parse(new Date()) + endDate * 24 * 60 * 60 * 1000 + endHours * 60 * 60 * 1000); 40 | } 41 | 42 | 43 | $(obj).countdown(Date.parse(deadline), function(event) { 44 | $(this).find('.months').text(event.strftime('%m')); 45 | 46 | if($(this).find('.months').length > 0) { 47 | $(this).find('.days').text(event.strftime('%n')); 48 | } 49 | else { 50 | $(this).find('.days').text(event.strftime('%D')); 51 | } 52 | 53 | $(this).find('.hours').text(event.strftime('%H')); 54 | $(this).find('.minutes').text(event.strftime('%M')); 55 | $(this).find('.seconds').text(event.strftime('%S')); 56 | }); 57 | 58 | 59 | }); 60 | } 61 | }); 62 | 63 | 64 | 65 | })(jQuery); -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/data/CompactDataInput.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.data; 13 | 14 | import java.io.DataInputStream; 15 | import java.io.IOException; 16 | import java.io.InputStream; 17 | 18 | /** 19 | * Additional data input methods for compact storage of data structures. 20 | * 21 | * @see CompactDataOutput 22 | */ 23 | public class CompactDataInput extends DataInputStream { 24 | 25 | /** 26 | * Creates a new {@link CompactDataInput} that uses the specified underlying 27 | * input stream. 28 | * 29 | * @param in 30 | * underlying input stream 31 | */ 32 | public CompactDataInput(final InputStream in) { 33 | super(in); 34 | } 35 | 36 | /** 37 | * Reads a variable length representation of an integer value. 38 | * 39 | * @return read value 40 | * @throws IOException 41 | * if thrown by the underlying stream 42 | */ 43 | public int readVarInt() throws IOException { 44 | final int value = 0xFF & readByte(); 45 | if ((value & 0x80) == 0) { 46 | return value; 47 | } 48 | return (value & 0x7F) | (readVarInt() << 7); 49 | } 50 | 51 | /** 52 | * Reads a boolean array. 53 | * 54 | * @return boolean array 55 | * @throws IOException 56 | * if thrown by the underlying stream 57 | */ 58 | public boolean[] readBooleanArray() throws IOException { 59 | final boolean[] value = new boolean[readVarInt()]; 60 | int buffer = 0; 61 | for (int i = 0; i < value.length; i++) { 62 | if ((i % 8) == 0) { 63 | buffer = readByte(); 64 | } 65 | value[i] = (buffer & 0x01) != 0; 66 | buffer >>>= 1; 67 | } 68 | return value; 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/instr/LocalProbeArrayStrategy.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.instr; 13 | 14 | import com.mangosteen.jacoco.core.runtime.IExecutionDataAccessorGenerator; 15 | import org.objectweb.asm.ClassVisitor; 16 | import org.objectweb.asm.MethodVisitor; 17 | import org.objectweb.asm.Opcodes; 18 | 19 | /** 20 | * The strategy for interfaces inlines the runtime access directly into the 21 | * methods as this is the only method without keeping reference within this 22 | * class. This is very inefficient as the runtime is contacted for every method 23 | * invocation and therefore only used for static initializers in interfaces. 24 | */ 25 | class LocalProbeArrayStrategy implements IProbeArrayStrategy { 26 | 27 | private final String className; 28 | private final long classId; 29 | private final int probeCount; 30 | private final IExecutionDataAccessorGenerator accessorGenerator; 31 | 32 | LocalProbeArrayStrategy(final String className, final long classId, 33 | final int probeCount, 34 | final IExecutionDataAccessorGenerator accessorGenerator) { 35 | this.className = className; 36 | this.classId = classId; 37 | this.probeCount = probeCount; 38 | this.accessorGenerator = accessorGenerator; 39 | } 40 | 41 | public int storeInstance(final MethodVisitor mv, final boolean clinit, 42 | final int variable) { 43 | final int maxStack = accessorGenerator.generateDataAccessor(classId, 44 | className, probeCount, mv); 45 | mv.visitVarInsn(Opcodes.ASTORE, variable); 46 | return maxStack; 47 | } 48 | 49 | public void addMembers(final ClassVisitor delegate, final int probeCount) { 50 | // nothing to do 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/MultiSourceFileLocator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report; 13 | 14 | import java.io.IOException; 15 | import java.io.Reader; 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | /** 20 | * Locator that searches source files in multiple {@link ISourceFileLocator} 21 | * instances. For each lookup request the first locator that returns a 22 | * {@link Reader} for source content is selected. 23 | */ 24 | public class MultiSourceFileLocator implements ISourceFileLocator { 25 | 26 | private final int tabWidth; 27 | 28 | private final List delegates; 29 | 30 | /** 31 | * Creates a new empty locator. 32 | * 33 | * @param tabWidth 34 | * tab width in source files as number of blanks used for all 35 | * source files 36 | */ 37 | public MultiSourceFileLocator(final int tabWidth) { 38 | this.tabWidth = tabWidth; 39 | this.delegates = new ArrayList(); 40 | } 41 | 42 | /** 43 | * Adds the given locator. Locators are queried in the sequence they have 44 | * been added. 45 | * 46 | * @param locator 47 | * Additional locator to query 48 | */ 49 | public void add(final ISourceFileLocator locator) { 50 | delegates.add(locator); 51 | } 52 | 53 | public Reader getSourceFile(final String packageName, final String fileName) 54 | throws IOException { 55 | for (final ISourceFileLocator d : delegates) { 56 | final Reader reader = d.getSourceFile(packageName, fileName); 57 | if (reader != null) { 58 | return reader; 59 | } 60 | } 61 | return null; 62 | } 63 | 64 | public int getTabWidth() { 65 | return tabWidth; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/report/csv/CSVGroupHandler.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Brock Janiczak - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.report.csv; 13 | 14 | import com.mangosteen.jacoco.core.analysis.IBundleCoverage; 15 | import com.mangosteen.jacoco.core.analysis.IClassCoverage; 16 | import com.mangosteen.jacoco.core.analysis.IPackageCoverage; 17 | import com.mangosteen.jacoco.report.IReportGroupVisitor; 18 | import com.mangosteen.jacoco.report.ISourceFileLocator; 19 | 20 | import java.io.IOException; 21 | 22 | /** 23 | * Report visitor that handles coverage information for groups. 24 | */ 25 | class CSVGroupHandler implements IReportGroupVisitor { 26 | 27 | private final ClassRowWriter writer; 28 | 29 | private final String groupName; 30 | 31 | public CSVGroupHandler(final ClassRowWriter writer) { 32 | this(writer, null); 33 | } 34 | 35 | private CSVGroupHandler(final ClassRowWriter writer, final String groupName) { 36 | this.writer = writer; 37 | this.groupName = groupName; 38 | } 39 | 40 | public void visitBundle(final IBundleCoverage bundle, 41 | final ISourceFileLocator locator) throws IOException { 42 | final String name = appendName(bundle.getName()); 43 | for (final IPackageCoverage p : bundle.getPackages()) { 44 | final String packageName = p.getName(); 45 | for (final IClassCoverage c : p.getClasses()) { 46 | if (c.containsCode()) { 47 | writer.writeRow(name, packageName, c); 48 | } 49 | } 50 | } 51 | } 52 | 53 | public IReportGroupVisitor visitGroup(final String name) throws IOException { 54 | return new CSVGroupHandler(writer, appendName(name)); 55 | } 56 | 57 | private String appendName(final String name) { 58 | return groupName == null ? name : (groupName + "/" + name); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/configContext/LoginFilter.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.configContext; 2 | import org.springframework.context.annotation.Configuration; 3 | 4 | import javax.servlet.*; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | import javax.servlet.http.HttpSession; 8 | import java.io.IOException; 9 | 10 | /** 11 | * @author guochang.xie 12 | * @Description: TODO 13 | * @date 2019/3/2711:26 AM 14 | */ 15 | @Configuration 16 | public class LoginFilter implements Filter { 17 | 18 | 19 | String[] includeUrls = new String[]{"/isLogin","/login","/static/","/mangosteen/log"}; 20 | 21 | @Override 22 | public void init(FilterConfig filterConfig) throws ServletException { 23 | 24 | } 25 | 26 | @Override 27 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 28 | HttpServletRequest request = (HttpServletRequest) servletRequest; 29 | HttpServletResponse response = (HttpServletResponse) servletResponse; 30 | HttpSession session = request.getSession(false); 31 | String uri = request.getRequestURI(); 32 | 33 | //是否需要过滤 34 | boolean needFilter = isNeedFilter(uri); 35 | 36 | if (needFilter) { //不需要过滤直接传给下一个过滤器 37 | filterChain.doFilter(servletRequest, servletResponse); 38 | 39 | } else { 40 | 41 | // session中包含user对象,则是登录状态 42 | if(session!=null&&session.getAttribute("user") != null){ 43 | filterChain.doFilter(request, response); 44 | }else{ 45 | //重定向到登录页(需要在static文件夹下建立此html文件) 46 | response.sendRedirect("/mangosteen/project/login"); 47 | } 48 | } 49 | } 50 | 51 | /** 52 | * @Author: xxxxx 53 | * @Description: 是否需要过滤 54 | * @Date: 2018-03-12 13:20:54 55 | * @param uri 56 | */ 57 | public boolean isNeedFilter(String uri) { 58 | 59 | for (String includeUrl : includeUrls) { 60 | if(uri.contains(includeUrl)) { 61 | return true; 62 | } 63 | } 64 | 65 | return false; 66 | } 67 | 68 | @Override 69 | public void destroy() { 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/slick.less: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | 3 | .slick-slider { 4 | position: relative; 5 | display: block; 6 | box-sizing: border-box; 7 | -webkit-touch-callout: none; 8 | -webkit-user-select: none; 9 | -khtml-user-select: none; 10 | -moz-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | -ms-touch-action: pan-y; 14 | touch-action: pan-y; 15 | -webkit-tap-highlight-color: transparent; 16 | } 17 | .slick-list { 18 | position: relative; 19 | overflow: hidden; 20 | display: block; 21 | margin: 0; 22 | padding: 0; 23 | 24 | &:focus { 25 | outline: none; 26 | } 27 | 28 | &.dragging { 29 | cursor: pointer; 30 | cursor: hand; 31 | } 32 | } 33 | .slick-slider .slick-track, 34 | .slick-slider .slick-list { 35 | -webkit-transform: translate3d(0, 0, 0); 36 | -moz-transform: translate3d(0, 0, 0); 37 | -ms-transform: translate3d(0, 0, 0); 38 | -o-transform: translate3d(0, 0, 0); 39 | transform: translate3d(0, 0, 0); 40 | } 41 | 42 | .slick-track { 43 | position: relative; 44 | left: 0; 45 | top: 0; 46 | display: block; 47 | margin-left: auto; 48 | margin-right: auto; 49 | 50 | &:before, 51 | &:after { 52 | content: ""; 53 | display: table; 54 | } 55 | 56 | &:after { 57 | clear: both; 58 | } 59 | 60 | .slick-loading & { 61 | visibility: hidden; 62 | } 63 | } 64 | .slick-slide { 65 | float: left; 66 | height: 100%; 67 | min-height: 1px; 68 | [dir="rtl"] & { 69 | float: right; 70 | } 71 | img { 72 | display: block; 73 | } 74 | &.slick-loading img { 75 | display: none; 76 | } 77 | 78 | display: none; 79 | 80 | &.dragging img { 81 | pointer-events: none; 82 | } 83 | 84 | .slick-initialized & { 85 | display: block; 86 | } 87 | 88 | .slick-loading & { 89 | visibility: hidden; 90 | } 91 | 92 | .slick-vertical & { 93 | display: block; 94 | height: auto; 95 | border: 1px solid transparent; 96 | } 97 | } 98 | .slick-arrow.slick-hidden { 99 | display: none; 100 | } 101 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/slick/slick.scss: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | 3 | .slick-slider { 4 | position: relative; 5 | display: block; 6 | box-sizing: border-box; 7 | -webkit-touch-callout: none; 8 | -webkit-user-select: none; 9 | -khtml-user-select: none; 10 | -moz-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | -ms-touch-action: pan-y; 14 | touch-action: pan-y; 15 | -webkit-tap-highlight-color: transparent; 16 | } 17 | .slick-list { 18 | position: relative; 19 | overflow: hidden; 20 | display: block; 21 | margin: 0; 22 | padding: 0; 23 | 24 | &:focus { 25 | outline: none; 26 | } 27 | 28 | &.dragging { 29 | cursor: pointer; 30 | cursor: hand; 31 | } 32 | } 33 | .slick-slider .slick-track, 34 | .slick-slider .slick-list { 35 | -webkit-transform: translate3d(0, 0, 0); 36 | -moz-transform: translate3d(0, 0, 0); 37 | -ms-transform: translate3d(0, 0, 0); 38 | -o-transform: translate3d(0, 0, 0); 39 | transform: translate3d(0, 0, 0); 40 | } 41 | 42 | .slick-track { 43 | position: relative; 44 | left: 0; 45 | top: 0; 46 | display: block; 47 | margin-left: auto; 48 | margin-right: auto; 49 | 50 | &:before, 51 | &:after { 52 | content: ""; 53 | display: table; 54 | } 55 | 56 | &:after { 57 | clear: both; 58 | } 59 | 60 | .slick-loading & { 61 | visibility: hidden; 62 | } 63 | } 64 | .slick-slide { 65 | float: left; 66 | height: 100%; 67 | min-height: 1px; 68 | [dir="rtl"] & { 69 | float: right; 70 | } 71 | img { 72 | display: block; 73 | } 74 | &.slick-loading img { 75 | display: none; 76 | } 77 | 78 | display: none; 79 | 80 | &.dragging img { 81 | pointer-events: none; 82 | } 83 | 84 | .slick-initialized & { 85 | display: block; 86 | } 87 | 88 | .slick-loading & { 89 | visibility: hidden; 90 | } 91 | 92 | .slick-vertical & { 93 | display: block; 94 | height: auto; 95 | border: 1px solid transparent; 96 | } 97 | } 98 | .slick-arrow.slick-hidden { 99 | display: none; 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | import com.mangosteen.jacoco.core.JaCoCo; 15 | import com.mangosteen.jacoco.core.internal.instr.InstrSupport; 16 | import org.objectweb.asm.MethodVisitor; 17 | import org.objectweb.asm.Opcodes; 18 | 19 | /** 20 | * This implementation of {@link IExecutionDataAccessorGenerator} generate a 21 | * direct dependency to the JaCoCo runtime agent to initialize the runtime and 22 | * obtain probe arrays. This generator is designed for offline instrumentation 23 | * only. 24 | */ 25 | public class OfflineInstrumentationAccessGenerator implements 26 | IExecutionDataAccessorGenerator { 27 | 28 | private final String runtimeClassName; 29 | 30 | /** 31 | * Creates a new instance for offline instrumentation. 32 | */ 33 | public OfflineInstrumentationAccessGenerator() { 34 | this(JaCoCo.RUNTIMEPACKAGE.replace('.', '/') + "/Offline"); 35 | } 36 | 37 | /** 38 | * Creates a new instance with the given runtime class name for testing 39 | * purposes 40 | * 41 | * @param runtimeClassName 42 | * VM name of the runtime class 43 | */ 44 | OfflineInstrumentationAccessGenerator(final String runtimeClassName) { 45 | this.runtimeClassName = runtimeClassName; 46 | } 47 | 48 | public int generateDataAccessor(final long classid, final String classname, 49 | final int probecount, final MethodVisitor mv) { 50 | mv.visitLdcInsn(Long.valueOf(classid)); 51 | mv.visitLdcInsn(classname); 52 | InstrSupport.push(mv, probecount); 53 | mv.visitMethodInsn(Opcodes.INVOKESTATIC, runtimeClassName, "getProbes", 54 | "(JLjava/lang/String;I)[Z", false); 55 | return 4; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/Filters.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.MethodNode; 15 | 16 | /** 17 | * Filter that combines other filters. 18 | */ 19 | public final class Filters implements IFilter { 20 | 21 | /** 22 | * Filter that does nothing. 23 | */ 24 | public static final IFilter NONE = new Filters(); 25 | 26 | private final IFilter[] filters; 27 | 28 | /** 29 | * Creates filter that combines all other filters. 30 | * 31 | * @return filter that combines all other filters 32 | */ 33 | public static IFilter all() { 34 | return new Filters(new EnumFilter(), new SyntheticFilter(), 35 | new SynchronizedFilter(), new TryWithResourcesJavac11Filter(), 36 | new TryWithResourcesJavacFilter(), 37 | new TryWithResourcesEcjFilter(), new FinallyFilter(), 38 | new PrivateEmptyNoArgConstructorFilter(), 39 | new StringSwitchJavacFilter(), new StringSwitchEcjFilter(), 40 | new EnumEmptyConstructorFilter(), 41 | new AnnotationGeneratedFilter(), new KotlinGeneratedFilter(), 42 | new KotlinLateinitFilter(), new KotlinWhenFilter(), 43 | new KotlinWhenStringFilter(), 44 | new KotlinUnsafeCastOperatorFilter(), 45 | new KotlinNotNullOperatorFilter(), 46 | new KotlinDefaultArgumentsFilter(), new KotlinInlineFilter(), 47 | new KotlinCoroutineFilter()); 48 | } 49 | 50 | private Filters(final IFilter... filters) { 51 | this.filters = filters; 52 | } 53 | 54 | public void filter(final MethodNode methodNode, 55 | final IFilterContext context, final IFilterOutput output) { 56 | for (final IFilter filter : filters) { 57 | filter.filter(methodNode, context, output); 58 | } 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/bootstrap-progressbar/bootstrap-progressbar.min.js: -------------------------------------------------------------------------------- 1 | /*! bootstrap-progressbar v0.9.0 | Copyright (c) 2012-2015 Stephan Groß | MIT license | http://www.minddust.com */ 2 | !function(t){"use strict";var e=function(n,s){this.$element=t(n),this.options=t.extend({},e.defaults,s)};e.defaults={transition_delay:300,refresh_speed:50,display_text:"none",use_percentage:!0,percent_format:function(t){return t+"%"},amount_format:function(t,e){return t+" / "+e},update:t.noop,done:t.noop,fail:t.noop},e.prototype.transition=function(){var n=this.$element,s=n.parent(),a=this.$back_text,r=this.$front_text,i=this.options,o=parseInt(n.attr("data-transitiongoal")),h=parseInt(n.attr("aria-valuemin"))||0,d=parseInt(n.attr("aria-valuemax"))||100,f=s.hasClass("vertical"),p=i.update&&"function"==typeof i.update?i.update:e.defaults.update,u=i.done&&"function"==typeof i.done?i.done:e.defaults.done,c=i.fail&&"function"==typeof i.fail?i.fail:e.defaults.fail;if(isNaN(o))return void c("data-transitiongoal not set");var l=Math.round(100*(o-h)/(d-h));if("center"===i.display_text&&!a&&!r){this.$back_text=a=t("").addClass("progressbar-back-text").prependTo(s),this.$front_text=r=t("").addClass("progressbar-front-text").prependTo(n);var g;f?(g=s.css("height"),a.css({height:g,"line-height":g}),r.css({height:g,"line-height":g}),t(window).resize(function(){g=s.css("height"),a.css({height:g,"line-height":g}),r.css({height:g,"line-height":g})})):(g=s.css("width"),r.css({width:g}),t(window).resize(function(){g=s.css("width"),r.css({width:g})}))}setTimeout(function(){var t,e,c,g,_;f?n.css("height",l+"%"):n.css("width",l+"%");var x=setInterval(function(){f?(c=n.height(),g=s.height()):(c=n.width(),g=s.width()),t=Math.round(100*c/g),e=Math.round(h+c/g*(d-h)),t>=l&&(t=l,e=o,u(n),clearInterval(x)),"none"!==i.display_text&&(_=i.use_percentage?i.percent_format(t):i.amount_format(e,d,h),"fill"===i.display_text?n.text(_):"center"===i.display_text&&(a.text(_),r.text(_))),n.attr("aria-valuenow",e),p(t,n)},i.refresh_speed)},i.transition_delay)};var n=t.fn.progressbar;t.fn.progressbar=function(n){return this.each(function(){var s=t(this),a=s.data("bs.progressbar"),r="object"==typeof n&&n;a&&r&&t.extend(a.options,r),a||s.data("bs.progressbar",a=new e(this,r)),a.transition()})},t.fn.progressbar.Constructor=e,t.fn.progressbar.noConflict=function(){return t.fn.progressbar=n,this}}(window.jQuery); -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/runtime/IExecutionDataAccessorGenerator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Marc R. Hoffmann - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.runtime; 13 | 14 | import org.objectweb.asm.MethodVisitor; 15 | 16 | /** 17 | * The instrumented classes need a piece of code that obtains a 18 | * boolean[] instance from the runtime. The mechanism is runtime 19 | * specific and therefore abstracted by this interface. Implementations are 20 | * provided by {@link IRuntime} implementations and are used by the 21 | * instrumentation process. 22 | */ 23 | public interface IExecutionDataAccessorGenerator { 24 | 25 | /** 26 | * This method generates the byte code required to obtain the coverage data 27 | * structure for the class with the given id. Typically the instrumentation 28 | * process will embed this code into a method that is called on class 29 | * initialization. This method can be called at any time even outside the 30 | * target VM. 31 | * 32 | * The generated code must push a boolean[] instance to the 33 | * operand stack. Except this result object the generated code must not make 34 | * any assumptions about the structure of the embedding method or class. The 35 | * generated code must not use or allocate local variables. 36 | * 37 | * @param classid 38 | * identifier of the class 39 | * @param classname 40 | * VM class name 41 | * @param probecount 42 | * probe count for this class 43 | * @param mv 44 | * code output 45 | * @return additional stack size required by the implementation, including 46 | * the instance pushed to the stack 47 | */ 48 | int generateDataAccessor(long classid, String classname, int probecount, 49 | MethodVisitor mv); 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/resources/templates/resetCoverage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 |
17 |
18 |
19 | 项目信息 20 |
21 |
22 |
23 |
24 |
25 | 26 |
27 |
28 | 29 | 34 |
35 |
36 | 37 |
38 |
39 | 40 |
41 |
42 | 45 |
46 |
47 | 48 |
49 | 50 |
51 |
52 |
53 |
54 | 55 | 56 |
57 |
58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/vector-map/jquery.vmap.sampledata.js: -------------------------------------------------------------------------------- 1 | var sample_data = {"af":"16.63","al":"11.58","dz":"158.97","ao":"85.81","ag":"1.1","ar":"351.02","am":"8.83","au":"1219.72","at":"366.26","az":"52.17","bs":"7.54","bh":"21.73","bd":"105.4","bb":"3.96","by":"52.89","be":"461.33","bz":"1.43","bj":"6.49","bt":"1.4","bo":"19.18","ba":"16.2","bw":"12.5","br":"2023.53","bn":"11.96","bg":"44.84","bf":"8.67","bi":"1.47","kh":"11.36","cm":"21.88","ca":"1563.66","cv":"1.57","cf":"2.11","td":"7.59","cl":"199.18","cn":"5745.13","co":"283.11","km":"0.56","cd":"12.6","cg":"11.88","cr":"35.02","ci":"22.38","hr":"59.92","cy":"22.75","cz":"195.23","dk":"304.56","dj":"1.14","dm":"0.38","do":"50.87","ec":"61.49","eg":"216.83","sv":"21.8","gq":"14.55","er":"2.25","ee":"19.22","et":"30.94","fj":"3.15","fi":"231.98","fr":"2555.44","ga":"12.56","gm":"1.04","ge":"11.23","de":"3305.9","gh":"18.06","gr":"305.01","gd":"0.65","gt":"40.77","gn":"4.34","gw":"0.83","gy":"2.2","ht":"6.5","hn":"15.34","hk":"226.49","hu":"132.28","is":"12.77","in":"1430.02","id":"695.06","ir":"337.9","iq":"84.14","ie":"204.14","il":"201.25","it":"2036.69","jm":"13.74","jp":"5390.9","jo":"27.13","kz":"129.76","ke":"32.42","ki":"0.15","kr":"986.26","undefined":"5.73","kw":"117.32","kg":"4.44","la":"6.34","lv":"23.39","lb":"39.15","ls":"1.8","lr":"0.98","ly":"77.91","lt":"35.73","lu":"52.43","mk":"9.58","mg":"8.33","mw":"5.04","my":"218.95","mv":"1.43","ml":"9.08","mt":"7.8","mr":"3.49","mu":"9.43","mx":"1004.04","md":"5.36","mn":"5.81","me":"3.88","ma":"91.7","mz":"10.21","mm":"35.65","na":"11.45","np":"15.11","nl":"770.31","nz":"138","ni":"6.38","ne":"5.6","ng":"206.66","no":"413.51","om":"53.78","pk":"174.79","pa":"27.2","pg":"8.81","py":"17.17","pe":"153.55","ph":"189.06","pl":"438.88","pt":"223.7","qa":"126.52","ro":"158.39","ru":"1476.91","rw":"5.69","ws":"0.55","st":"0.19","sa":"434.44","sn":"12.66","rs":"38.92","sc":"0.92","sl":"1.9","sg":"217.38","sk":"86.26","si":"46.44","sb":"0.67","za":"354.41","es":"1374.78","lk":"48.24","kn":"0.56","lc":"1","vc":"0.58","sd":"65.93","sr":"3.3","sz":"3.17","se":"444.59","ch":"522.44","sy":"59.63","tw":"426.98","tj":"5.58","tz":"22.43","th":"312.61","tl":"0.62","tg":"3.07","to":"0.3","tt":"21.2","tn":"43.86","tr":"729.05","tm":0,"ug":"17.12","ua":"136.56","ae":"239.65","gb":"2258.57","us":"14624.18","uy":"40.71","uz":"37.72","vu":"0.72","ve":"285.21","vn":"101.99","ye":"30.02","zm":"15.69","zw":"5.57"}; -------------------------------------------------------------------------------- /src/main/java/com/mangosteen/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the Eclipse Public License v1.0 5 | * which accompanies this distribution, and is available at 6 | * http://www.eclipse.org/legal/epl-v10.html 7 | * 8 | * Contributors: 9 | * Evgeny Mandrikov - initial API and implementation 10 | * 11 | *******************************************************************************/ 12 | package com.mangosteen.jacoco.core.internal.analysis.filter; 13 | 14 | import org.objectweb.asm.tree.AnnotationNode; 15 | import org.objectweb.asm.tree.MethodNode; 16 | 17 | import java.util.List; 18 | 19 | /** 20 | * Filters classes and methods annotated with 21 | * {@link java.lang.annotation.RetentionPolicy#RUNTIME runtime visible} and 22 | * {@link java.lang.annotation.RetentionPolicy#CLASS invisible} annotation whose 23 | * simple name contains Generated. 24 | */ 25 | public final class AnnotationGeneratedFilter implements IFilter { 26 | 27 | public void filter(final MethodNode methodNode, 28 | final IFilterContext context, final IFilterOutput output) { 29 | 30 | for (String annotation : context.getClassAnnotations()) { 31 | if (matches(annotation)) { 32 | output.ignore(methodNode.instructions.getFirst(), 33 | methodNode.instructions.getLast()); 34 | return; 35 | } 36 | } 37 | 38 | if (presentIn(methodNode.invisibleAnnotations) 39 | || presentIn(methodNode.visibleAnnotations)) { 40 | output.ignore(methodNode.instructions.getFirst(), 41 | methodNode.instructions.getLast()); 42 | } 43 | 44 | } 45 | 46 | private static boolean matches(final String annotation) { 47 | final String name = annotation 48 | .substring(Math.max(annotation.lastIndexOf('/'), 49 | annotation.lastIndexOf('$')) + 1); 50 | return name.contains("Generated"); 51 | } 52 | 53 | private static boolean presentIn(final List annotations) { 54 | if (annotations != null) { 55 | for (AnnotationNode annotation : annotations) { 56 | if (matches(annotation.desc)) { 57 | return true; 58 | } 59 | } 60 | } 61 | return false; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/test/java/com/mangosteen/service/ProjectServiceTest.java: -------------------------------------------------------------------------------- 1 | package com.mangosteen.service; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.mangosteen.MangosteenApplication; 5 | import com.mangosteen.model.Project; 6 | import com.mangosteen.model.ProjectConfig; 7 | import org.junit.After; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | import org.junit.runner.RunWith; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.boot.test.context.SpringBootTest; 13 | import org.springframework.test.context.junit4.SpringRunner; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * ProjectService Tester. 19 | * 20 | * @author 21 | * @version 1.0 22 | * @since
Apr 1, 2019
23 | */ 24 | @RunWith(SpringRunner.class) 25 | @SpringBootTest(classes = MangosteenApplication.class) 26 | public class ProjectServiceTest { 27 | 28 | @Autowired 29 | private ProjectService projectService; 30 | @Before 31 | public void before() throws Exception { 32 | } 33 | 34 | @After 35 | public void after() throws Exception { 36 | } 37 | 38 | /** 39 | * Method: queryAllProject() 40 | */ 41 | @Test 42 | public void testQueryAllProject() throws Exception { 43 | //TODO: Test goes here... 44 | } 45 | 46 | /** 47 | * Method: saveProject(Project project) 48 | */ 49 | @Test 50 | public void testSaveProject() throws Exception { 51 | //TODO: Test goes here... 52 | } 53 | 54 | /** 55 | * Method: queryProjectByName(String projectName) 56 | */ 57 | @Test 58 | public void testQueryProjectByName() throws Exception { 59 | Project project = projectService.queryProjectByName("123"); 60 | List projectConfigs= JSON.parseArray(project.getProjectConfig(), ProjectConfig.class); 61 | System.out.printf(projectConfigs.get(0).toString()); 62 | 63 | } 64 | 65 | /** 66 | * Method: saveProjectExecuteRecords(ExecuteRecords executeRecords) 67 | */ 68 | @Test 69 | public void testSaveProjectExecuteRecords() throws Exception { 70 | //TODO: Test goes here... 71 | } 72 | 73 | /** 74 | * Method: queryExecuteRecordByProjectName(String projectName) 75 | */ 76 | @Test 77 | public void testQueryExecuteRecordByProjectName() throws Exception { 78 | //TODO: Test goes here... 79 | } 80 | 81 | 82 | } 83 | --------------------------------------------------------------------------------