minor refactorings

This commit is contained in:
Mikhail Mutcianko
2014-08-22 18:11:53 +04:00
committed by Yan Zhulanow
parent 23fbc60e50
commit 19e6b79cae
13 changed files with 19 additions and 43 deletions
@@ -1889,11 +1889,9 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
JetFile file = DescriptorToSourceUtils.getContainingFile(propertyDescriptor);
if (file != null && file.getName() == AndroidConst.SYNTHETIC_FILENAME) {
String userData = file.getUserData(AndroidConst.ANDROID_SYNTHETIC);
if (userData != null && userData.equals("OK")) {
String androidPackage = file.getUserData(AndroidConst.ANDROID_USER_PACKAGE);
if (file != null) {
String androidPackage = file.getUserData(ANDROID_USER_PACKAGE);
if (androidPackage != null) {
Type retType = typeMapper.mapType(propertyDescriptor.getReturnType());
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;
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 String SYNTHETIC_FILENAME = "ANDROIDXML.kt";
}
@@ -20,7 +20,7 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.PsiElement
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 idUsagePrefix = "@id/"
public val androidNamespace: String = "android"
@@ -49,15 +49,13 @@ import com.intellij.openapi.diagnostic.Logger
import org.jetbrains.jet.lang.resolve.android.AndroidConst.*
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 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.widget.*")
@@ -66,10 +64,10 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
private val fileCache = HashMap<PsiFile, String>()
var lastCachedPsi: JetFile? = null
private set
protected val fileModificationTime: HashMap<PsiFile, Long> = HashMap()
protected val filesToProcess: Queue<PsiFile> = ConcurrentLinkedQueue()
protected var listenerSetUp: Boolean = false
protected val LOG: Logger = Logger.getInstance(this.javaClass)
@@ -88,7 +86,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
try {
val vf = LightVirtualFile(SYNTHETIC_FILENAME, renderString())
val psiFile = PsiManager.getInstance(project).findFile(vf) as JetFile
psiFile.putUserData(ANDROID_SYNTHETIC, "OK")
psiFile.putUserData(ANDROID_USER_PACKAGE, androidAppPackage)
lastCachedPsi = psiFile
psiFile
@@ -103,7 +100,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
private fun writeImports(kw: KotlinStringWriter): KotlinWriter {
kw.writePackage(androidAppPackage)
// if (ApplicationManager.getApplication()?.isUnitTestMode() ?: false) return kw
for (elem in androidImports)
kw.writeImport(elem)
kw.writeEmptyLine()
@@ -129,7 +125,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
private fun doParse(): CacheAction? {
if (searchPath == null || searchPath == "") return null
lazySetup()
populateQueue()
var overallCacheMiss = false
var file = filesToProcess.poll()
@@ -158,7 +153,6 @@ abstract class AndroidUIXmlProcessor(val project: Project) {
filesToProcess.addAll(resourceManager.getLayoutXmlFiles())
}
protected abstract fun lazySetup()
protected fun produceKotlinProperties(kw: KotlinStringWriter, ids: Collection<AndroidWidget>): StringBuffer {
for (id in ids) {
@@ -39,11 +39,7 @@ class AndroidWidget(val id: String, val className: String) : AndroidResource
class AndroidManifest(val _package: String) : AndroidResource
fun isAndroidSyntheticFile(f: PsiFile?): Boolean {
if (f?.getName() == AndroidConst.SYNTHETIC_FILENAME) {
val userData = f?.getUserData(AndroidConst.ANDROID_SYNTHETIC);
return (userData != null && userData.equals("OK"))
}
return false
return f?.getUserData(AndroidConst.ANDROID_USER_PACKAGE) != null
}
fun isAndroidSyntheticElement(element: PsiElement?): Boolean {
@@ -20,7 +20,7 @@ import org.xml.sax.helpers.DefaultHandler
import org.xml.sax.Attributes
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() {
super<DefaultHandler>.startDocument()
@@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor.NoAndroidMan
import javax.xml.parsers.SAXParser
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()
@@ -23,14 +23,10 @@ import com.intellij.psi.PsiFile
class CliAndroidUIXmlProcessor(project: Project, override val searchPath: String?, val manifestPath: String?) : AndroidUIXmlProcessor(project) {
override var androidAppPackage: String = ""
get() = resourceManager.readManifest()._package
override val resourceManager = CliAndroidResourceManager(project, searchPath, manifestPath)
override fun lazySetup() {
populateQueue()
androidAppPackage = resourceManager.readManifest()._package
}
override fun parseSingleFileImpl(file: PsiFile): String {
val ids: MutableCollection<AndroidWidget> = ArrayList()
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
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")
val indentUnit = " "
protected var currentIndent: String = indentUnit.repeat(indentDepth)
val children = ArrayList<Context>()
private val children = ArrayList<Context>()
public fun incIndent() {
indentDepth++
@@ -22,9 +22,9 @@ trait KotlinWriter {
class KotlinStringWriter : KotlinWriter {
val ctx = Context()
val imports = ctx.fork()
val body = ctx.fork()
private val ctx = Context()
private val imports = ctx.fork()
private val body = ctx.fork()
fun writeFunction(name: 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 fakeWidgetsSrc = new File(getTestDataPath() + "/fakeHelpers/Widgets.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
public void setUp() throws Exception {
@@ -37,13 +37,6 @@ class IDEAndroidUIXmlProcessor(project: Project) : AndroidUIXmlProcessor(project
CliAndroidResourceManager(project, searchPath, searchPath + "AndroidManifest.xml")
else IDEAndroidResourceManager(project, searchPath)
override protected fun lazySetup() {
if (listenerSetUp) return
// androidAppPackage = resourceManager.readManifest()._package
// populateQueue()
listenerSetUp = true
}
override fun parseSingleFileImpl(file: PsiFile): String {
val ids: MutableCollection<AndroidWidget> = ArrayList()
if (!ApplicationManager.getApplication()!!.isUnitTestMode()) (resourceManager as IDEAndroidResourceManager).resetAttributeCache()
@@ -19,5 +19,5 @@ package org.jetbrains.jet.plugin.android;
import com.intellij.openapi.util.Key;
public class TestConst {
public static final Key<String> TESTDATA_PATH = Key.create("TEPITE");
public static final Key<String> TESTDATA_PATH = Key.create("");
}