reformat code, optimize imports

This commit is contained in:
Mikhail Mutcianko
2014-07-31 12:28:33 +04:00
committed by Yan Zhulanow
parent 2f97e7fadb
commit 395959bf21
9 changed files with 37 additions and 71 deletions
@@ -33,7 +33,6 @@ import com.intellij.openapi.project.Project
import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.ConcurrentLinkedQueue
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.LightVirtualFile
import com.intellij.openapi.vfs.VirtualFileSystem
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import java.io.FileInputStream import java.io.FileInputStream
import org.xml.sax.helpers.DefaultHandler import org.xml.sax.helpers.DefaultHandler
@@ -44,20 +43,17 @@ import com.intellij.psi.util.PsiModificationTracker
import com.intellij.psi.impl.PsiModificationTrackerImpl import com.intellij.psi.impl.PsiModificationTrackerImpl
import java.util.Queue import java.util.Queue
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.xml.sax.InputSource
import java.io.ByteArrayInputStream
import com.intellij.openapi.diagnostic.Log
import org.xml.sax.SAXException
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
abstract class AndroidUIXmlParser { abstract class AndroidUIXmlParser {
inner class NoUIXMLsFound: Exception("No android UI xmls found in $searchPath") inner class NoUIXMLsFound : Exception("No android UI xmls found in $searchPath")
class NoAndroidManifestFound: Exception("No android manifest file found in project root") class NoAndroidManifestFound : Exception("No android manifest file found in project root")
class ManifestParsingFailed class ManifestParsingFailed
enum class CacheAction { HIT; MISS } enum class CacheAction { HIT; MISS
}
val androidImports = arrayListOf("android.app.Activity", val androidImports = arrayListOf("android.app.Activity",
"android.view.View", "android.view.View",
@@ -105,11 +101,13 @@ abstract class AndroidUIXmlParser {
psiFile.putUserData(ANDROID_USER_PACKAGE, androidAppPackage) psiFile.putUserData(ANDROID_USER_PACKAGE, androidAppPackage)
lastCachedPsi = psiFile lastCachedPsi = psiFile
psiFile psiFile
} catch (e: Exception) { }
catch (e: Exception) {
invalidateCaches() invalidateCaches()
null null
} }
} else lastCachedPsi }
else lastCachedPsi
} }
private fun isAndroidUIXml(file: File): Boolean { private fun isAndroidUIXml(file: File): Boolean {
@@ -128,7 +126,8 @@ abstract class AndroidUIXmlParser {
if (!path.exists()) continue; if (!path.exists()) continue;
if (path.isFile() && isAndroidUIXml(path)) { if (path.isFile() && isAndroidUIXml(path)) {
res.add(path) res.add(path)
} else if (path.isDirectory()) { }
else if (path.isDirectory()) {
res.addAll(searchForUIXml(path.listFiles()?.toArrayList())) res.addAll(searchForUIXml(path.listFiles()?.toArrayList()))
} }
} }
@@ -190,7 +189,7 @@ abstract class AndroidUIXmlParser {
val fileManager = VirtualFileManager.getInstance() val fileManager = VirtualFileManager.getInstance()
val watchDir = fileManager.findFileByUrl("file://" + searchPath) val watchDir = fileManager.findFileByUrl("file://" + searchPath)
val psiManager = PsiManager.getInstance(project) val psiManager = PsiManager.getInstance(project)
return watchDir?.getChildren()?.toArrayList()?.map { psiManager.findFile(it) } ?.mapNotNull { it } ?: ArrayList(0) return watchDir?.getChildren()?.toArrayList()?.map { psiManager.findFile(it) }?.mapNotNull { it } ?: ArrayList(0)
} }
protected fun populateQueue(project: Project) { protected fun populateQueue(project: Project) {
@@ -210,11 +209,13 @@ abstract class AndroidUIXmlParser {
_package = attributes.toMap()["package"] ?: "" _package = attributes.toMap()["package"] ?: ""
} }
}) })
} catch (e: Exception) { }
catch (e: Exception) {
throw e throw e
} }
return AndroidManifest(_package) return AndroidManifest(_package)
} catch (e: Exception) { }
catch (e: Exception) {
throw NoAndroidManifestFound() throw NoAndroidManifestFound()
} }
} }
@@ -223,9 +224,9 @@ abstract class AndroidUIXmlParser {
for (id in ids) { for (id in ids) {
val body = arrayListOf("return findViewById(0) as ${id.className}") val body = arrayListOf("return findViewById(0) as ${id.className}")
kw.writeImmutableExtensionProperty(receiver = "Activity", kw.writeImmutableExtensionProperty(receiver = "Activity",
name = id.id, name = id.id,
retType = id.className, retType = id.className,
getterBody = body ) getterBody = body)
} }
return kw.output() return kw.output()
} }
@@ -16,13 +16,12 @@
package org.jetbrains.jet.lang.resolve.android package org.jetbrains.jet.lang.resolve.android
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
trait AndroidResource trait AndroidResource
class AndroidID(val rawID: String): AndroidResource { class AndroidID(val rawID: String) : AndroidResource {
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
return other is AndroidID && this.rawID == other.rawID return other is AndroidID && this.rawID == other.rawID
@@ -35,20 +34,11 @@ class AndroidID(val rawID: String): AndroidResource {
} }
} }
class AndroidWidget(val id: String, val className: String): AndroidResource class AndroidWidget(val id: String, val className: String) : AndroidResource
class AndroidManifest(val _package: String): AndroidResource class AndroidManifest(val _package: String) : AndroidResource
//fun isAndroidSyntheticFile(f: VirtualFile?): Boolean {
// if (f?.getName() == AndroidConst.SYNTHETIC_FILENAME) {
// val userData = f?.getUserData(AndroidConst.ANDROID_SYNTHETIC);
// return (userData != null && userData.equals("OK"))
// }
// return false
//}
fun isAndroidSyntheticFile(f: PsiFile?): Boolean { fun isAndroidSyntheticFile(f: PsiFile?): Boolean {
// return isAndroidSyntheticFile(f?.getVirtualFile())
if (f?.getName() == AndroidConst.SYNTHETIC_FILENAME) { if (f?.getName() == AndroidConst.SYNTHETIC_FILENAME) {
val userData = f?.getUserData(AndroidConst.ANDROID_SYNTHETIC); val userData = f?.getUserData(AndroidConst.ANDROID_SYNTHETIC);
return (userData != null && userData.equals("OK")) return (userData != null && userData.equals("OK"))
@@ -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 elementCallback: (String, String)-> Unit): DefaultHandler() { class AndroidXmlHandler(val elementCallback: (String, String) -> Unit) : DefaultHandler() {
override fun startDocument() { override fun startDocument() {
super<DefaultHandler>.startDocument() super<DefaultHandler>.startDocument()
@@ -46,7 +46,7 @@ class AndroidXmlHandler(val elementCallback: (String, String)-> Unit): DefaultHa
public fun Attributes.toMap(): HashMap<String, String> { public fun Attributes.toMap(): HashMap<String, String> {
val res = HashMap<String, String>() val res = HashMap<String, String>()
for (index in 0..getLength()-1) { for (index in 0..getLength() - 1) {
val attrName = getLocalName(index)!! val attrName = getLocalName(index)!!
val attrVal = getValue(index)!! val attrVal = getValue(index)!!
res[attrName] = attrVal res[attrName] = attrVal
@@ -16,17 +16,12 @@
package org.jetbrains.jet.lang.resolve.android package org.jetbrains.jet.lang.resolve.android
import com.intellij.openapi.vfs.VirtualFileManager
import java.util.ArrayList import java.util.ArrayList
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import java.io.ByteArrayInputStream
import org.xml.sax.InputSource
import javax.xml.parsers.SAXParser
import javax.xml.parsers.SAXParserFactory
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
class CliAndroidUIXmlParser(val project: Project, override val searchPath: String?): AndroidUIXmlParser() { class CliAndroidUIXmlParser(val project: Project, override val searchPath: String?) : AndroidUIXmlParser() {
override var androidAppPackage: String = "" override var androidAppPackage: String = ""
@@ -42,7 +37,8 @@ class CliAndroidUIXmlParser(val project: Project, override val searchPath: Strin
try { try {
saxParser.parse(file.getVirtualFile()?.getInputStream()!!, handler) saxParser.parse(file.getVirtualFile()?.getInputStream()!!, handler)
return produceKotlinProperties(KotlinStringWriter(), ids).toString() return produceKotlinProperties(KotlinStringWriter(), ids).toString()
} catch (e: Throwable) { }
catch (e: Throwable) {
LOG.error(e) LOG.error(e)
return "" return ""
} }
@@ -62,7 +62,8 @@ class KotlinStringWriter : KotlinWriter {
} }
body.decIndent() body.decIndent()
body.writeln("}") body.writeln("}")
} else { }
else {
body.writeNoIndent("=") body.writeNoIndent("=")
body.writeNoIndent(getterBody.join("").replace("return", "")) body.writeNoIndent(getterBody.join("").replace("return", ""))
body.newLine() body.newLine()
@@ -20,15 +20,11 @@ import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.actionSystem.DataContext
import org.jetbrains.jet.lang.psi.JetProperty
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlParser import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlParser
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.psi.PsiReferenceExpression
import com.intellij.psi.PsiIdentifier
import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.impl.source.tree.LeafPsiElement
public class AndroidGotoDeclarationHandler: GotoDeclarationHandler { public class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
override fun getGotoDeclarationTargets(sourceElement: PsiElement?, offset: Int, editor: Editor?): Array<PsiElement>? { override fun getGotoDeclarationTargets(sourceElement: PsiElement?, offset: Int, editor: Editor?): Array<PsiElement>? {
if (sourceElement is LeafPsiElement) { if (sourceElement is LeafPsiElement) {
val parser = ServiceManager.getService(sourceElement.getProject(), javaClass<AndroidUIXmlParser>()) val parser = ServiceManager.getService(sourceElement.getProject(), javaClass<AndroidUIXmlParser>())
@@ -37,7 +33,8 @@ public class AndroidGotoDeclarationHandler: GotoDeclarationHandler {
return array(psiElement) return array(psiElement)
} }
else return null else return null
} else return null }
else return null
} }
override fun getActionText(context: DataContext?): String? { override fun getActionText(context: DataContext?): String? {
@@ -21,7 +21,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.xml.XmlElement import com.intellij.psi.xml.XmlElement
import com.intellij.psi.xml.XmlTag import com.intellij.psi.xml.XmlTag
class AndroidXmlVisitor(val elementCallback: (String, String)-> Unit): XmlElementVisitor() { class AndroidXmlVisitor(val elementCallback: (String, String) -> Unit) : XmlElementVisitor() {
override fun visitElement(element: PsiElement) { override fun visitElement(element: PsiElement) {
element.acceptChildren(this) element.acceptChildren(this)
@@ -18,10 +18,7 @@ package org.jetbrains.jet.plugin.android
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlParser import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlParser
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFileManager
import java.util.ArrayList import java.util.ArrayList
import com.intellij.openapi.vfs.VirtualFileAdapter
import com.intellij.openapi.vfs.VirtualFileEvent
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.jet.lang.resolve.android.AndroidWidget import org.jetbrains.jet.lang.resolve.android.AndroidWidget
import org.jetbrains.jet.lang.resolve.android.KotlinStringWriter import org.jetbrains.jet.lang.resolve.android.KotlinStringWriter
@@ -30,9 +27,8 @@ import com.intellij.psi.XmlElementVisitor
import com.intellij.psi.xml.XmlTag import com.intellij.psi.xml.XmlTag
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import java.util.HashMap import java.util.HashMap
import com.intellij.psi.xml.XmlAttribute
class IDEAndroidUIXmlParser(val project: Project): AndroidUIXmlParser() { class IDEAndroidUIXmlParser(val project: Project) : AndroidUIXmlParser() {
override val searchPath: String? = project.getBasePath() + "/res/layout/" override val searchPath: String? = project.getBasePath() + "/res/layout/"
override var androidAppPackage: String = "" override var androidAppPackage: String = ""
@@ -74,7 +70,7 @@ class IDEAndroidUIXmlParser(val project: Project): AndroidUIXmlParser() {
override fun parseSingleFileImpl(file: PsiFile): String { override fun parseSingleFileImpl(file: PsiFile): String {
val ids: MutableCollection<AndroidWidget> = ArrayList() val ids: MutableCollection<AndroidWidget> = ArrayList()
file.accept(AndroidXmlVisitor({ id, wClass -> ids.add(AndroidWidget(id, wClass))})) file.accept(AndroidXmlVisitor({ id, wClass -> ids.add(AndroidWidget(id, wClass)) }))
return produceKotlinProperties(KotlinStringWriter(), ids).toString() return produceKotlinProperties(KotlinStringWriter(), ids).toString()
} }
@@ -89,7 +85,7 @@ class IDEAndroidUIXmlParser(val project: Project): AndroidUIXmlParser() {
val idPrefix = "@+id/" val idPrefix = "@+id/"
val attribute = tag?.getAttribute("android:id") val attribute = tag?.getAttribute("android:id")
if (attribute != null && attribute.getValue() == idPrefix + oldName) { if (attribute != null && attribute.getValue() == idPrefix + oldName) {
allRenames[XmlAttributeValueWrapper(attribute.getValueElement()!!)] = idPrefix+newName allRenames[XmlAttributeValueWrapper(attribute.getValueElement()!!)] = idPrefix + newName
} }
tag?.acceptChildren(this) tag?.acceptChildren(this)
} }
@@ -30,13 +30,9 @@ import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomManager;
import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -384,25 +380,14 @@ public class XmlAttributeValueWrapper implements XmlAttributeValue, PsiNamedElem
@Override @Override
public String getName() { public String getName() {
String value = myWrappee.getValue();
return ((NavigationItem) myWrappee).getName(); return ((NavigationItem) myWrappee).getName();
} }
@Override @Override
@Nullable @Nullable
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
//if (AndroidResourceUtil.isIdDeclaration(myWrappee)) { XmlAttribute attribute = (XmlAttribute) myWrappee.getParent();
XmlAttribute attribute = (XmlAttribute) myWrappee.getParent(); attribute.setValue(name);
attribute.setValue(name);
//}
//else {
// // then it is a value resource
// XmlTag tag = PsiTreeUtil.getParentOfType(myWrappee, XmlTag.class);
// DomElement domElement = DomManager.getDomManager(getProject()).getDomElement(tag);
// assert domElement instanceof ResourceElement;
// ResourceElement resElement = (ResourceElement) domElement;
// resElement.getName().setValue(name);
//}
return null; return null;
} }