reformat code, optimize imports
This commit is contained in:
committed by
Yan Zhulanow
parent
2f97e7fadb
commit
395959bf21
+18
-17
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-13
@@ -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"))
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
+3
-7
@@ -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 ""
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user