Minor: Android Extensions compiler plugin refactoring
This commit is contained in:
-1
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
|
||||
class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
|
||||
|
||||
override fun getGotoDeclarationTargets(sourceElement: PsiElement?, offset: Int, editor: Editor?): Array<PsiElement>? {
|
||||
if (sourceElement is LeafPsiElement && sourceElement.parent is KtSimpleNameExpression) {
|
||||
val simpleNameExpression = sourceElement.parent as? KtSimpleNameExpression ?: return null
|
||||
|
||||
+18
-27
@@ -21,7 +21,6 @@ import com.android.tools.idea.gradle.AndroidGradleModel
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.impl.PsiTreeChangePreprocessor
|
||||
import com.intellij.psi.util.CachedValue
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
@@ -33,10 +32,11 @@ import org.jetbrains.kotlin.android.synthetic.res.*
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
||||
|
||||
class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileManager(module.project) {
|
||||
override val androidModule: AndroidModule?
|
||||
get() = module.androidFacet?.toAndroidModuleInfo()
|
||||
get() = AndroidFacet.getInstance(module)?.let { getAndroidModuleInfo(it) }
|
||||
|
||||
@Volatile
|
||||
private var _moduleData: CachedValue<AndroidModuleData>? = null
|
||||
@@ -58,27 +58,21 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
|
||||
}
|
||||
|
||||
private fun getPsiTreeChangePreprocessor(): PsiTreeChangePreprocessor {
|
||||
return project.getExtensions(PsiTreeChangePreprocessor.EP_NAME).first { it is AndroidPsiTreeChangePreprocessor }
|
||||
return project.getExtensions(PsiTreeChangePreprocessor.EP_NAME).firstIsInstance<AndroidPsiTreeChangePreprocessor>()
|
||||
}
|
||||
|
||||
override fun doExtractResources(files: List<PsiFile>, module: ModuleDescriptor): List<AndroidLayoutGroup> {
|
||||
val layoutGroupFiles = files.groupBy { it.name }
|
||||
val layoutGroups = mutableListOf<AndroidLayoutGroup>()
|
||||
|
||||
for ((name, layouts) in layoutGroupFiles) {
|
||||
layoutGroups += AndroidLayoutGroup(name, layouts.map { layout ->
|
||||
val resources = arrayListOf<AndroidResource>()
|
||||
layout.accept(AndroidXmlVisitor { id, widgetType, attribute ->
|
||||
resources += parseAndroidResource(id, widgetType, attribute.valueElement)
|
||||
})
|
||||
AndroidLayout(resources)
|
||||
override fun doExtractResources(layoutGroup: AndroidLayoutGroupData, module: ModuleDescriptor): AndroidLayoutGroup {
|
||||
val layouts = layoutGroup.layouts.map { layout ->
|
||||
val resources = arrayListOf<AndroidResource>()
|
||||
layout.accept(AndroidXmlVisitor { id, widgetType, attribute ->
|
||||
resources += parseAndroidResource(id, widgetType, attribute.valueElement)
|
||||
})
|
||||
AndroidLayout(resources)
|
||||
}
|
||||
|
||||
return layoutGroups
|
||||
return AndroidLayoutGroup(layoutGroup.name, layouts)
|
||||
}
|
||||
|
||||
|
||||
override fun propertyToXmlAttributes(propertyDescriptor: PropertyDescriptor): List<PsiElement> {
|
||||
val fqPath = propertyDescriptor.fqNameUnsafe.pathSegments()
|
||||
if (fqPath.size <= SYNTHETIC_PACKAGE_PATH_LENGTH) return listOf()
|
||||
@@ -87,7 +81,7 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
|
||||
val layoutNamePosition = SYNTHETIC_PACKAGE_PATH_LENGTH + (if (defaultVariant) 0 else 1)
|
||||
val layoutName = fqPath[layoutNamePosition].asString()
|
||||
|
||||
val layoutFiles = variantData[layoutName] ?: return null
|
||||
val layoutFiles = variantData.layouts[layoutName] ?: return null
|
||||
if (layoutFiles.isEmpty()) return null
|
||||
|
||||
val propertyName = propertyDescriptor.name.asString()
|
||||
@@ -101,7 +95,7 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
|
||||
return attributes
|
||||
}
|
||||
|
||||
for (variantData in getModuleData()) {
|
||||
for (variantData in getModuleData().variants) {
|
||||
if (variantData.variant.isMainVariant && fqPath.size == SYNTHETIC_PACKAGE_PATH_LENGTH + 2) {
|
||||
handle(variantData, true)?.let { return it }
|
||||
}
|
||||
@@ -115,16 +109,13 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
|
||||
|
||||
private fun SourceProvider.toVariant() = AndroidVariant(name, resDirectories.map { it.canonicalPath })
|
||||
|
||||
private val Module.androidFacet: AndroidFacet?
|
||||
get() = AndroidFacet.getInstance(this)
|
||||
private fun getAndroidModuleInfo(androidFacet: AndroidFacet): AndroidModule? {
|
||||
val applicationPackage = androidFacet.manifest?.`package`?.toString() ?: return null
|
||||
|
||||
private fun AndroidFacet.toAndroidModuleInfo(): AndroidModule? {
|
||||
val applicationPackage = manifest?.`package`?.toString() ?: return null
|
||||
val allResDirectories = androidFacet.getAppResources(true)?.resourceDirs.orEmpty().mapNotNull { it.canonicalPath }
|
||||
|
||||
val allResDirectories = getAppResources(true)?.resourceDirs.orEmpty().mapNotNull { it.canonicalPath }
|
||||
|
||||
val resDirectoriesForMainVariant = run {
|
||||
val resDirsFromSourceProviders = AndroidGradleModel.get(module)?.allSourceProviders.orEmpty()
|
||||
val resDirectoriesForMainVariant = androidFacet.run {
|
||||
val resDirsFromSourceProviders = AndroidGradleModel.get(this.module)?.allSourceProviders.orEmpty()
|
||||
.filter { it.name != "main" }
|
||||
.flatMap { it.resDirectories }
|
||||
.map { it.canonicalPath }
|
||||
@@ -134,7 +125,7 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
|
||||
|
||||
val variants = mutableListOf(AndroidVariant("main", resDirectoriesForMainVariant))
|
||||
|
||||
AndroidGradleModel.get(module)?.let { androidGradleModel ->
|
||||
AndroidGradleModel.get(androidFacet.module)?.let { androidGradleModel ->
|
||||
androidGradleModel.activeSourceProviders.filter { it.name != "main" }.forEach { sourceProvider ->
|
||||
variants += sourceProvider.toVariant()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user