From 39631054c58df5841ea268b7002b820ec55f6e0a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 3 Dec 2015 16:22:11 +0100 Subject: restructure Dokka build to use Gradle for everything except for the Maven plugin --- core/build.gradle | 103 + core/gradlew | 164 + core/gradlew.bat | 90 + core/settings.gradle | 2 + .../main/kotlin/Analysis/AnalysisEnvironment.kt | 210 + .../main/kotlin/Analysis/CoreProjectFileIndex.kt | 550 ++ core/src/main/kotlin/Formats/FormatDescriptor.kt | 12 + core/src/main/kotlin/Formats/FormatService.kt | 20 + core/src/main/kotlin/Formats/HtmlFormatService.kt | 169 + .../src/main/kotlin/Formats/HtmlTemplateService.kt | 34 + .../src/main/kotlin/Formats/JekyllFormatService.kt | 22 + .../kotlin/Formats/KotlinWebsiteFormatService.kt | 121 + .../main/kotlin/Formats/MarkdownFormatService.kt | 117 + core/src/main/kotlin/Formats/OutlineService.kt | 29 + core/src/main/kotlin/Formats/StandardFormats.kt | 38 + .../main/kotlin/Formats/StructuredFormatService.kt | 367 ++ core/src/main/kotlin/Formats/YamlOutlineService.kt | 24 + .../src/main/kotlin/Generation/ConsoleGenerator.kt | 42 + core/src/main/kotlin/Generation/FileGenerator.kt | 57 + core/src/main/kotlin/Generation/Generator.kt | 19 + .../kotlin/Java/JavaPsiDocumentationBuilder.kt | 266 + core/src/main/kotlin/Java/JavadocParser.kt | 170 + core/src/main/kotlin/Kotlin/ContentBuilder.kt | 132 + .../main/kotlin/Kotlin/DeclarationLinkResolver.kt | 43 + .../kotlin/Kotlin/DescriptorDocumentationParser.kt | 199 + .../src/main/kotlin/Kotlin/DocumentationBuilder.kt | 653 +++ .../Kotlin/KotlinAsJavaDocumentationBuilder.kt | 64 + .../main/kotlin/Kotlin/KotlinLanguageService.kt | 409 ++ .../main/kotlin/Languages/JavaLanguageService.kt | 162 + core/src/main/kotlin/Languages/LanguageService.kt | 41 + .../kotlin/Locations/FoldersLocationService.kt | 29 + core/src/main/kotlin/Locations/LocationService.kt | 78 + .../Locations/SingleFolderLocationService.kt | 19 + core/src/main/kotlin/Markdown/MarkdownProcessor.kt | 50 + core/src/main/kotlin/Model/Content.kt | 231 + core/src/main/kotlin/Model/DocumentationNode.kt | 162 + .../main/kotlin/Model/DocumentationReference.kt | 61 + core/src/main/kotlin/Model/PackageDocs.kt | 60 + core/src/main/kotlin/Model/SourceLinks.kt | 56 + core/src/main/kotlin/Utilities/DokkaModule.kt | 73 + core/src/main/kotlin/Utilities/Html.kt | 8 + core/src/main/kotlin/Utilities/Path.kt | 5 + core/src/main/kotlin/Utilities/ServiceLocator.kt | 78 + core/src/main/kotlin/ant/dokka.kt | 108 + core/src/main/kotlin/javadoc/docbase.kt | 501 ++ core/src/main/kotlin/javadoc/dokka-adapters.kt | 30 + core/src/main/kotlin/javadoc/reporter.kt | 34 + core/src/main/kotlin/javadoc/source-position.kt | 18 + core/src/main/kotlin/javadoc/tags.kt | 214 + core/src/main/kotlin/main.kt | 262 + core/src/main/resources/META-INF/MANIFEST.MF | 4 + core/src/main/resources/dokka-antlib.xml | 3 + .../resources/dokka/format/html-as-java.properties | 2 + .../main/resources/dokka/format/html.properties | 2 + .../main/resources/dokka/format/javadoc.properties | 1 + .../main/resources/dokka/format/jekyll.properties | 2 + .../dokka/format/kotlin-website.properties | 2 + .../resources/dokka/format/markdown.properties | 2 + .../resources/dokka/generator/default.properties | 2 + .../resources/dokka/generator/javadoc.properties | 2 + .../main/resources/dokka/language/java.properties | 1 + .../resources/dokka/language/kotlin.properties | 1 + .../main/resources/dokka/outline/yaml.properties | 1 + core/src/main/resources/dokka/styles/style.css | 280 + core/src/main/resources/format/javadoc.properties | 1 + core/src/test/kotlin/TestAPI.kt | 214 + core/src/test/kotlin/format/HtmlFormatTest.kt | 157 + core/src/test/kotlin/format/MarkdownFormatTest.kt | 218 + core/src/test/kotlin/format/PackageDocsTest.kt | 18 + core/src/test/kotlin/javadoc/JavadocTest.kt | 44 + core/src/test/kotlin/markdown/ParserTest.kt | 142 + core/src/test/kotlin/model/ClassTest.kt | 275 + core/src/test/kotlin/model/CommentTest.kt | 153 + core/src/test/kotlin/model/FunctionTest.kt | 227 + core/src/test/kotlin/model/JavaTest.kt | 197 + core/src/test/kotlin/model/KotlinAsJavaTest.kt | 40 + core/src/test/kotlin/model/LinkTest.kt | 48 + core/src/test/kotlin/model/PackageTest.kt | 86 + core/src/test/kotlin/model/PropertyTest.kt | 103 + core/testdata/classes/annotatedClass.kt | 1 + .../annotatedClassWithAnnotationParameters.kt | 1 + core/testdata/classes/classWithCompanionObject.kt | 7 + core/testdata/classes/classWithConstructor.kt | 1 + core/testdata/classes/classWithFunction.kt | 4 + core/testdata/classes/classWithProperty.kt | 3 + core/testdata/classes/companionObjectExtension.kt | 10 + core/testdata/classes/dataClass.kt | 1 + core/testdata/classes/emptyClass.kt | 3 + core/testdata/classes/emptyObject.kt | 3 + core/testdata/classes/genericClass.kt | 3 + core/testdata/classes/indirectOverride.kt | 9 + core/testdata/classes/innerClass.kt | 5 + core/testdata/classes/javaAnnotationClass.kt | 5 + core/testdata/classes/notOpenClass.kt | 7 + core/testdata/classes/sealedClass.kt | 1 + core/testdata/classes/secondaryConstructor.kt | 5 + core/testdata/comments/directive.kt | 35 + core/testdata/comments/emptyDoc.kt | 1 + core/testdata/comments/emptyDocButComment.kt | 2 + core/testdata/comments/emptySection.kt | 6 + core/testdata/comments/multilineDoc.kt | 7 + core/testdata/comments/multilineDocWithComment.kt | 8 + core/testdata/comments/multilineSection.kt | 7 + core/testdata/comments/oneLineDoc.kt | 2 + core/testdata/comments/oneLineDocWithComment.kt | 3 + core/testdata/comments/oneLineDocWithEmptyLine.kt | 3 + core/testdata/comments/section1.kt | 5 + core/testdata/comments/section2.kt | 6 + core/testdata/format/accessor.kt | 5 + core/testdata/format/accessor.md | 18 + core/testdata/format/annotatedTypeParameter.kt | 2 + core/testdata/format/annotatedTypeParameter.md | 8 + core/testdata/format/annotationClass.kt | 1 + core/testdata/format/annotationClass.md | 14 + core/testdata/format/annotationParams.kt | 1 + core/testdata/format/annotationParams.md | 8 + core/testdata/format/annotations.kt | 6 + core/testdata/format/annotations.md | 26 + core/testdata/format/bracket.html | 14 + core/testdata/format/bracket.kt | 4 + core/testdata/format/brokenLink.html | 14 + core/testdata/format/brokenLink.kt | 4 + core/testdata/format/classWithCompanionObject.html | 46 + core/testdata/format/classWithCompanionObject.kt | 7 + core/testdata/format/classWithCompanionObject.md | 26 + core/testdata/format/codeSpan.html | 14 + core/testdata/format/codeSpan.kt | 4 + core/testdata/format/companionObjectExtension.kt | 10 + core/testdata/format/companionObjectExtension.md | 23 + .../crossLanguage/kotlinExtendsJava/Bar.html | 37 + .../format/crossLanguage/kotlinExtendsJava/Bar.kt | 6 + .../crossLanguage/kotlinExtendsJava/test/Foo.java | 6 + core/testdata/format/deprecated.class.html | 41 + core/testdata/format/deprecated.kt | 5 + core/testdata/format/deprecated.package.html | 43 + core/testdata/format/emptyDescription.kt | 5 + core/testdata/format/emptyDescription.md | 11 + core/testdata/format/entity.html | 26 + core/testdata/format/entity.kt | 4 + core/testdata/format/enumClass.kt | 4 + core/testdata/format/enumClass.md | 15 + core/testdata/format/enumClass.value.md | 8 + core/testdata/format/extensionFunctionParameter.kt | 1 + core/testdata/format/extensionFunctionParameter.md | 8 + core/testdata/format/extensions.class.md | 16 + core/testdata/format/extensions.kt | 19 + core/testdata/format/extensions.package.md | 11 + .../format/functionWithDefaultParameter.kt | 1 + .../format/functionWithDefaultParameter.md | 8 + core/testdata/format/htmlEscaping.html | 14 + core/testdata/format/htmlEscaping.kt | 4 + core/testdata/format/inheritedExtensions.kt | 11 + core/testdata/format/inheritedExtensions.md | 21 + core/testdata/format/inheritedMembers.kt | 12 + core/testdata/format/inheritedMembers.md | 38 + core/testdata/format/javaCodeInParam.java | 5 + core/testdata/format/javaCodeInParam.md | 21 + core/testdata/format/javaCodeLiteralTags.java | 6 + core/testdata/format/javaCodeLiteralTags.md | 23 + core/testdata/format/javaDeprecated.html | 14 + core/testdata/format/javaDeprecated.java | 5 + core/testdata/format/javaLinkTag.html | 36 + core/testdata/format/javaLinkTag.java | 6 + core/testdata/format/javaLinkTagWithLabel.html | 36 + core/testdata/format/javaLinkTagWithLabel.java | 6 + core/testdata/format/javaSeeTag.html | 38 + core/testdata/format/javaSeeTag.java | 6 + core/testdata/format/javaSpaceInAuthor.java | 5 + core/testdata/format/javaSpaceInAuthor.md | 19 + core/testdata/format/javaSupertype.html | 35 + core/testdata/format/javaSupertype.java | 8 + core/testdata/format/javadocHtml.java | 14 + core/testdata/format/javadocHtml.md | 27 + core/testdata/format/javadocOrderedList.java | 8 + core/testdata/format/javadocOrderedList.md | 20 + core/testdata/format/linkWithLabel.html | 37 + core/testdata/format/linkWithLabel.kt | 6 + core/testdata/format/nullability.kt | 5 + core/testdata/format/nullability.md | 20 + core/testdata/format/operatorOverloading.kt | 3 + core/testdata/format/operatorOverloading.md | 8 + core/testdata/format/orderedList.html | 30 + core/testdata/format/orderedList.kt | 8 + core/testdata/format/overloads.html | 23 + core/testdata/format/overloads.kt | 5 + core/testdata/format/overloadsWithDescription.html | 21 + core/testdata/format/overloadsWithDescription.kt | 15 + .../format/overloadsWithDifferentDescriptions.html | 30 + .../format/overloadsWithDifferentDescriptions.kt | 15 + core/testdata/format/overridingFunction.kt | 7 + core/testdata/format/overridingFunction.md | 9 + core/testdata/format/paramTag.kt | 6 + core/testdata/format/paramTag.md | 14 + core/testdata/format/parameterAnchor.html | 17 + core/testdata/format/parameterAnchor.kt | 6 + core/testdata/format/parenthesis.html | 14 + core/testdata/format/parenthesis.kt | 4 + core/testdata/format/propertyVar.kt | 1 + core/testdata/format/propertyVar.md | 8 + core/testdata/format/reifiedTypeParameter.kt | 3 + core/testdata/format/reifiedTypeParameter.md | 8 + core/testdata/format/see.html | 28 + core/testdata/format/see.kt | 12 + core/testdata/format/starProjection.kt | 3 + core/testdata/format/starProjection.md | 8 + core/testdata/format/summarizeSignatures.kt | 20 + core/testdata/format/summarizeSignatures.md | 23 + .../testdata/format/summarizeSignaturesProperty.kt | 20 + .../testdata/format/summarizeSignaturesProperty.md | 23 + core/testdata/format/throwsTag.kt | 5 + core/testdata/format/throwsTag.md | 13 + core/testdata/format/tripleBackticks.html | 16 + core/testdata/format/tripleBackticks.kt | 7 + core/testdata/format/typeLink.html | 24 + core/testdata/format/typeLink.kt | 5 + core/testdata/format/typeParameterBounds.kt | 6 + core/testdata/format/typeParameterBounds.md | 11 + core/testdata/format/typeParameterVariance.kt | 2 + core/testdata/format/typeParameterVariance.md | 14 + core/testdata/format/typeProjectionVariance.kt | 1 + core/testdata/format/typeProjectionVariance.md | 8 + core/testdata/format/varargsFunction.kt | 1 + core/testdata/format/varargsFunction.md | 8 + core/testdata/functions/annotatedFunction.kt | 2 + .../annotatedFunctionWithAnnotationParameters.kt | 7 + core/testdata/functions/function.kt | 5 + .../functions/functionWithAnnotatedParam.kt | 7 + .../functions/functionWithDefaultParameter.kt | 1 + .../functions/functionWithNoinlineParam.kt | 2 + .../functionWithNotDocumentedAnnotation.kt | 2 + core/testdata/functions/functionWithParams.kt | 8 + core/testdata/functions/functionWithReceiver.kt | 11 + core/testdata/functions/genericFunction.kt | 5 + .../functions/genericFunctionWithConstraints.kt | 6 + core/testdata/functions/inlineFunction.kt | 2 + core/testdata/java/annotatedAnnotation.java | 6 + core/testdata/java/arrayType.java | 5 + core/testdata/java/constructors.java | 5 + core/testdata/java/deprecation.java | 6 + core/testdata/java/enumValues.java | 3 + core/testdata/java/field.java | 4 + core/testdata/java/inheritorLinks.java | 7 + core/testdata/java/innerClass.java | 4 + core/testdata/java/javaLangObject.java | 3 + core/testdata/java/member.java | 11 + core/testdata/java/memberWithModifiers.java | 12 + core/testdata/java/staticMethod.java | 4 + core/testdata/java/superClass.java | 2 + core/testdata/java/typeParameter.java | 3 + core/testdata/java/varargs.java | 3 + core/testdata/javadoc/obj.kt | 7 + core/testdata/javadoc/types.kt | 4 + core/testdata/links/linkToJDK.kt | 0 core/testdata/links/linkToMember.kt | 6 + core/testdata/links/linkToParam.kt | 5 + core/testdata/links/linkToQualifiedMember.kt | 6 + core/testdata/links/linkToSelf.kt | 6 + core/testdata/markdown/spec.txt | 6150 ++++++++++++++++++++ core/testdata/packagedocs/stdlib.md | 11 + core/testdata/packages/dottedNamePackage.kt | 1 + core/testdata/packages/rootPackage.kt | 0 core/testdata/packages/simpleNamePackage.kt | 1 + core/testdata/packages/simpleNamePackage2.kt | 1 + core/testdata/properties/annotatedProperty.kt | 1 + core/testdata/properties/propertyOverride.kt | 7 + core/testdata/properties/propertyWithReceiver.kt | 2 + core/testdata/properties/valueProperty.kt | 1 + .../testdata/properties/valuePropertyWithGetter.kt | 2 + core/testdata/properties/variableProperty.kt | 1 + .../properties/variablePropertyWithAccessors.kt | 4 + 270 files changed, 16689 insertions(+) create mode 100644 core/build.gradle create mode 100755 core/gradlew create mode 100644 core/gradlew.bat create mode 100644 core/settings.gradle create mode 100644 core/src/main/kotlin/Analysis/AnalysisEnvironment.kt create mode 100644 core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt create mode 100644 core/src/main/kotlin/Formats/FormatDescriptor.kt create mode 100644 core/src/main/kotlin/Formats/FormatService.kt create mode 100644 core/src/main/kotlin/Formats/HtmlFormatService.kt create mode 100644 core/src/main/kotlin/Formats/HtmlTemplateService.kt create mode 100644 core/src/main/kotlin/Formats/JekyllFormatService.kt create mode 100644 core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt create mode 100644 core/src/main/kotlin/Formats/MarkdownFormatService.kt create mode 100644 core/src/main/kotlin/Formats/OutlineService.kt create mode 100644 core/src/main/kotlin/Formats/StandardFormats.kt create mode 100644 core/src/main/kotlin/Formats/StructuredFormatService.kt create mode 100644 core/src/main/kotlin/Formats/YamlOutlineService.kt create mode 100644 core/src/main/kotlin/Generation/ConsoleGenerator.kt create mode 100644 core/src/main/kotlin/Generation/FileGenerator.kt create mode 100644 core/src/main/kotlin/Generation/Generator.kt create mode 100644 core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt create mode 100644 core/src/main/kotlin/Java/JavadocParser.kt create mode 100644 core/src/main/kotlin/Kotlin/ContentBuilder.kt create mode 100644 core/src/main/kotlin/Kotlin/DeclarationLinkResolver.kt create mode 100644 core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt create mode 100644 core/src/main/kotlin/Kotlin/DocumentationBuilder.kt create mode 100644 core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt create mode 100644 core/src/main/kotlin/Kotlin/KotlinLanguageService.kt create mode 100644 core/src/main/kotlin/Languages/JavaLanguageService.kt create mode 100644 core/src/main/kotlin/Languages/LanguageService.kt create mode 100644 core/src/main/kotlin/Locations/FoldersLocationService.kt create mode 100644 core/src/main/kotlin/Locations/LocationService.kt create mode 100644 core/src/main/kotlin/Locations/SingleFolderLocationService.kt create mode 100644 core/src/main/kotlin/Markdown/MarkdownProcessor.kt create mode 100644 core/src/main/kotlin/Model/Content.kt create mode 100644 core/src/main/kotlin/Model/DocumentationNode.kt create mode 100644 core/src/main/kotlin/Model/DocumentationReference.kt create mode 100644 core/src/main/kotlin/Model/PackageDocs.kt create mode 100644 core/src/main/kotlin/Model/SourceLinks.kt create mode 100644 core/src/main/kotlin/Utilities/DokkaModule.kt create mode 100644 core/src/main/kotlin/Utilities/Html.kt create mode 100644 core/src/main/kotlin/Utilities/Path.kt create mode 100644 core/src/main/kotlin/Utilities/ServiceLocator.kt create mode 100644 core/src/main/kotlin/ant/dokka.kt create mode 100644 core/src/main/kotlin/javadoc/docbase.kt create mode 100644 core/src/main/kotlin/javadoc/dokka-adapters.kt create mode 100644 core/src/main/kotlin/javadoc/reporter.kt create mode 100644 core/src/main/kotlin/javadoc/source-position.kt create mode 100644 core/src/main/kotlin/javadoc/tags.kt create mode 100644 core/src/main/kotlin/main.kt create mode 100644 core/src/main/resources/META-INF/MANIFEST.MF create mode 100644 core/src/main/resources/dokka-antlib.xml create mode 100644 core/src/main/resources/dokka/format/html-as-java.properties create mode 100644 core/src/main/resources/dokka/format/html.properties create mode 100644 core/src/main/resources/dokka/format/javadoc.properties create mode 100644 core/src/main/resources/dokka/format/jekyll.properties create mode 100644 core/src/main/resources/dokka/format/kotlin-website.properties create mode 100644 core/src/main/resources/dokka/format/markdown.properties create mode 100644 core/src/main/resources/dokka/generator/default.properties create mode 100644 core/src/main/resources/dokka/generator/javadoc.properties create mode 100644 core/src/main/resources/dokka/language/java.properties create mode 100644 core/src/main/resources/dokka/language/kotlin.properties create mode 100644 core/src/main/resources/dokka/outline/yaml.properties create mode 100644 core/src/main/resources/dokka/styles/style.css create mode 100644 core/src/main/resources/format/javadoc.properties create mode 100644 core/src/test/kotlin/TestAPI.kt create mode 100644 core/src/test/kotlin/format/HtmlFormatTest.kt create mode 100644 core/src/test/kotlin/format/MarkdownFormatTest.kt create mode 100644 core/src/test/kotlin/format/PackageDocsTest.kt create mode 100644 core/src/test/kotlin/javadoc/JavadocTest.kt create mode 100644 core/src/test/kotlin/markdown/ParserTest.kt create mode 100644 core/src/test/kotlin/model/ClassTest.kt create mode 100644 core/src/test/kotlin/model/CommentTest.kt create mode 100644 core/src/test/kotlin/model/FunctionTest.kt create mode 100644 core/src/test/kotlin/model/JavaTest.kt create mode 100644 core/src/test/kotlin/model/KotlinAsJavaTest.kt create mode 100644 core/src/test/kotlin/model/LinkTest.kt create mode 100644 core/src/test/kotlin/model/PackageTest.kt create mode 100644 core/src/test/kotlin/model/PropertyTest.kt create mode 100644 core/testdata/classes/annotatedClass.kt create mode 100644 core/testdata/classes/annotatedClassWithAnnotationParameters.kt create mode 100644 core/testdata/classes/classWithCompanionObject.kt create mode 100644 core/testdata/classes/classWithConstructor.kt create mode 100644 core/testdata/classes/classWithFunction.kt create mode 100644 core/testdata/classes/classWithProperty.kt create mode 100644 core/testdata/classes/companionObjectExtension.kt create mode 100644 core/testdata/classes/dataClass.kt create mode 100644 core/testdata/classes/emptyClass.kt create mode 100644 core/testdata/classes/emptyObject.kt create mode 100644 core/testdata/classes/genericClass.kt create mode 100644 core/testdata/classes/indirectOverride.kt create mode 100644 core/testdata/classes/innerClass.kt create mode 100644 core/testdata/classes/javaAnnotationClass.kt create mode 100644 core/testdata/classes/notOpenClass.kt create mode 100644 core/testdata/classes/sealedClass.kt create mode 100644 core/testdata/classes/secondaryConstructor.kt create mode 100644 core/testdata/comments/directive.kt create mode 100644 core/testdata/comments/emptyDoc.kt create mode 100644 core/testdata/comments/emptyDocButComment.kt create mode 100644 core/testdata/comments/emptySection.kt create mode 100644 core/testdata/comments/multilineDoc.kt create mode 100644 core/testdata/comments/multilineDocWithComment.kt create mode 100644 core/testdata/comments/multilineSection.kt create mode 100644 core/testdata/comments/oneLineDoc.kt create mode 100644 core/testdata/comments/oneLineDocWithComment.kt create mode 100644 core/testdata/comments/oneLineDocWithEmptyLine.kt create mode 100644 core/testdata/comments/section1.kt create mode 100644 core/testdata/comments/section2.kt create mode 100644 core/testdata/format/accessor.kt create mode 100644 core/testdata/format/accessor.md create mode 100644 core/testdata/format/annotatedTypeParameter.kt create mode 100644 core/testdata/format/annotatedTypeParameter.md create mode 100644 core/testdata/format/annotationClass.kt create mode 100644 core/testdata/format/annotationClass.md create mode 100644 core/testdata/format/annotationParams.kt create mode 100644 core/testdata/format/annotationParams.md create mode 100644 core/testdata/format/annotations.kt create mode 100644 core/testdata/format/annotations.md create mode 100644 core/testdata/format/bracket.html create mode 100644 core/testdata/format/bracket.kt create mode 100644 core/testdata/format/brokenLink.html create mode 100644 core/testdata/format/brokenLink.kt create mode 100644 core/testdata/format/classWithCompanionObject.html create mode 100644 core/testdata/format/classWithCompanionObject.kt create mode 100644 core/testdata/format/classWithCompanionObject.md create mode 100644 core/testdata/format/codeSpan.html create mode 100644 core/testdata/format/codeSpan.kt create mode 100644 core/testdata/format/companionObjectExtension.kt create mode 100644 core/testdata/format/companionObjectExtension.md create mode 100644 core/testdata/format/crossLanguage/kotlinExtendsJava/Bar.html create mode 100644 core/testdata/format/crossLanguage/kotlinExtendsJava/Bar.kt create mode 100644 core/testdata/format/crossLanguage/kotlinExtendsJava/test/Foo.java create mode 100644 core/testdata/format/deprecated.class.html create mode 100644 core/testdata/format/deprecated.kt create mode 100644 core/testdata/format/deprecated.package.html create mode 100644 core/testdata/format/emptyDescription.kt create mode 100644 core/testdata/format/emptyDescription.md create mode 100644 core/testdata/format/entity.html create mode 100644 core/testdata/format/entity.kt create mode 100644 core/testdata/format/enumClass.kt create mode 100644 core/testdata/format/enumClass.md create mode 100644 core/testdata/format/enumClass.value.md create mode 100644 core/testdata/format/extensionFunctionParameter.kt create mode 100644 core/testdata/format/extensionFunctionParameter.md create mode 100644 core/testdata/format/extensions.class.md create mode 100644 core/testdata/format/extensions.kt create mode 100644 core/testdata/format/extensions.package.md create mode 100644 core/testdata/format/functionWithDefaultParameter.kt create mode 100644 core/testdata/format/functionWithDefaultParameter.md create mode 100644 core/testdata/format/htmlEscaping.html create mode 100644 core/testdata/format/htmlEscaping.kt create mode 100644 core/testdata/format/inheritedExtensions.kt create mode 100644 core/testdata/format/inheritedExtensions.md create mode 100644 core/testdata/format/inheritedMembers.kt create mode 100644 core/testdata/format/inheritedMembers.md create mode 100644 core/testdata/format/javaCodeInParam.java create mode 100644 core/testdata/format/javaCodeInParam.md create mode 100644 core/testdata/format/javaCodeLiteralTags.java create mode 100644 core/testdata/format/javaCodeLiteralTags.md create mode 100644 core/testdata/format/javaDeprecated.html create mode 100644 core/testdata/format/javaDeprecated.java create mode 100644 core/testdata/format/javaLinkTag.html create mode 100644 core/testdata/format/javaLinkTag.java create mode 100644 core/testdata/format/javaLinkTagWithLabel.html create mode 100644 core/testdata/format/javaLinkTagWithLabel.java create mode 100644 core/testdata/format/javaSeeTag.html create mode 100644 core/testdata/format/javaSeeTag.java create mode 100644 core/testdata/format/javaSpaceInAuthor.java create mode 100644 core/testdata/format/javaSpaceInAuthor.md create mode 100644 core/testdata/format/javaSupertype.html create mode 100644 core/testdata/format/javaSupertype.java create mode 100644 core/testdata/format/javadocHtml.java create mode 100644 core/testdata/format/javadocHtml.md create mode 100644 core/testdata/format/javadocOrderedList.java create mode 100644 core/testdata/format/javadocOrderedList.md create mode 100644 core/testdata/format/linkWithLabel.html create mode 100644 core/testdata/format/linkWithLabel.kt create mode 100644 core/testdata/format/nullability.kt create mode 100644 core/testdata/format/nullability.md create mode 100644 core/testdata/format/operatorOverloading.kt create mode 100644 core/testdata/format/operatorOverloading.md create mode 100644 core/testdata/format/orderedList.html create mode 100644 core/testdata/format/orderedList.kt create mode 100644 core/testdata/format/overloads.html create mode 100644 core/testdata/format/overloads.kt create mode 100644 core/testdata/format/overloadsWithDescription.html create mode 100644 core/testdata/format/overloadsWithDescription.kt create mode 100644 core/testdata/format/overloadsWithDifferentDescriptions.html create mode 100644 core/testdata/format/overloadsWithDifferentDescriptions.kt create mode 100644 core/testdata/format/overridingFunction.kt create mode 100644 core/testdata/format/overridingFunction.md create mode 100644 core/testdata/format/paramTag.kt create mode 100644 core/testdata/format/paramTag.md create mode 100644 core/testdata/format/parameterAnchor.html create mode 100644 core/testdata/format/parameterAnchor.kt create mode 100644 core/testdata/format/parenthesis.html create mode 100644 core/testdata/format/parenthesis.kt create mode 100644 core/testdata/format/propertyVar.kt create mode 100644 core/testdata/format/propertyVar.md create mode 100644 core/testdata/format/reifiedTypeParameter.kt create mode 100644 core/testdata/format/reifiedTypeParameter.md create mode 100644 core/testdata/format/see.html create mode 100644 core/testdata/format/see.kt create mode 100644 core/testdata/format/starProjection.kt create mode 100644 core/testdata/format/starProjection.md create mode 100644 core/testdata/format/summarizeSignatures.kt create mode 100644 core/testdata/format/summarizeSignatures.md create mode 100644 core/testdata/format/summarizeSignaturesProperty.kt create mode 100644 core/testdata/format/summarizeSignaturesProperty.md create mode 100644 core/testdata/format/throwsTag.kt create mode 100644 core/testdata/format/throwsTag.md create mode 100644 core/testdata/format/tripleBackticks.html create mode 100644 core/testdata/format/tripleBackticks.kt create mode 100644 core/testdata/format/typeLink.html create mode 100644 core/testdata/format/typeLink.kt create mode 100644 core/testdata/format/typeParameterBounds.kt create mode 100644 core/testdata/format/typeParameterBounds.md create mode 100644 core/testdata/format/typeParameterVariance.kt create mode 100644 core/testdata/format/typeParameterVariance.md create mode 100644 core/testdata/format/typeProjectionVariance.kt create mode 100644 core/testdata/format/typeProjectionVariance.md create mode 100644 core/testdata/format/varargsFunction.kt create mode 100644 core/testdata/format/varargsFunction.md create mode 100644 core/testdata/functions/annotatedFunction.kt create mode 100644 core/testdata/functions/annotatedFunctionWithAnnotationParameters.kt create mode 100644 core/testdata/functions/function.kt create mode 100644 core/testdata/functions/functionWithAnnotatedParam.kt create mode 100644 core/testdata/functions/functionWithDefaultParameter.kt create mode 100644 core/testdata/functions/functionWithNoinlineParam.kt create mode 100644 core/testdata/functions/functionWithNotDocumentedAnnotation.kt create mode 100644 core/testdata/functions/functionWithParams.kt create mode 100644 core/testdata/functions/functionWithReceiver.kt create mode 100644 core/testdata/functions/genericFunction.kt create mode 100644 core/testdata/functions/genericFunctionWithConstraints.kt create mode 100644 core/testdata/functions/inlineFunction.kt create mode 100644 core/testdata/java/annotatedAnnotation.java create mode 100644 core/testdata/java/arrayType.java create mode 100644 core/testdata/java/constructors.java create mode 100644 core/testdata/java/deprecation.java create mode 100644 core/testdata/java/enumValues.java create mode 100644 core/testdata/java/field.java create mode 100644 core/testdata/java/inheritorLinks.java create mode 100644 core/testdata/java/innerClass.java create mode 100644 core/testdata/java/javaLangObject.java create mode 100644 core/testdata/java/member.java create mode 100644 core/testdata/java/memberWithModifiers.java create mode 100644 core/testdata/java/staticMethod.java create mode 100644 core/testdata/java/superClass.java create mode 100644 core/testdata/java/typeParameter.java create mode 100644 core/testdata/java/varargs.java create mode 100644 core/testdata/javadoc/obj.kt create mode 100644 core/testdata/javadoc/types.kt create mode 100644 core/testdata/links/linkToJDK.kt create mode 100644 core/testdata/links/linkToMember.kt create mode 100644 core/testdata/links/linkToParam.kt create mode 100644 core/testdata/links/linkToQualifiedMember.kt create mode 100644 core/testdata/links/linkToSelf.kt create mode 100644 core/testdata/markdown/spec.txt create mode 100644 core/testdata/packagedocs/stdlib.md create mode 100644 core/testdata/packages/dottedNamePackage.kt create mode 100644 core/testdata/packages/rootPackage.kt create mode 100644 core/testdata/packages/simpleNamePackage.kt create mode 100644 core/testdata/packages/simpleNamePackage2.kt create mode 100644 core/testdata/properties/annotatedProperty.kt create mode 100644 core/testdata/properties/propertyOverride.kt create mode 100644 core/testdata/properties/propertyWithReceiver.kt create mode 100644 core/testdata/properties/valueProperty.kt create mode 100644 core/testdata/properties/valuePropertyWithGetter.kt create mode 100644 core/testdata/properties/variableProperty.kt create mode 100644 core/testdata/properties/variablePropertyWithAccessors.kt (limited to 'core') diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 00000000..49d6d4d6 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,103 @@ +import javax.tools.ToolProvider + +group 'org.jetbrains.dokka' +version dokka_version + +buildscript { + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.2' + } + repositories { + jcenter() + } +} + +apply plugin: 'java' +apply plugin: 'kotlin' +apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'maven-publish' +apply plugin: 'com.jfrog.bintray' + +sourceCompatibility = 1.5 + +repositories { + mavenCentral() +} + +configurations { + provided +} + +dependencies { + compile "com.google.inject:guice:4.0" + compile "com.github.spullara.cli-parser:cli-parser:1.1.1" + compile "org.jsoup:jsoup:1.8.3" + + compile files("../lib/intellij-core-analysis.jar") + compile files("../lib/kotlin-for-upsource.jar") + compile files("../lib/markdown.jar") + compile files("../lib/picocontainer.jar") + + provided files(((URLClassLoader) ToolProvider.getSystemToolClassLoader()).getURLs().findAll { it.path.endsWith("jar") }) + provided "org.apache.ant:ant:1.9.6" + + runtime "org.fusesource.jansi:jansi:1.11" + + runtime files("../lib/trove4j.jar") + runtime files("../lib/jdom.jar") + runtime files("../lib/protobuf-2.5.0-lite.jar") + runtime files("../lib/asm-all.jar") + runtime files("../lib/jps-model.jar") + + testCompile group: 'junit', name: 'junit', version: '4.11' +} + +tasks.withType(AbstractCompile) { + classpath += configurations.provided +} + +tasks.withType(Test) { + classpath += configurations.provided +} + +jar { + manifest { + attributes "Implementation-Title": "Dokka Kotlin Documentation tool" + attributes "Implementation-Version": version + attributes "Main-Class": "org.jetbrains.dokka.MainKt" + } +} + +shadowJar { + baseName = 'dokka-fatjar' + classifier = '' +} + +publishing { + publications { + shadow(MavenPublication) { + from components.shadow + artifactId = 'dokka-fatjar' + } + } +} + +bintray { + user = System.getenv('BINTRAY_USER') + key = System.getenv('BINTRAY_KEY') + + pkg { + repo = 'dokka' + name = 'dokka' + userOrg = 'kotlin' + desc = 'Dokka, the Kotlin documentation tool' + vcsUrl = 'https://github.com/kotlin/dokka.git' + licenses = ['Apache-2.0'] + version { + name = dokka_version + } + } + + publications = ['shadow'] +} diff --git a/core/gradlew b/core/gradlew new file mode 100755 index 00000000..91a7e269 --- /dev/null +++ b/core/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/core/gradlew.bat b/core/gradlew.bat new file mode 100644 index 00000000..8a0b282a --- /dev/null +++ b/core/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core/settings.gradle b/core/settings.gradle new file mode 100644 index 00000000..17bdad4c --- /dev/null +++ b/core/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'core' + diff --git a/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt b/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt new file mode 100644 index 00000000..a5e35a0e --- /dev/null +++ b/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt @@ -0,0 +1,210 @@ +package org.jetbrains.dokka + +import com.intellij.core.CoreApplicationEnvironment +import com.intellij.core.CoreModuleManager +import com.intellij.mock.MockComponentManager +import com.intellij.openapi.Disposable +import com.intellij.openapi.extensions.Extensions +import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.OrderEnumerationHandler +import com.intellij.openapi.roots.ProjectFileIndex +import com.intellij.openapi.roots.ProjectRootManager +import com.intellij.openapi.util.Disposer +import com.intellij.psi.PsiElement +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analyzer.AnalysisResult +import org.jetbrains.kotlin.analyzer.ModuleContent +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.analyzer.ResolverForModule +import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys +import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot +import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot +import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots +import org.jetbrains.kotlin.config.CommonConfigurationKeys +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.ContentRoot +import org.jetbrains.kotlin.config.KotlinSourceRoot +import org.jetbrains.kotlin.container.getService +import org.jetbrains.kotlin.context.ProjectContext +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.KotlinCacheService +import org.jetbrains.kotlin.idea.caches.resolve.KotlinOutOfBlockCompletionModificationTracker +import org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker +import org.jetbrains.kotlin.idea.resolve.ResolutionFacade +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.CompilerEnvironment +import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade +import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.resolve.lazy.ResolveSession +import java.io.File + +/** + * Kotlin as a service entry point + * + * Configures environment, analyses files and provides facilities to perform code processing without emitting bytecode + * + * $messageCollector: required by compiler infrastructure and will receive all compiler messages + * $body: optional and can be used to configure environment without creating local variable + */ +public class AnalysisEnvironment(val messageCollector: MessageCollector) : Disposable { + val configuration = CompilerConfiguration(); + + init { + configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) + } + + fun createCoreEnvironment(): KotlinCoreEnvironment { + val environment = KotlinCoreEnvironment.createForProduction(this, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val projectComponentManager = environment.project as MockComponentManager + + val projectFileIndex = CoreProjectFileIndex(environment.project, + environment.configuration.getList(CommonConfigurationKeys.CONTENT_ROOTS)) + + val moduleManager = object : CoreModuleManager(environment.project, this) { + override fun getModules(): Array = arrayOf(projectFileIndex.module) + } + + CoreApplicationEnvironment.registerComponentInstance(projectComponentManager.picoContainer, + ModuleManager::class.java, moduleManager) + + Extensions.registerAreaClass("IDEA_MODULE", null) + CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), + OrderEnumerationHandler.EP_NAME, OrderEnumerationHandler.Factory::class.java) + + projectComponentManager.registerService(ProjectFileIndex::class.java, + projectFileIndex) + projectComponentManager.registerService(ProjectRootManager::class.java, + CoreProjectRootManager(projectFileIndex)) + projectComponentManager.registerService(LibraryModificationTracker::class.java, + LibraryModificationTracker(environment.project)) + projectComponentManager.registerService(KotlinCacheService::class.java, + KotlinCacheService(environment.project)) + projectComponentManager.registerService(KotlinOutOfBlockCompletionModificationTracker::class.java, + KotlinOutOfBlockCompletionModificationTracker()) + return environment + } + + fun createResolutionFacade(environment: KotlinCoreEnvironment): DokkaResolutionFacade { + val projectContext = ProjectContext(environment.project) + val sourceFiles = environment.getSourceFiles() + + val module = object : ModuleInfo { + override val name: Name = Name.special("") + override fun dependencies(): List = listOf(this) + } + val resolverForProject = JvmAnalyzerFacade.setupResolverForProject( + "Dokka", + projectContext, + listOf(module), + { ModuleContent(sourceFiles, GlobalSearchScope.allScope(environment.project)) }, + JvmPlatformParameters { module }, + CompilerEnvironment + ) + + val resolverForModule = resolverForProject.resolverForModule(module) + return DokkaResolutionFacade(environment.project, resolverForProject.descriptorForModule(module), resolverForModule) + } + + /** + * Classpath for this environment. + */ + public val classpath: List + get() = configuration.jvmClasspathRoots + + /** + * Adds list of paths to classpath. + * $paths: collection of files to add + */ + public fun addClasspath(paths: List) { + configuration.addJvmClasspathRoots(paths) + } + + /** + * Adds path to classpath. + * $path: path to add + */ + public fun addClasspath(path: File) { + configuration.addJvmClasspathRoot(path) + } + + /** + * List of source roots for this environment. + */ + public val sources: List + get() = configuration.get(CommonConfigurationKeys.CONTENT_ROOTS) + ?.filterIsInstance() + ?.map { it.path } ?: emptyList() + + /** + * Adds list of paths to source roots. + * $list: collection of files to add + */ + public fun addSources(list: List) { + list.forEach { + configuration.add(CommonConfigurationKeys.CONTENT_ROOTS, contentRootFromPath(it)) + } + } + + public fun addRoots(list: List) { + configuration.addAll(CommonConfigurationKeys.CONTENT_ROOTS, list) + } + + /** + * Disposes the environment and frees all associated resources. + */ + public override fun dispose() { + Disposer.dispose(this) + } +} + +public fun contentRootFromPath(path: String): ContentRoot { + val file = File(path) + return if (file.extension == "java") JavaSourceRoot(file, null) else KotlinSourceRoot(path) +} + + +class DokkaResolutionFacade(override val project: Project, + override val moduleDescriptor: ModuleDescriptor, + val resolverForModule: ResolverForModule) : ResolutionFacade { + + val resolveSession: ResolveSession get() = getFrontendService(ResolveSession::class.java) + + override fun analyze(element: KtElement, bodyResolveMode: BodyResolveMode): BindingContext { + throw UnsupportedOperationException() + } + + override fun analyzeFullyAndGetResult(elements: Collection): AnalysisResult { + throw UnsupportedOperationException() + } + + override fun getFrontendService(element: PsiElement, serviceClass: Class): T { + throw UnsupportedOperationException() + } + + override fun getFrontendService(serviceClass: Class): T { + return resolverForModule.componentProvider.getService(serviceClass) + } + + override fun getFrontendService(moduleDescriptor: ModuleDescriptor, serviceClass: Class): T { + throw UnsupportedOperationException() + } + + override fun getIdeService(serviceClass: Class): T { + throw UnsupportedOperationException() + } + + override fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor { + return resolveSession.resolveToDescriptor(declaration) + } +} diff --git a/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt new file mode 100644 index 00000000..a1362fde --- /dev/null +++ b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt @@ -0,0 +1,550 @@ +package org.jetbrains.dokka + +import com.intellij.openapi.Disposable +import com.intellij.openapi.components.BaseComponent +import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.Sdk +import com.intellij.openapi.projectRoots.SdkAdditionalData +import com.intellij.openapi.projectRoots.SdkModificator +import com.intellij.openapi.projectRoots.SdkTypeId +import com.intellij.openapi.roots.* +import com.intellij.openapi.roots.impl.ProjectOrderEnumerator +import com.intellij.openapi.util.Condition +import com.intellij.openapi.util.Key +import com.intellij.openapi.util.UserDataHolderBase +import com.intellij.openapi.vfs.StandardFileSystems +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.util.messages.MessageBus +import org.jetbrains.jps.model.module.JpsModuleSourceRootType +import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot +import org.jetbrains.kotlin.cli.jvm.config.JvmContentRoot +import org.jetbrains.kotlin.config.ContentRoot +import org.jetbrains.kotlin.config.KotlinSourceRoot +import org.picocontainer.PicoContainer +import java.io.File + +/** + * Workaround for the lack of ability to create a ProjectFileIndex implementation using only + * classes from projectModel-{api,impl}. + */ +class CoreProjectFileIndex(val project: Project, contentRoots: List) : ProjectFileIndex, ModuleFileIndex { + val sourceRoots = contentRoots.filter { it !is JvmClasspathRoot } + val classpathRoots = contentRoots.filterIsInstance() + + val module: Module = object : UserDataHolderBase(), Module { + override fun isDisposed(): Boolean { + throw UnsupportedOperationException() + } + + override fun getOptionValue(p0: String): String? { + throw UnsupportedOperationException() + } + + override fun clearOption(p0: String) { + throw UnsupportedOperationException() + } + + override fun getName(): String = "" + + override fun getModuleWithLibrariesScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleWithDependentsScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleContentScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun isLoaded(): Boolean { + throw UnsupportedOperationException() + } + + override fun setOption(p0: String, p1: String) { + throw UnsupportedOperationException() + } + + override fun getModuleWithDependenciesScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleWithDependenciesAndLibrariesScope(p0: Boolean): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getProject(): Project = project + + override fun getModuleContentWithDependenciesScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleFilePath(): String { + throw UnsupportedOperationException() + } + + override fun getModuleTestsWithDependentsScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleScope(): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleScope(p0: Boolean): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleRuntimeScope(p0: Boolean): GlobalSearchScope { + throw UnsupportedOperationException() + } + + override fun getModuleFile(): VirtualFile? { + throw UnsupportedOperationException() + } + + override fun getExtensions(p0: ExtensionPointName): Array { + throw UnsupportedOperationException() + } + + override fun getComponent(p0: String): BaseComponent? { + throw UnsupportedOperationException() + } + + override fun getComponent(p0: Class, p1: T): T { + throw UnsupportedOperationException() + } + + override fun getComponent(interfaceClass: Class): T? { + if (interfaceClass == ModuleRootManager::class.java) { + return moduleRootManager as T + } + throw UnsupportedOperationException() + } + + override fun getDisposed(): Condition<*> { + throw UnsupportedOperationException() + } + + override fun getComponents(p0: Class): Array { + throw UnsupportedOperationException() + } + + override fun getPicoContainer(): PicoContainer { + throw UnsupportedOperationException() + } + + override fun hasComponent(p0: Class<*>): Boolean { + throw UnsupportedOperationException() + } + + override fun getMessageBus(): MessageBus { + throw UnsupportedOperationException() + } + + override fun dispose() { + throw UnsupportedOperationException() + } + } + + private val sdk: Sdk = object : Sdk, RootProvider { + override fun getFiles(rootType: OrderRootType): Array = classpathRoots + .map { StandardFileSystems.local().findFileByPath(it.file.path) } + .filterNotNull() + .toTypedArray() + + override fun addRootSetChangedListener(p0: RootProvider.RootSetChangedListener) { + throw UnsupportedOperationException() + } + + override fun addRootSetChangedListener(p0: RootProvider.RootSetChangedListener, p1: Disposable) { + throw UnsupportedOperationException() + } + + override fun getUrls(p0: OrderRootType): Array { + throw UnsupportedOperationException() + } + + override fun removeRootSetChangedListener(p0: RootProvider.RootSetChangedListener) { + throw UnsupportedOperationException() + } + + override fun getSdkModificator(): SdkModificator { + throw UnsupportedOperationException() + } + + override fun getName(): String = "" + + override fun getRootProvider(): RootProvider = this + + override fun getHomePath(): String? { + throw UnsupportedOperationException() + } + + override fun getVersionString(): String? { + throw UnsupportedOperationException() + } + + override fun getSdkAdditionalData(): SdkAdditionalData? { + throw UnsupportedOperationException() + } + + override fun clone(): Any { + throw UnsupportedOperationException() + } + + override fun getSdkType(): SdkTypeId { + throw UnsupportedOperationException() + } + + override fun getHomeDirectory(): VirtualFile? { + throw UnsupportedOperationException() + } + + override fun getUserData(p0: Key): T? { + throw UnsupportedOperationException() + } + + override fun putUserData(p0: Key, p1: T?) { + throw UnsupportedOperationException() + } + } + + private val moduleSourceOrderEntry = object : ModuleSourceOrderEntry { + override fun getFiles(p0: OrderRootType?): Array { + throw UnsupportedOperationException() + } + + override fun getPresentableName(): String { + throw UnsupportedOperationException() + } + + override fun getUrls(p0: OrderRootType?): Array { + throw UnsupportedOperationException() + } + + override fun getOwnerModule(): Module = module + + override fun accept(p0: RootPolicy?, p1: R?): R { + throw UnsupportedOperationException() + } + + override fun isValid(): Boolean { + throw UnsupportedOperationException() + } + + override fun compareTo(other: OrderEntry?): Int { + throw UnsupportedOperationException() + } + + override fun getRootModel(): ModuleRootModel = moduleRootManager + + override fun isSynthetic(): Boolean { + throw UnsupportedOperationException() + } + } + + private val sdkOrderEntry = object : JdkOrderEntry { + override fun getJdkName(): String? { + throw UnsupportedOperationException() + } + + override fun getJdk(): Sdk = sdk + + override fun getFiles(p0: OrderRootType?): Array { + throw UnsupportedOperationException() + } + + override fun getPresentableName(): String { + throw UnsupportedOperationException() + } + + override fun getUrls(p0: OrderRootType?): Array { + throw UnsupportedOperationException() + } + + override fun getOwnerModule(): Module { + throw UnsupportedOperationException() + } + + override fun accept(p0: RootPolicy?, p1: R?): R { + throw UnsupportedOperationException() + } + + override fun isValid(): Boolean { + throw UnsupportedOperationException() + } + + override fun getRootFiles(p0: OrderRootType?): Array? { + throw UnsupportedOperationException() + } + + override fun getRootUrls(p0: OrderRootType?): Array? { + throw UnsupportedOperationException() + } + + override fun compareTo(other: OrderEntry?): Int { + throw UnsupportedOperationException() + } + + override fun isSynthetic(): Boolean { + throw UnsupportedOperationException() + } + + } + + inner class MyModuleRootManager : ModuleRootManager() { + override fun getExcludeRoots(): Array { + throw UnsupportedOperationException() + } + + override fun getContentEntries(): Array { + throw UnsupportedOperationException() + } + + override fun getExcludeRootUrls(): Array { + throw UnsupportedOperationException() + } + + override fun processOrder(p0: RootPolicy?, p1: R): R { + throw UnsupportedOperationException() + } + + override fun getSourceRoots(p0: Boolean): Array { + throw UnsupportedOperationExc