ExternalDeclarationsProvider introduced

This commit is contained in:
Andrey Breslav
2014-09-30 09:07:17 +04:00
committed by Yan Zhulanow
parent 1f10ab21ac
commit e10d8a6fe0
10 changed files with 112 additions and 21 deletions
@@ -11,6 +11,7 @@
<orderEntry type="module" module-name="frontend" />
<orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="module" module-name="cli" />
<orderEntry type="module" module-name="util" />
</component>
</module>
@@ -17,14 +17,18 @@
package org.jetbrains.kotlin.android
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor
import org.jetbrains.jet.config.CompilerConfiguration
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
import com.intellij.mock.MockProject
import org.jetbrains.jet.config.CompilerConfigurationKey
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.resolve.android.*
import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.utils.emptyOrSingletonList
import com.intellij.openapi.project.Project
public object AndroidConfigurationKeys {
@@ -54,11 +58,20 @@ public class AndroidCommandLineProcessor : CommandLineProcessor {
}
}
public class AndroidDeclarationsProvider(private val project: Project) : ExternalDeclarationsProvider {
override fun getExternalDeclarations(): Collection<JetFile> {
val parser = ServiceManager.getService<AndroidUIXmlProcessor>(project, javaClass<AndroidUIXmlProcessor>())
return emptyOrSingletonList(parser?.parseToPsi(project))
}
}
public class AndroidComponentRegistrar : ComponentRegistrar {
public override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
val androidResPath = configuration.get(AndroidConfigurationKeys.ANDROID_RES_PATH)
val androidManifest = configuration.get(AndroidConfigurationKeys.ANDROID_MANIFEST)
project.registerService(javaClass<AndroidUIXmlProcessor>(), CliAndroidUIXmlProcessor(project, androidResPath, androidManifest))
ExternalDeclarationsProvider.registerExtension(project, AndroidDeclarationsProvider(project))
}
}
@@ -21,9 +21,9 @@ import com.intellij.psi.PsiElement
import com.intellij.openapi.project.Project
import org.jetbrains.jet.lang.psi.JetFile
import com.intellij.openapi.components.ServiceManager
import java.util.ArrayList
import com.intellij.psi.PsiField
import com.intellij.psi.PsiClass
import org.jetbrains.jet.utils.emptyOrSingletonList
trait AndroidResource
@@ -52,14 +52,6 @@ public fun isAndroidSyntheticElement(element: PsiElement?): Boolean {
return isAndroidSyntheticFile(element?.getContainingFile())
}
public fun searchAndAddAndroidDeclarations(project: Project, originalFiles: Collection<JetFile>): Collection<JetFile> {
val parser = ServiceManager.getService<AndroidUIXmlProcessor>(project, javaClass<AndroidUIXmlProcessor>())
val file = parser?.parseToPsi(project)
val files = ArrayList(originalFiles)
if (file != null) files.add(file)
return files
}
public fun isRClassField(element: PsiElement): Boolean {
return if (element is PsiField) {
val outerClass = element.getParent()?.getParent()