minor refactorings
This commit is contained in:
committed by
Yan Zhulanow
parent
23fbc60e50
commit
19e6b79cae
@@ -1889,11 +1889,9 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||||
|
|
||||||
JetFile file = DescriptorToSourceUtils.getContainingFile(propertyDescriptor);
|
JetFile file = DescriptorToSourceUtils.getContainingFile(propertyDescriptor);
|
||||||
if (file != null && file.getName() == AndroidConst.SYNTHETIC_FILENAME) {
|
if (file != null) {
|
||||||
|
String androidPackage = file.getUserData(ANDROID_USER_PACKAGE);
|
||||||
String userData = file.getUserData(AndroidConst.ANDROID_SYNTHETIC);
|
if (androidPackage != null) {
|
||||||
if (userData != null && userData.equals("OK")) {
|
|
||||||
String androidPackage = file.getUserData(AndroidConst.ANDROID_USER_PACKAGE);
|
|
||||||
|
|
||||||
Type retType = typeMapper.mapType(propertyDescriptor.getReturnType());
|
Type retType = typeMapper.mapType(propertyDescriptor.getReturnType());
|
||||||
v.load(0, Type.getType("Landroid/app/Activity;"));
|
v.load(0, Type.getType("Landroid/app/Activity;"));
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve.android;
|
|||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
|
|
||||||
public class AndroidConst {
|
public class AndroidConst {
|
||||||
public static final Key<String> ANDROID_SYNTHETIC = Key.create("ANDROID_SYNTHETIC");
|
|
||||||
public static final Key<String> ANDROID_USER_PACKAGE = Key.create("ANDROID_USER_PACKAGE");
|
public static final Key<String> ANDROID_USER_PACKAGE = Key.create("ANDROID_USER_PACKAGE");
|
||||||
public static final String SYNTHETIC_FILENAME = "ANDROIDXML.kt";
|
public static final String SYNTHETIC_FILENAME = "ANDROIDXML.kt";
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import com.intellij.psi.PsiFile
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
|
||||||
abstract class AndroidResourceManager(val project: Project, val searchPath: String?) {
|
abstract class AndroidResourceManager(protected val project: Project, protected val searchPath: String?) {
|
||||||
private val idDeclarationPrefix = "@+id/"
|
private val idDeclarationPrefix = "@+id/"
|
||||||
private val idUsagePrefix = "@id/"
|
private val idUsagePrefix = "@id/"
|
||||||
public val androidNamespace: String = "android"
|
public val androidNamespace: String = "android"
|
||||||
|
|||||||
+4
-10
@@ -49,15 +49,13 @@ import com.intellij.openapi.diagnostic.Logger
|
|||||||
import org.jetbrains.jet.lang.resolve.android.AndroidConst.*
|
import org.jetbrains.jet.lang.resolve.android.AndroidConst.*
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
|
||||||
abstract class AndroidUIXmlProcessor(val project: Project) {
|
abstract class AndroidUIXmlProcessor(protected val project: Project) {
|
||||||
|
|
||||||
class NoAndroidManifestFound : Exception("No android manifest file found in project root")
|
class NoAndroidManifestFound : Exception("No android manifest file found in project root")
|
||||||
class ManifestParsingFailed
|
|
||||||
|
|
||||||
enum class CacheAction { HIT; MISS
|
private enum class CacheAction { HIT; MISS }
|
||||||
}
|
|
||||||
|
|
||||||
val androidImports = arrayListOf("android.app.Activity",
|
private val androidImports = arrayListOf("android.app.Activity",
|
||||||
"android.view.View",
|
"android.view.View",
|
||||||
"android.widget.*")
|
"android.widget.*")
|
||||||
|
|
||||||
@@ -66,10 +64,10 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
|
|||||||
|
|
||||||
private val fileCache = HashMap<PsiFile, String>()
|
private val fileCache = HashMap<PsiFile, String>()
|
||||||
var lastCachedPsi: JetFile? = null
|
var lastCachedPsi: JetFile? = null
|
||||||
|
private set
|
||||||
protected val fileModificationTime: HashMap<PsiFile, Long> = HashMap()
|
protected val fileModificationTime: HashMap<PsiFile, Long> = HashMap()
|
||||||
|
|
||||||
protected val filesToProcess: Queue<PsiFile> = ConcurrentLinkedQueue()
|
protected val filesToProcess: Queue<PsiFile> = ConcurrentLinkedQueue()
|
||||||
protected var listenerSetUp: Boolean = false
|
|
||||||
|
|
||||||
protected val LOG: Logger = Logger.getInstance(this.javaClass)
|
protected val LOG: Logger = Logger.getInstance(this.javaClass)
|
||||||
|
|
||||||
@@ -88,7 +86,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
|
|||||||
try {
|
try {
|
||||||
val vf = LightVirtualFile(SYNTHETIC_FILENAME, renderString())
|
val vf = LightVirtualFile(SYNTHETIC_FILENAME, renderString())
|
||||||
val psiFile = PsiManager.getInstance(project).findFile(vf) as JetFile
|
val psiFile = PsiManager.getInstance(project).findFile(vf) as JetFile
|
||||||
psiFile.putUserData(ANDROID_SYNTHETIC, "OK")
|
|
||||||
psiFile.putUserData(ANDROID_USER_PACKAGE, androidAppPackage)
|
psiFile.putUserData(ANDROID_USER_PACKAGE, androidAppPackage)
|
||||||
lastCachedPsi = psiFile
|
lastCachedPsi = psiFile
|
||||||
psiFile
|
psiFile
|
||||||
@@ -103,7 +100,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
|
|||||||
|
|
||||||
private fun writeImports(kw: KotlinStringWriter): KotlinWriter {
|
private fun writeImports(kw: KotlinStringWriter): KotlinWriter {
|
||||||
kw.writePackage(androidAppPackage)
|
kw.writePackage(androidAppPackage)
|
||||||
// if (ApplicationManager.getApplication()?.isUnitTestMode() ?: false) return kw
|
|
||||||
for (elem in androidImports)
|
for (elem in androidImports)
|
||||||
kw.writeImport(elem)
|
kw.writeImport(elem)
|
||||||
kw.writeEmptyLine()
|
kw.writeEmptyLine()
|
||||||
@@ -129,7 +125,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
|
|||||||
|
|
||||||
private fun doParse(): CacheAction? {
|
private fun doParse(): CacheAction? {
|
||||||
if (searchPath == null || searchPath == "") return null
|
if (searchPath == null || searchPath == "") return null
|
||||||
lazySetup()
|
|
||||||
populateQueue()
|
populateQueue()
|
||||||
var overallCacheMiss = false
|
var overallCacheMiss = false
|
||||||
var file = filesToProcess.poll()
|
var file = filesToProcess.poll()
|
||||||
@@ -158,7 +153,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
|
|||||||
filesToProcess.addAll(resourceManager.getLayoutXmlFiles())
|
filesToProcess.addAll(resourceManager.getLayoutXmlFiles())
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun lazySetup()
|
|
||||||
|
|
||||||
protected fun produceKotlinProperties(kw: KotlinStringWriter, ids: Collection<AndroidWidget>): StringBuffer {
|
protected fun produceKotlinProperties(kw: KotlinStringWriter, ids: Collection<AndroidWidget>): StringBuffer {
|
||||||
for (id in ids) {
|
for (id in ids) {
|
||||||
|
|||||||
@@ -39,11 +39,7 @@ class AndroidWidget(val id: String, val className: String) : AndroidResource
|
|||||||
class AndroidManifest(val _package: String) : AndroidResource
|
class AndroidManifest(val _package: String) : AndroidResource
|
||||||
|
|
||||||
fun isAndroidSyntheticFile(f: PsiFile?): Boolean {
|
fun isAndroidSyntheticFile(f: PsiFile?): Boolean {
|
||||||
if (f?.getName() == AndroidConst.SYNTHETIC_FILENAME) {
|
return f?.getUserData(AndroidConst.ANDROID_USER_PACKAGE) != null
|
||||||
val userData = f?.getUserData(AndroidConst.ANDROID_SYNTHETIC);
|
|
||||||
return (userData != null && userData.equals("OK"))
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isAndroidSyntheticElement(element: PsiElement?): Boolean {
|
fun isAndroidSyntheticElement(element: PsiElement?): Boolean {
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import org.xml.sax.helpers.DefaultHandler
|
|||||||
import org.xml.sax.Attributes
|
import org.xml.sax.Attributes
|
||||||
import java.util.HashMap
|
import java.util.HashMap
|
||||||
|
|
||||||
class AndroidXmlHandler(val resourceManager: AndroidResourceManager, val elementCallback: (String, String) -> Unit) : DefaultHandler() {
|
class AndroidXmlHandler(private val resourceManager: AndroidResourceManager, private val elementCallback: (String, String) -> Unit) : DefaultHandler() {
|
||||||
|
|
||||||
override fun startDocument() {
|
override fun startDocument() {
|
||||||
super<DefaultHandler>.startDocument()
|
super<DefaultHandler>.startDocument()
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor.NoAndroidMan
|
|||||||
import javax.xml.parsers.SAXParser
|
import javax.xml.parsers.SAXParser
|
||||||
import javax.xml.parsers.SAXParserFactory
|
import javax.xml.parsers.SAXParserFactory
|
||||||
|
|
||||||
public class CliAndroidResourceManager(project: Project, searchPath: String?, val manifestPath: String?) : AndroidResourceManagerBase(project, searchPath) {
|
public class CliAndroidResourceManager(project: Project, searchPath: String?, private val manifestPath: String?) : AndroidResourceManagerBase(project, searchPath) {
|
||||||
|
|
||||||
val saxParser: SAXParser = initSAX()
|
val saxParser: SAXParser = initSAX()
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -23,14 +23,10 @@ import com.intellij.psi.PsiFile
|
|||||||
class CliAndroidUIXmlProcessor(project: Project, override val searchPath: String?, val manifestPath: String?) : AndroidUIXmlProcessor(project) {
|
class CliAndroidUIXmlProcessor(project: Project, override val searchPath: String?, val manifestPath: String?) : AndroidUIXmlProcessor(project) {
|
||||||
|
|
||||||
override var androidAppPackage: String = ""
|
override var androidAppPackage: String = ""
|
||||||
|
get() = resourceManager.readManifest()._package
|
||||||
|
|
||||||
override val resourceManager = CliAndroidResourceManager(project, searchPath, manifestPath)
|
override val resourceManager = CliAndroidResourceManager(project, searchPath, manifestPath)
|
||||||
|
|
||||||
override fun lazySetup() {
|
|
||||||
populateQueue()
|
|
||||||
androidAppPackage = resourceManager.readManifest()._package
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun parseSingleFileImpl(file: PsiFile): String {
|
override fun parseSingleFileImpl(file: PsiFile): String {
|
||||||
val ids: MutableCollection<AndroidWidget> = ArrayList()
|
val ids: MutableCollection<AndroidWidget> = ArrayList()
|
||||||
val handler = AndroidXmlHandler(resourceManager, { id, wClass -> ids.add(AndroidWidget(id, wClass)) })
|
val handler = AndroidXmlHandler(resourceManager, { id, wClass -> ids.add(AndroidWidget(id, wClass)) })
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ package org.jetbrains.jet.lang.resolve.android
|
|||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|
||||||
|
|
||||||
open class Context(val buffer: StringBuffer = StringBuffer(), var indentDepth: Int = 0) {
|
open class Context(val buffer: StringBuffer = StringBuffer(), private var indentDepth: Int = 0) {
|
||||||
open class InvalidIndent(num: Int) : RuntimeException("Indentation level < 0: $num")
|
open class InvalidIndent(num: Int) : RuntimeException("Indentation level < 0: $num")
|
||||||
|
|
||||||
val indentUnit = " "
|
val indentUnit = " "
|
||||||
protected var currentIndent: String = indentUnit.repeat(indentDepth)
|
protected var currentIndent: String = indentUnit.repeat(indentDepth)
|
||||||
val children = ArrayList<Context>()
|
private val children = ArrayList<Context>()
|
||||||
|
|
||||||
public fun incIndent() {
|
public fun incIndent() {
|
||||||
indentDepth++
|
indentDepth++
|
||||||
|
|||||||
+3
-3
@@ -22,9 +22,9 @@ trait KotlinWriter {
|
|||||||
|
|
||||||
class KotlinStringWriter : KotlinWriter {
|
class KotlinStringWriter : KotlinWriter {
|
||||||
|
|
||||||
val ctx = Context()
|
private val ctx = Context()
|
||||||
val imports = ctx.fork()
|
private val imports = ctx.fork()
|
||||||
val body = ctx.fork()
|
private val body = ctx.fork()
|
||||||
|
|
||||||
fun writeFunction(name: String,
|
fun writeFunction(name: String,
|
||||||
args: Collection<String>?,
|
args: Collection<String>?,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class AndroidXmlTest extends TestCaseWithTmpdir {
|
|||||||
private final File fakeViewSrc = new File(getTestDataPath() + "/fakeHelpers/View.kt");
|
private final File fakeViewSrc = new File(getTestDataPath() + "/fakeHelpers/View.kt");
|
||||||
private final File fakeWidgetsSrc = new File(getTestDataPath() + "/fakeHelpers/Widgets.kt");
|
private final File fakeWidgetsSrc = new File(getTestDataPath() + "/fakeHelpers/Widgets.kt");
|
||||||
private final File fakeMyActivitySrc = new File(singleFilePrefix + "MyActivity.kt");
|
private final File fakeMyActivitySrc = new File(singleFilePrefix + "MyActivity.kt");
|
||||||
private final String singleFileResPath = singleFilePrefix + "res/layout/";
|
private static final String singleFileResPath = singleFilePrefix + "res/layout/";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
|
|||||||
@@ -37,13 +37,6 @@ class IDEAndroidUIXmlProcessor(project: Project) : AndroidUIXmlProcessor(project
|
|||||||
CliAndroidResourceManager(project, searchPath, searchPath + "AndroidManifest.xml")
|
CliAndroidResourceManager(project, searchPath, searchPath + "AndroidManifest.xml")
|
||||||
else IDEAndroidResourceManager(project, searchPath)
|
else IDEAndroidResourceManager(project, searchPath)
|
||||||
|
|
||||||
override protected fun lazySetup() {
|
|
||||||
if (listenerSetUp) return
|
|
||||||
// androidAppPackage = resourceManager.readManifest()._package
|
|
||||||
// populateQueue()
|
|
||||||
listenerSetUp = true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun parseSingleFileImpl(file: PsiFile): String {
|
override fun parseSingleFileImpl(file: PsiFile): String {
|
||||||
val ids: MutableCollection<AndroidWidget> = ArrayList()
|
val ids: MutableCollection<AndroidWidget> = ArrayList()
|
||||||
if (!ApplicationManager.getApplication()!!.isUnitTestMode()) (resourceManager as IDEAndroidResourceManager).resetAttributeCache()
|
if (!ApplicationManager.getApplication()!!.isUnitTestMode()) (resourceManager as IDEAndroidResourceManager).resetAttributeCache()
|
||||||
|
|||||||
@@ -19,5 +19,5 @@ package org.jetbrains.jet.plugin.android;
|
|||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
|
|
||||||
public class TestConst {
|
public class TestConst {
|
||||||
public static final Key<String> TESTDATA_PATH = Key.create("TEPITE");
|
public static final Key<String> TESTDATA_PATH = Key.create("");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user