Combine all metadata annotations into one kotlin/Metadata

This commit is contained in:
Alexander Udalov
2015-12-28 21:22:28 +03:00
parent 661af854fa
commit 59dab0a558
27 changed files with 300 additions and 45 deletions
@@ -20,12 +20,15 @@ import com.intellij.codeInsight.completion.AllClassesGetter
import com.intellij.codeInsight.completion.CompletionParameters
import com.intellij.codeInsight.completion.PrefixMatcher
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiLiteral
import org.jetbrains.kotlin.asJava.KtLightClass
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
@@ -87,7 +90,14 @@ class AllClassesCompletion(private val parameters: CompletionParameters,
}
private fun PsiClass.isSyntheticKotlinClass(): Boolean {
if (!name!!.contains('$')) return false // optimization to not analyze annotations of all classes
return modifierList?.findAnnotation(kotlin.jvm.internal.KotlinSyntheticClass::class.java.name) != null
if ('$' !in name!!) return false // optimization to not analyze annotations of all classes
val metadata = modifierList?.findAnnotation(JvmAnnotationNames.METADATA.asString())
if (metadata != null &&
(metadata.findAttributeValue(JvmAnnotationNames.KIND_FIELD_NAME) as? PsiLiteral)?.value ==
KotlinClassHeader.Kind.SYNTHETIC_CLASS.id) {
return true
}
return modifierList?.findAnnotation(JvmAnnotationNames.KOTLIN_SYNTHETIC_CLASS.asString()) != null
}
}
@@ -23,7 +23,6 @@ import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.asJava.LightClassTestCommon
import org.jetbrains.kotlin.idea.KotlinDaemonAnalyzerTestCase
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -81,14 +80,13 @@ private fun testLightClass(project: Project, testDataPath: String, normalize: (S
.replace("java.lang.String s)", "java.lang.String p)")
.replace("java.lang.String s1", "java.lang.String p1")
.replace("java.lang.String s2", "java.lang.String p2")
.removeLinesStartingWith("@kotlin.jvm.internal.KotlinClass")
.removeLinesStartingWith("@kotlin.jvm.internal.KotlinFileFacade")
.removeLinesStartingWith("@kotlin.jvm.internal.")
.removeLinesStartingWith("@kotlin.Metadata")
.run(normalize)
}
)
}
private fun String.removeLinesStartingWith(prefix: String) : String {
private fun String.removeLinesStartingWith(prefix: String): String {
return lines().filterNot { it.trimStart().startsWith(prefix) }.joinToString(separator = "\n")
}