Codebase update

This commit is contained in:
Yan Zhulanow
2015-02-03 18:37:49 +03:00
parent 346dbe3f7c
commit c756cfef86
46 changed files with 197 additions and 355 deletions
+21
View File
@@ -0,0 +1,21 @@
<component name="ArtifactManager">
<artifact name="KotlinAndroidExtensions">
<output-path>$PROJECT_DIR$/out/artifacts/KotlinAndroidExtensions</output-path>
<root id="root">
<element id="directory" name="lib">
<element id="archive" name="kotlin-android-extensions.jar">
<element id="module-output" name="android-idea-plugin" />
</element>
<element id="directory" name="jps">
<element id="archive" name="kotlin-android-extensions-jps.jar">
<element id="module-output" name="android-jps-plugin" />
<element id="module-output" name="plugin-api" />
</element>
</element>
<element id="archive" name="android-compiler-plugin.jar">
<element id="module-output" name="android-compiler-plugin" />
</element>
</element>
</root>
</artifact>
</component>
@@ -17,14 +17,13 @@
package org.jetbrains.jet.codegen.extensions package org.jetbrains.jet.codegen.extensions
import org.jetbrains.jet.extensions.ProjectExtensionDescriptor import org.jetbrains.jet.extensions.ProjectExtensionDescriptor
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.codegen.state.JetTypeMapper
import org.jetbrains.jet.codegen.StackValue
import org.jetbrains.jet.codegen.state.JetTypeMapper
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.jet.codegen.ClassBodyCodegen import org.jetbrains.kotlin.codegen.StackValue
import org.jetbrains.jet.codegen.ClassBuilder import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.jet.lang.psi.JetClassOrObject import org.jetbrains.kotlin.codegen.ClassBuilder
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
public trait ExpressionCodegenExtension { public trait ExpressionCodegenExtension {
class object : ProjectExtensionDescriptor<ExpressionCodegenExtension>("org.jetbrains.kotlin.expressionCodegenExtension", javaClass<ExpressionCodegenExtension>()) class object : ProjectExtensionDescriptor<ExpressionCodegenExtension>("org.jetbrains.kotlin.expressionCodegenExtension", javaClass<ExpressionCodegenExtension>())
@@ -17,19 +17,13 @@
package org.jetbrains.jet.cli.jvm package org.jetbrains.jet.cli.jvm
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments
import kotlin.platform.* import kotlin.platform.*
import java.util.jar.JarFile import java.util.jar.JarFile
import java.util.jar.Attributes import java.util.jar.Attributes
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
import java.util.regex.Pattern import java.util.regex.Pattern
import org.jetbrains.jet.utils.valuesToMap
import org.jetbrains.jet.config.CompilerConfiguration
import com.intellij.util.containers.MultiMap import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.jet.cli.common.messages.MessageCollector
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation
import java.net.URLClassLoader import java.net.URLClassLoader
import java.net.URL import java.net.URL
import java.io.File import java.io.File
@@ -39,6 +33,9 @@ import java.io.IOException
import java.util.Enumeration import java.util.Enumeration
import org.jetbrains.kotlin.compiler.plugin.parsePluginOption import org.jetbrains.kotlin.compiler.plugin.parsePluginOption
import org.jetbrains.kotlin.compiler.plugin.CliOptionValue import org.jetbrains.kotlin.compiler.plugin.CliOptionValue
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.utils.valuesToMap
import org.jetbrains.kotlin.config.CompilerConfiguration
public object PluginCliParser { public object PluginCliParser {
@@ -34,11 +34,11 @@ import org.jetbrains.kotlin.analyzer.ModuleContent
import org.jetbrains.kotlin.di.InjectorForLazyResolveWithJava import org.jetbrains.kotlin.di.InjectorForLazyResolveWithJava
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.jet.lang.psi.JetFile
import java.util.ArrayList import java.util.ArrayList
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import kotlin.platform.platformStatic import kotlin.platform.platformStatic
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.psi.JetFile
public class JvmResolverForModule( public class JvmResolverForModule(
override val lazyResolveSession: ResolveSession, override val lazyResolveSession: ResolveSession,
@@ -16,8 +16,8 @@
package org.jetbrains.jet.extensions package org.jetbrains.jet.extensions
import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.kotlin.psi.JetFile
public trait ExternalDeclarationsProvider { public trait ExternalDeclarationsProvider {
class object : ProjectExtensionDescriptor<ExternalDeclarationsProvider>( class object : ProjectExtensionDescriptor<ExternalDeclarationsProvider>(
@@ -32,7 +32,7 @@ import java.io.StringWriter
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.psi.PsiComment import com.intellij.psi.PsiComment
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
public fun JetPsiFactory(project: Project?): JetPsiFactory = JetPsiFactory(project!!) public fun JetPsiFactory(project: Project?): JetPsiFactory = JetPsiFactory(project!!)
public fun JetPsiFactory(contextElement: JetElement): JetPsiFactory = JetPsiFactory(contextElement.getProject()) public fun JetPsiFactory(contextElement: JetElement): JetPsiFactory = JetPsiFactory(contextElement.getProject())
+2 -2
View File
@@ -9,6 +9,6 @@
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="intellij-core" level="project" /> <orderEntry type="library" exported="" name="intellij-core" level="project" />
<orderEntry type="library" name="kotlin-runtime" level="project" /> <orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="module" module-name="frontend" />
</component> </component>
</module> </module>
@@ -1,129 +0,0 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.config;
import com.intellij.openapi.util.Key;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@SuppressWarnings("unchecked")
public class CompilerConfiguration {
private final Map<Key, Object> map = new HashMap<Key, Object>();
private boolean readOnly = false;
@Nullable
public <T> T get(@NotNull CompilerConfigurationKey<T> key) {
T data = (T) map.get(key.ideaKey);
return data == null ? null : unmodifiable(data);
}
@NotNull
public <T> T get(@NotNull CompilerConfigurationKey<T> key, @NotNull T defaultValue) {
T data = (T) map.get(key.ideaKey);
return data == null ? defaultValue : unmodifiable(data);
}
@NotNull
public <T> List<T> getList(@NotNull CompilerConfigurationKey<List<T>> key) {
List<T> data = (List<T>) map.get(key.ideaKey);
if (data == null) {
return Collections.emptyList();
}
else {
return Collections.unmodifiableList(data);
}
}
public <T> void put(@NotNull CompilerConfigurationKey<T> key, @Nullable T value) {
checkReadOnly();
map.put(key.ideaKey, value);
}
public <T> void add(@NotNull CompilerConfigurationKey<List<T>> key, @NotNull T value) {
checkReadOnly();
Key<List<T>> ideaKey = key.ideaKey;
if (map.get(ideaKey) == null) {
map.put(ideaKey, new ArrayList<T>());
}
List<T> list = (List<T>) map.get(ideaKey);
list.add(value);
}
public <T> void addAll(@NotNull CompilerConfigurationKey<List<T>> key, @NotNull Collection<T> values) {
checkReadOnly();
checkForNullElements(values);
Key<List<T>> ideaKey = key.ideaKey;
if (map.get(ideaKey) == null) {
map.put(ideaKey, new ArrayList<T>());
}
List<T> list = (List<T>) map.get(ideaKey);
list.addAll(values);
}
public CompilerConfiguration copy() {
CompilerConfiguration copy = new CompilerConfiguration();
copy.map.putAll(map);
return copy;
}
private void checkReadOnly() {
if (readOnly) {
throw new IllegalStateException("CompilerConfiguration is read-only");
}
}
public void setReadOnly(boolean readOnly) {
if (readOnly != this.readOnly) {
checkReadOnly();
this.readOnly = readOnly;
}
}
@NotNull
private static <T> T unmodifiable(@NotNull T object) {
if (object instanceof List) {
return (T) Collections.unmodifiableList((List) object);
}
else if (object instanceof Map) {
return (T) Collections.unmodifiableMap((Map) object);
}
else if (object instanceof Collection) {
return (T) Collections.unmodifiableCollection((Collection) object);
}
else {
return object;
}
}
@Override
public String toString() {
return map.toString();
}
private static <T> void checkForNullElements(Collection<T> values) {
int index = 0;
for (T value : values) {
if (value == null) {
throw new IllegalArgumentException("Element " + index
+ " is null, while null values in compiler configuration are not allowed");
}
index++;
}
}
}
@@ -1,34 +0,0 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.config;
import com.intellij.openapi.util.Key;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public class CompilerConfigurationKey<T> {
Key<T> ideaKey;
private CompilerConfigurationKey(@NotNull @NonNls String name) {
ideaKey = Key.create(name);
}
@NotNull
public static <T> CompilerConfigurationKey<T> create(@NotNull @NonNls String name) {
return new CompilerConfigurationKey<T>(name);
}
}
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.compiler.plugin package org.jetbrains.kotlin.compiler.plugin
import org.jetbrains.jet.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
public trait CommandLineProcessor { public trait CommandLineProcessor {
public val pluginId: String public val pluginId: String
@@ -16,9 +16,9 @@
package org.jetbrains.kotlin.compiler.plugin package org.jetbrains.kotlin.compiler.plugin
import org.jetbrains.jet.config.CompilerConfigurationKey
import org.jetbrains.jet.config.CompilerConfiguration
import com.intellij.mock.MockProject import com.intellij.mock.MockProject
import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.CompilerConfiguration
public trait ComponentRegistrar { public trait ComponentRegistrar {
class object { class object {
@@ -142,7 +142,6 @@ import org.jetbrains.kotlin.completion.handlers.AbstractKeywordCompletionHandler
import org.jetbrains.kotlin.idea.kdoc.AbstractKDocHighlightingTest import org.jetbrains.kotlin.idea.kdoc.AbstractKDocHighlightingTest
import org.jetbrains.kotlin.addImport.AbstractAddImportTest import org.jetbrains.kotlin.addImport.AbstractAddImportTest
import org.jetbrains.kotlin.idea.highlighter.* import org.jetbrains.kotlin.idea.highlighter.*
import org.jetbrains.jet.android.AbstractCrossParserTest
import org.jetbrains.jet.android.AbstractAndroidCompletionTest import org.jetbrains.jet.android.AbstractAndroidCompletionTest
import org.jetbrains.jet.android.AbstractAndroidGotoTest import org.jetbrains.jet.android.AbstractAndroidGotoTest
import org.jetbrains.jet.jps.build.android.AbstractAndroidJpsTestCase import org.jetbrains.jet.jps.build.android.AbstractAndroidJpsTestCase
@@ -151,6 +150,7 @@ import org.jetbrains.jet.android.AbstractAndroidFindUsagesTest
import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidBytecodeShapeTest import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidBytecodeShapeTest
import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidXml2KConversionTest import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidXml2KConversionTest
import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidBoxTest import org.jetbrains.jet.lang.resolve.android.test.AbstractAndroidBoxTest
import org.jetbrains.jet.android.AbstractParserResultEqualityTest
fun main(args: Array<String>) { fun main(args: Array<String>) {
System.setProperty("java.awt.headless", "true") System.setProperty("java.awt.headless", "true")
@@ -18,8 +18,8 @@ package org.jetbrains.jet.plugin.findUsages.handlers
import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.jet.plugin.references.JetSimpleNameReference import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
import org.jetbrains.jet.lang.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetPsiFactory
public trait SimpleNameReferenceExtension { public trait SimpleNameReferenceExtension {
class object { class object {
@@ -16,7 +16,6 @@
package org.jetbrains.jet.jps.build package org.jetbrains.jet.jps.build
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.jps.incremental.ModuleBuildTarget import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.incremental.CompileContext import org.jetbrains.jps.incremental.CompileContext
@@ -17,40 +17,38 @@
package org.jetbrains.kotlin.android package org.jetbrains.kotlin.android
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.jet.config.CompilerConfiguration
import com.intellij.mock.MockProject import com.intellij.mock.MockProject
import org.jetbrains.jet.config.CompilerConfigurationKey
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.resolve.android.* import org.jetbrains.jet.lang.resolve.android.*
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.utils.emptyOrSingletonList
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.jet.lang.descriptors.CallableDescriptor
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall
import org.jetbrains.jet.codegen.StackValue
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils
import org.jetbrains.jet.codegen.ClassBuilder
import org.jetbrains.org.objectweb.asm.Opcodes.* import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.jet.lang.psi.JetClassOrObject
import org.jetbrains.jet.codegen.FunctionCodegen
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.jet.lang.psi.JetClass import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.jet.lang.psi.JetClassBody import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.codegen.StackValue
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaClassDescriptor import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
import org.jetbrains.kotlin.codegen.ClassBuilder
import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.psi.JetClass
import org.jetbrains.kotlin.psi.JetClassBody
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.kotlin.codegen.FunctionCodegen
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
public object AndroidConfigurationKeys { public object AndroidConfigurationKeys {
@@ -83,7 +81,7 @@ public class AndroidCommandLineProcessor : CommandLineProcessor {
public class CliAndroidDeclarationsProvider(private val project: Project) : ExternalDeclarationsProvider { public class CliAndroidDeclarationsProvider(private val project: Project) : ExternalDeclarationsProvider {
override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> { override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> {
val parser = ServiceManager.getService<AndroidUIXmlProcessor>(project, javaClass<AndroidUIXmlProcessor>()) val parser = ServiceManager.getService<AndroidUIXmlProcessor>(project, javaClass<AndroidUIXmlProcessor>())
return emptyOrSingletonList(parser.parseToPsi()) return parser.parseToPsi() ?: listOf()
} }
} }
@@ -218,7 +216,7 @@ public class AndroidComponentRegistrar : ComponentRegistrar {
public override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) { public override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
val androidResPath = configuration.get(AndroidConfigurationKeys.ANDROID_RES_PATH) val androidResPath = configuration.get(AndroidConfigurationKeys.ANDROID_RES_PATH)
val androidManifest = configuration.get(AndroidConfigurationKeys.ANDROID_MANIFEST) val androidManifest = configuration.get(AndroidConfigurationKeys.ANDROID_MANIFEST)
project.registerService(javaClass<AndroidUIXmlProcessor>(), CliAndroidUIXmlProcessor(project, androidResPath, androidManifest)) project.registerService(javaClass<AndroidUIXmlProcessor>(), CliAndroidUIXmlProcessor(project, androidManifest, androidResPath))
ExternalDeclarationsProvider.registerExtension(project, CliAndroidDeclarationsProvider(project)) ExternalDeclarationsProvider.registerExtension(project, CliAndroidDeclarationsProvider(project))
ExpressionCodegenExtension.registerExtension(project, AndroidExpressionCodegen()) ExpressionCodegenExtension.registerExtension(project, AndroidExpressionCodegen())
@@ -20,7 +20,8 @@ import com.intellij.openapi.util.Key
public object AndroidConst { public object AndroidConst {
val ANDROID_USER_PACKAGE: Key<String> = Key.create<String>("ANDROID_USER_PACKAGE") val ANDROID_USER_PACKAGE: Key<String> = Key.create<String>("ANDROID_USER_PACKAGE")
val SYNTHETIC_FILENAME: String = "ANDROIDXML.kt" val SYNTHETIC_FILENAME: String = "ANDROIDXML"
val SYNTHETIC_PACKAGE: String = "kotlinx.android.synthetic."
val ANDROID_NAMESPACE: String = "android" val ANDROID_NAMESPACE: String = "android"
val ID_ATTRIBUTE_NO_NAMESPACE: String = "id" val ID_ATTRIBUTE_NO_NAMESPACE: String = "id"
@@ -19,21 +19,19 @@ package org.jetbrains.jet.lang.resolve.android
import com.intellij.psi.PsiFile 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
import org.jetbrains.jet.lang.psi.JetFile
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import com.intellij.psi.PsiField import com.intellij.psi.PsiField
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import org.jetbrains.jet.utils.emptyOrSingletonList
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Computable
import com.intellij.openapi.module.ModuleServiceManager import com.intellij.openapi.module.ModuleServiceManager
fun isAndroidSyntheticFile(f: PsiFile?): Boolean { fun isAndroidSyntheticFile(f: PsiFile?): Boolean {
return f?.getUserData(org.jetbrains.jet.lang.resolve.android.AndroidConst.ANDROID_USER_PACKAGE) != null return f?.getUserData(AndroidConst.ANDROID_USER_PACKAGE) != null
} }
public fun isAndroidSyntheticElement(element: PsiElement?): Boolean { public fun isAndroidSyntheticElement(element: PsiElement?): Boolean {
return isAndroidSyntheticFile(ApplicationManager.getApplication()!!.runReadAction(Computable { return isAndroidSyntheticFile(ApplicationManager.getApplication().runReadAction(Computable {
element?.getContainingFile() element?.getContainingFile()
})) }))
} }
@@ -32,17 +32,18 @@ public class CliAndroidUIXmlProcessor(
CliAndroidResourceManager(project, manifestPath, mainResDirectory) CliAndroidResourceManager(project, manifestPath, mainResDirectory)
} }
override fun parseSingleFile(file: PsiFile): String { override fun parseSingleFile(file: PsiFile): Collection<AndroidWidget> {
val ids: MutableCollection<AndroidWidget> = ArrayList() val widgets: MutableCollection<AndroidWidget> = ArrayList()
val handler = AndroidXmlHandler(resourceManager, { id, clazz -> ids.add(AndroidWidget(id, clazz)) }) val handler = AndroidXmlHandler(resourceManager, { id, clazz -> widgets.add(AndroidWidget(id, clazz)) })
try { try {
val inputStream = ByteArrayInputStream(file.getVirtualFile().contentsToByteArray()) val inputStream = ByteArrayInputStream(file.getVirtualFile().contentsToByteArray())
resourceManager.saxParser.parse(inputStream, handler) resourceManager.saxParser.parse(inputStream, handler)
return produceKotlinProperties(KotlinStringWriter(), ids).toString() return widgets
} }
catch (e: Throwable) { catch (e: Throwable) {
LOG.error(e) LOG.error(e)
return "" return listOf()
} }
} }
} }
@@ -17,12 +17,12 @@
package org.jetbrains.jet.lang.resolve.android package org.jetbrains.jet.lang.resolve.android
trait KotlinWriter { trait KotlinWriter {
fun output(): StringBuffer fun toStringBuffer(): StringBuffer
} }
class KotlinStringWriter : KotlinWriter { class KotlinStringWriter : KotlinWriter {
private val ctx = org.jetbrains.jet.lang.resolve.android.Context() private val ctx = Context()
private val imports = ctx.fork() private val imports = ctx.fork()
private val body = ctx.fork() private val body = ctx.fork()
@@ -91,9 +91,13 @@ class KotlinStringWriter : KotlinWriter {
body.newLine() body.newLine()
} }
override fun output(): StringBuffer { override fun toStringBuffer(): StringBuffer {
ctx.absorbChildren() ctx.absorbChildren()
return ctx.buffer return ctx.buffer
} }
override fun toString(): String {
return ctx.buffer.toString()
}
} }
@@ -16,20 +16,19 @@
package org.jetbrains.jet.lang.resolve.android.test package org.jetbrains.jet.lang.resolve.android.test
import org.jetbrains.jet.codegen.generated.AbstractBlackBoxCodegenTest
import org.jetbrains.jet.config.CompilerConfiguration
import java.io.File import java.io.File
import com.intellij.util.Processor import com.intellij.util.Processor
import org.jetbrains.jet.ConfigurationKind
import org.jetbrains.jet.TestJdkKind
import org.jetbrains.jet.JetTestUtils
import java.util.regex.Pattern import java.util.regex.Pattern
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import java.util.ArrayList import java.util.ArrayList
import java.util.Collections import java.util.Collections
import com.intellij.util.ArrayUtil import com.intellij.util.ArrayUtil
import org.jetbrains.jet.JetTestCaseBuilder import org.jetbrains.kotlin.codegen.generated.AbstractBlackBoxCodegenTest
import org.jetbrains.jet.codegen.CodegenTestFiles import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.codegen.CodegenTestFiles
public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() { public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() {
@@ -96,7 +95,7 @@ public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() {
myFiles = CodegenTestFiles.create( myFiles = CodegenTestFiles.create(
myEnvironment!!.getProject(), myEnvironment!!.getProject(),
ArrayUtil.toStringArray(files), ArrayUtil.toStringArray(files),
JetTestCaseBuilder.getHomeDirectory() + "/plugins/android-compiler-plugin/testData" JetTestUtils.getHomeDirectory() + "/plugins/android-compiler-plugin/testData"
) )
blackBox(); blackBox();
} }
@@ -16,18 +16,15 @@
package org.jetbrains.jet.lang.resolve.android.test package org.jetbrains.jet.lang.resolve.android.test
import org.jetbrains.jet.codegen.AbstractBytecodeTextTest
import org.jetbrains.jet.JetTestUtils
import org.jetbrains.jet.ConfigurationKind
import org.jetbrains.jet.TestJdkKind
import org.jetbrains.jet.config.CompilerConfiguration
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.kotlin.android.AndroidConfigurationKeys import org.jetbrains.kotlin.android.AndroidConfigurationKeys
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.android.AndroidExpressionCodegen import org.jetbrains.kotlin.android.AndroidExpressionCodegen
import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.config.CompilerConfiguration
public abstract class AbstractAndroidBytecodeShapeTest : AbstractBytecodeTextTest() { public abstract class AbstractAndroidBytecodeShapeTest : AbstractBytecodeTextTest() {
@@ -21,17 +21,16 @@ import java.io.File
import java.io.IOException import java.io.IOException
import java.util.Scanner import java.util.Scanner
import java.io.FileWriter import java.io.FileWriter
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.jet.config.CompilerConfiguration
import org.jetbrains.jet.JetTestUtils
import org.jetbrains.jet.ConfigurationKind
import org.jetbrains.jet.TestJdkKind
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys
import org.junit.Assert import org.junit.Assert
import kotlin.test.fail import kotlin.test.fail
import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
import kotlin.test.assertEquals
import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() { public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() {
@@ -41,7 +40,15 @@ public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() {
val actual = parser.parse() val actual = parser.parse()
JetTestUtils.assertEqualsToFile(File(path + "/layout.kt"), actual) val layoutFiles = File(path).listFiles {
it.isFile() && it.name.startsWith("layout") && it.name.endsWith(".kt")
}?.sortBy { it.name } ?: listOf()
assertEquals(layoutFiles.size(), actual.size())
for ((index, file) in layoutFiles.withIndex()) {
JetTestUtils.assertEqualsToFile(file, actual[index])
}
} }
public fun doNoManifestTest(path: String) { public fun doNoManifestTest(path: String) {
@@ -17,10 +17,10 @@
package org.jetbrains.jet.lang.resolve.android.test; package org.jetbrains.jet.lang.resolve.android.test;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.InnerTestClasses;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -17,10 +17,9 @@
package org.jetbrains.jet.lang.resolve.android.test; package org.jetbrains.jet.lang.resolve.android.test;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -17,10 +17,10 @@
package org.jetbrains.jet.lang.resolve.android.test; package org.jetbrains.jet.lang.resolve.android.test;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.InnerTestClasses;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -18,17 +18,16 @@ package org.jetbrains.jet.lang.resolve.android.test
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.utils.emptyOrSingletonList
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.kotlin.android.AndroidConfigurationKeys import org.jetbrains.kotlin.android.AndroidConfigurationKeys
import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.android.AndroidExpressionCodegen import org.jetbrains.kotlin.android.AndroidExpressionCodegen
import org.jetbrains.jet.config.CompilerConfiguration
import com.intellij.testFramework.UsefulTestCase import com.intellij.testFramework.UsefulTestCase
import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor
import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
private class AndroidTestExternalDeclarationsProvider( private class AndroidTestExternalDeclarationsProvider(
val project: Project, val project: Project,
@@ -37,7 +36,7 @@ private class AndroidTestExternalDeclarationsProvider(
) : ExternalDeclarationsProvider { ) : ExternalDeclarationsProvider {
override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> { override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> {
val parser = CliAndroidUIXmlProcessor(project, manifestPath, resPath) val parser = CliAndroidUIXmlProcessor(project, manifestPath, resPath)
return emptyOrSingletonList(parser.parseToPsi()) return parser.parseToPsi() ?: listOf()
} }
} }
@@ -15,5 +15,6 @@
<orderEntry type="module" module-name="idea" scope="PROVIDED" /> <orderEntry type="module" module-name="idea" scope="PROVIDED" />
<orderEntry type="module" module-name="compiler-tests" scope="TEST" /> <orderEntry type="module" module-name="compiler-tests" scope="TEST" />
<orderEntry type="module" module-name="cli" scope="TEST" /> <orderEntry type="module" module-name="cli" scope="TEST" />
<orderEntry type="module" module-name="light-classes" />
</component> </component>
</module> </module>
@@ -21,18 +21,18 @@ import com.intellij.psi.PsiElement
import com.intellij.usageView.UsageInfo import com.intellij.usageView.UsageInfo
import com.intellij.util.Processor import com.intellij.util.Processor
import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.find.findUsages.FindUsagesOptions
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.actionSystem.DataContext
import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
import com.intellij.psi.xml.XmlAttribute import com.intellij.psi.xml.XmlAttribute
import org.jetbrains.jet.lang.psi.JetProperty
import org.jetbrains.android.util.AndroidResourceUtil import org.jetbrains.android.util.AndroidResourceUtil
import java.util.ArrayList import java.util.ArrayList
import com.intellij.find.findUsages.JavaVariableFindUsagesOptions import com.intellij.find.findUsages.JavaVariableFindUsagesOptions
import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindUsagesHandlerDecorator import org.jetbrains.jet.plugin.findUsages.handlers.KotlinFindUsagesHandlerDecorator
import org.jetbrains.jet.plugin.util.application.runReadAction import org.jetbrains.kotlin.psi.JetNamedDeclaration
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.idea.util.application.runReadAction
class AndroidFindUsageHandlerDecorator : KotlinFindUsagesHandlerDecorator { class AndroidFindUsageHandlerDecorator : KotlinFindUsagesHandlerDecorator {
override fun decorateHandler(element: PsiElement, forHighlightUsages: Boolean, delegate: FindUsagesHandler): FindUsagesHandler { override fun decorateHandler(element: PsiElement, forHighlightUsages: Boolean, delegate: FindUsagesHandler): FindUsagesHandler {
@@ -23,15 +23,15 @@ import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.impl.source.tree.LeafPsiElement
import org.jetbrains.jet.plugin.references.JetSimpleNameReference
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression
import org.jetbrains.jet.lang.psi.JetProperty
import com.intellij.psi.impl.light.LightElement import com.intellij.psi.impl.light.LightElement
import com.intellij.psi.xml.XmlAttribute import com.intellij.psi.xml.XmlAttribute
import com.intellij.psi.PsiField import com.intellij.psi.PsiField
import com.intellij.openapi.module.ModuleServiceManager import com.intellij.openapi.module.ModuleServiceManager
import org.jetbrains.jet.plugin.caches.resolve.getModuleInfo import org.jetbrains.kotlin.psi.JetSimpleNameExpression
import org.jetbrains.jet.plugin.caches.resolve.ModuleSourceInfo import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.resolve.getModuleInfo
public class AndroidGotoDeclarationHandler : GotoDeclarationHandler { public class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
@@ -18,8 +18,6 @@ package org.jetbrains.jet.plugin.android
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.refactoring.rename.RenamePsiElementProcessor import com.intellij.refactoring.rename.RenamePsiElementProcessor
import org.jetbrains.jet.asJava.*
import org.jetbrains.jet.lang.psi.JetProperty
import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
@@ -30,15 +28,20 @@ import org.jetbrains.android.util.AndroidResourceUtil
import com.intellij.psi.xml.XmlAttribute import com.intellij.psi.xml.XmlAttribute
import com.intellij.psi.impl.light.LightElement import com.intellij.psi.impl.light.LightElement
import com.intellij.openapi.module.ModuleServiceManager import com.intellij.openapi.module.ModuleServiceManager
import org.jetbrains.jet.plugin.caches.resolve.getModuleInfo
import org.jetbrains.jet.plugin.caches.resolve.ModuleSourceInfo
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.psi.moduleInfo
import org.jetbrains.jet.lang.resolve.android.nameToIdDeclaration import org.jetbrains.jet.lang.resolve.android.nameToIdDeclaration
import org.jetbrains.jet.lang.resolve.android.idToName import org.jetbrains.jet.lang.resolve.android.idToName
import com.intellij.psi.PsiField import com.intellij.psi.PsiField
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import org.jetbrains.jet.lang.resolve.android.AndroidConst
import com.intellij.openapi.module.ModuleUtil
import com.intellij.openapi.module.ModuleUtilCore
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.resolve.getModuleInfo
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.moduleInfo
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
public class AndroidRenameProcessor : RenamePsiElementProcessor() { public class AndroidRenameProcessor : RenamePsiElementProcessor() {
@@ -46,7 +49,7 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
// Either renaming synthetic property, or value in layout xml, or R class field // Either renaming synthetic property, or value in layout xml, or R class field
return (element.namedUnwrappedElement is JetProperty && return (element.namedUnwrappedElement is JetProperty &&
isAndroidSyntheticElement(element.namedUnwrappedElement)) || element is XmlAttributeValue || isAndroidSyntheticElement(element.namedUnwrappedElement)) || element is XmlAttributeValue ||
isRClassField(element) isRClassField(element)
} }
private fun isRClassField(element: PsiElement): Boolean { private fun isRClassField(element: PsiElement): Boolean {
@@ -17,13 +17,13 @@
package org.jetbrains.jet.plugin.android package org.jetbrains.jet.plugin.android
import org.jetbrains.jet.plugin.findUsages.handlers.SimpleNameReferenceExtension import org.jetbrains.jet.plugin.findUsages.handlers.SimpleNameReferenceExtension
import org.jetbrains.jet.plugin.references.JetSimpleNameReference
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement import org.jetbrains.jet.lang.resolve.android.isAndroidSyntheticElement
import org.jetbrains.android.dom.wrappers.ValueResourceElementWrapper import org.jetbrains.android.dom.wrappers.ValueResourceElementWrapper
import org.jetbrains.jet.lang.psi.JetProperty
import com.intellij.psi.impl.light.LightElement import com.intellij.psi.impl.light.LightElement
import org.jetbrains.jet.lang.psi.JetPsiFactory import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.psi.JetPsiFactory
public class AndroidSimpleNameReferenceExtension : SimpleNameReferenceExtension { public class AndroidSimpleNameReferenceExtension : SimpleNameReferenceExtension {
override fun isReferenceTo(reference: JetSimpleNameReference, element: PsiElement): Boolean? { override fun isReferenceTo(reference: JetSimpleNameReference, element: PsiElement): Boolean? {
@@ -18,13 +18,13 @@ package org.jetbrains.jet.plugin.android
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.jet.extensions.ExternalDeclarationsProvider import org.jetbrains.jet.extensions.ExternalDeclarationsProvider
import org.jetbrains.jet.analyzer.ModuleInfo
import org.jetbrains.jet.lang.psi.JetFile
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlProcessor
import org.jetbrains.jet.plugin.caches.resolve.ModuleSourceInfo
import com.intellij.openapi.module.ModuleServiceManager import com.intellij.openapi.module.ModuleServiceManager
import org.jetbrains.jet.lang.psi.moduleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.moduleInfo
public class IDEAndroidExternalDeclarationsProvider(private val project: Project) : ExternalDeclarationsProvider { public class IDEAndroidExternalDeclarationsProvider(private val project: Project) : ExternalDeclarationsProvider {
override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> { override fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<JetFile> {
@@ -32,9 +32,9 @@ public class IDEAndroidExternalDeclarationsProvider(private val project: Project
val module = moduleInfo.module val module = moduleInfo.module
val parser = ModuleServiceManager.getService<AndroidUIXmlProcessor>(module, javaClass<AndroidUIXmlProcessor>()) val parser = ModuleServiceManager.getService<AndroidUIXmlProcessor>(module, javaClass<AndroidUIXmlProcessor>())
val syntheticFile = parser.parseToPsi() val syntheticFiles = parser.parseToPsi()
syntheticFile?.moduleInfo = moduleInfo syntheticFiles?.forEach { it.moduleInfo = moduleInfo }
return if (syntheticFile != null) listOf(syntheticFile) else listOf() return syntheticFiles ?: listOf()
} }
} }
@@ -16,23 +16,19 @@
package org.jetbrains.jet.android package org.jetbrains.jet.android
import org.jetbrains.jet.plugin.PluginTestCaseBase
import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.PathManager
import com.intellij.codeInsight.completion.CompletionType import com.intellij.codeInsight.completion.CompletionType
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import java.io.File import java.io.File
import org.jetbrains.jet.completion.util.testCompletion
import org.jetbrains.jet.plugin.project.TargetPlatform
import com.intellij.ide.startup.impl.StartupManagerImpl import com.intellij.ide.startup.impl.StartupManagerImpl
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import com.intellij.openapi.startup.StartupManager import com.intellij.openapi.startup.StartupManager
import org.jetbrains.jet.JetTestCaseBuilder
import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode
import com.intellij.psi.impl.PsiManagerEx import com.intellij.psi.impl.PsiManagerEx
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver
import com.android.SdkConstants import com.android.SdkConstants
import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.CodeInsightSettings
import org.jetbrains.kotlin.completion.util.testCompletion
import org.jetbrains.kotlin.idea.project.TargetPlatform
public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() {
private var kotlinInternalModeOriginalValue: Boolean = false private var kotlinInternalModeOriginalValue: Boolean = false
@@ -16,7 +16,6 @@
package org.jetbrains.jet.android package org.jetbrains.jet.android
import org.jetbrains.jet.plugin.PluginTestCaseBase
import kotlin.test.assertTrue import kotlin.test.assertTrue
import com.intellij.codeInsight.TargetElementUtilBase import com.intellij.codeInsight.TargetElementUtilBase
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction
@@ -18,11 +18,10 @@ package org.jetbrains.jet.android
import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.PathManager
import com.android.SdkConstants import com.android.SdkConstants
import org.jetbrains.jet.plugin.PluginTestCaseBase
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction
import kotlin.test.fail import kotlin.test.fail
import kotlin.test.assertEquals import kotlin.test.assertEquals
import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.kotlin.psi.JetProperty
public abstract class AbstractAndroidGotoTest : KotlinAndroidTestCase() { public abstract class AbstractAndroidGotoTest : KotlinAndroidTestCase() {
@@ -21,12 +21,11 @@ import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil
import com.intellij.codeInsight.TargetElementUtilBase import com.intellij.codeInsight.TargetElementUtilBase
import com.intellij.refactoring.rename.RenamePsiElementProcessor import com.intellij.refactoring.rename.RenamePsiElementProcessor
import com.intellij.refactoring.rename.RenameProcessor import com.intellij.refactoring.rename.RenameProcessor
import org.jetbrains.jet.plugin.PluginTestCaseBase
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.kotlin.psi.JetProperty
public abstract class AbstractAndroidRenameTest : KotlinAndroidTestCase() { public abstract class AbstractAndroidRenameTest : KotlinAndroidTestCase() {
@@ -16,19 +16,17 @@
package org.jetbrains.jet.android package org.jetbrains.jet.android
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor import org.jetbrains.jet.lang.resolve.android.CliAndroidUIXmlProcessor
import org.jetbrains.jet.JetTestUtils
import org.jetbrains.jet.ConfigurationKind
import org.jetbrains.jet.TestJdkKind
import org.jetbrains.jet.plugin.android.IDEAndroidUIXmlProcessor import org.jetbrains.jet.plugin.android.IDEAndroidUIXmlProcessor
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys
import kotlin.test.assertEquals import kotlin.test.assertEquals
import org.jetbrains.jet.plugin.android.TestConst import org.jetbrains.jet.plugin.android.TestConst
import org.jetbrains.jet.plugin.PluginTestCaseBase
import org.jetbrains.kotlin.android.AndroidConfigurationKeys import org.jetbrains.kotlin.android.AndroidConfigurationKeys
import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles
import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.module.ModuleManager
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment
import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
public abstract class AbstractParserResultEqualityTest : KotlinAndroidTestCase() { public abstract class AbstractParserResultEqualityTest : KotlinAndroidTestCase() {
public fun doTest(path: String) { public fun doTest(path: String) {
@@ -38,8 +36,8 @@ public abstract class AbstractParserResultEqualityTest : KotlinAndroidTestCase()
val cliParser = CliAndroidUIXmlProcessor(project, path + "../AndroidManifest.xml", path + getResDir() + "/layout/") val cliParser = CliAndroidUIXmlProcessor(project, path + "../AndroidManifest.xml", path + getResDir() + "/layout/")
val ideParser = IDEAndroidUIXmlProcessor(ModuleManager.getInstance(project).getModules()[0]) val ideParser = IDEAndroidUIXmlProcessor(ModuleManager.getInstance(project).getModules()[0])
val cliResult = cliParser.parseToPsi()!!.getText() val cliResult = cliParser.parseToPsi()!!.joinToString("\n\n")
val ideResult = ideParser.parseToPsi()!!.getText() val ideResult = ideParser.parseToPsi()!!.joinToString("\n\n")
assertEquals(cliResult, ideResult) assertEquals(cliResult, ideResult)
} }
@@ -17,10 +17,9 @@
package org.jetbrains.jet.android; package org.jetbrains.jet.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -17,10 +17,9 @@
package org.jetbrains.jet.android; package org.jetbrains.jet.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -17,10 +17,9 @@
package org.jetbrains.jet.android; package org.jetbrains.jet.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -17,10 +17,9 @@
package org.jetbrains.jet.android; package org.jetbrains.jet.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -21,7 +21,6 @@ import com.android.ide.common.rendering.RenderSecurityManager;
import com.intellij.analysis.AnalysisScope; import com.intellij.analysis.AnalysisScope;
import com.intellij.codeInspection.GlobalInspectionTool; import com.intellij.codeInspection.GlobalInspectionTool;
import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.InspectionManager;
import com.intellij.codeInspection.ex.GlobalInspectionContextImpl;
import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper; import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper;
import com.intellij.codeInspection.ex.InspectionManagerEx; import com.intellij.codeInspection.ex.InspectionManagerEx;
import com.intellij.facet.FacetManager; import com.intellij.facet.FacetManager;
@@ -43,13 +42,14 @@ import com.intellij.testFramework.TestLogger;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
import com.intellij.testFramework.fixtures.*; import com.intellij.testFramework.fixtures.*;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl; import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.testFramework.fixtures.impl.GlobalInspectionContextForTests;
import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.facet.AndroidRootUtil; import org.jetbrains.android.facet.AndroidRootUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.kotlin.idea.references.BuiltInsReferenceResolver;
import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode; import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver; import org.jetbrains.kotlin.test.JetTestUtils;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -147,7 +147,7 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
} }
((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities(); ((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities();
VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory()); VfsRootAccess.allowRootAccess(JetTestUtils.getHomeDirectory());
kotlinInternalModeOriginalValue = KotlinInternalMode.OBJECT$.getEnabled(); kotlinInternalModeOriginalValue = KotlinInternalMode.OBJECT$.getEnabled();
KotlinInternalMode.OBJECT$.setEnabled(true); KotlinInternalMode.OBJECT$.setEnabled(true);
@@ -233,7 +233,7 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
@Override @Override
public void tearDown() throws Exception { public void tearDown() throws Exception {
KotlinInternalMode.OBJECT$.setEnabled(kotlinInternalModeOriginalValue); KotlinInternalMode.OBJECT$.setEnabled(kotlinInternalModeOriginalValue);
VfsRootAccess.disallowRootAccess(JetTestCaseBuilder.getHomeDirectory()); VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory());
Set<JetFile> builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources(); Set<JetFile> builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources();
FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager(); FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager();
@@ -293,10 +293,10 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
scope.invalidate(); scope.invalidate();
final InspectionManagerEx inspectionManager = (InspectionManagerEx)InspectionManager.getInstance(getProject()); final InspectionManagerEx inspectionManager = (InspectionManagerEx)InspectionManager.getInstance(getProject());
final GlobalInspectionContextImpl globalContext = final GlobalInspectionContextForTests globalContext =
CodeInsightTestFixtureImpl.createGlobalContextForTool(scope, getProject(), inspectionManager, wrapper); CodeInsightTestFixtureImpl.createGlobalContextForTool(scope, getProject(), inspectionManager, wrapper);
InspectionTestUtil.runTool(wrapper, scope, globalContext, inspectionManager); InspectionTestUtil.runTool(wrapper, scope, globalContext);
InspectionTestUtil.compareToolResults(globalContext, wrapper, false, getTestDataPath() + globalTestDir); InspectionTestUtil.compareToolResults(globalContext, wrapper, false, getTestDataPath() + globalTestDir);
} }
@@ -28,7 +28,6 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.util.Segment; import com.intellij.openapi.util.Segment;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.VirtualFileManager;
@@ -38,13 +37,11 @@ import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.testFramework.IdeaTestCase; import com.intellij.testFramework.IdeaTestCase;
import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.UsefulTestCase;
import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import com.intellij.testFramework.fixtures.CodeInsightTestFixture;
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture;
import org.jetbrains.android.dom.wrappers.LazyValueResourceElementWrapper; import org.jetbrains.android.dom.wrappers.LazyValueResourceElementWrapper;
import org.jetbrains.android.sdk.*; import org.jetbrains.android.sdk.*;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import java.io.File; import java.io.File;
@@ -83,7 +80,7 @@ public abstract class KotlinAndroidTestCaseBase extends UsefulTestCase {
} }
public static String getPluginTestDataPathBase() { public static String getPluginTestDataPathBase() {
return JetTestCaseBuilder.getHomeDirectory() + TEST_DATA_PROJECT_RELATIVE; return JetTestUtils.getHomeDirectory() + TEST_DATA_PROJECT_RELATIVE;
} }
public String getTestDataPath() { public String getTestDataPath() {
@@ -17,10 +17,9 @@
package org.jetbrains.jet.android; package org.jetbrains.jet.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
@@ -24,8 +24,8 @@ import java.io.File
import org.jetbrains.jps.android.AndroidJpsUtil import org.jetbrains.jps.android.AndroidJpsUtil
import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.android.AndroidCommandLineProcessor import org.jetbrains.kotlin.android.AndroidCommandLineProcessor
import org.jetbrains.jet.utils.PathUtil
import org.jetbrains.kotlin.compiler.plugin.getPluginOptionString import org.jetbrains.kotlin.compiler.plugin.getPluginOptionString
import com.intellij.util.PathUtil
public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider { public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider {
private val jarFileName = "android-compiler-plugin.jar" private val jarFileName = "android-compiler-plugin.jar"
@@ -42,16 +42,16 @@ public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider {
} }
override fun getClasspath(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List<String> { override fun getClasspath(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List<String> {
val inJar = PathUtil.getJarPathForClass(javaClass).isFile() val inJar = File(PathUtil.getJarPathForClass(javaClass)).isFile()
val manifestFile = getAndroidManifest(moduleBuildTarget.getModule()) val manifestFile = getAndroidManifest(moduleBuildTarget.getModule())
return if (manifestFile != null) { return if (manifestFile != null) {
listOf( listOf(
if (inJar) { if (inJar) {
val libDirectory = PathUtil.getJarPathForClass(javaClass).getParentFile().getParentFile() val libDirectory = File(PathUtil.getJarPathForClass(javaClass)).getParentFile().getParentFile()
File(libDirectory, jarFileName).getAbsolutePath() File(libDirectory, jarFileName).getAbsolutePath()
} else { } else {
// We're in tests now (in out/production/android-jps-plugin) // We're in tests now (in out/production/android-jps-plugin)
val kotlinProjectDirectory = PathUtil.getJarPathForClass(javaClass).getParentFile().getParentFile().getParentFile() val kotlinProjectDirectory = File(PathUtil.getJarPathForClass(javaClass)).getParentFile().getParentFile().getParentFile()
File(kotlinProjectDirectory, "dist/kotlinc/lib/$jarFileName").getAbsolutePath() File(kotlinProjectDirectory, "dist/kotlinc/lib/$jarFileName").getAbsolutePath()
}) })
} }
@@ -17,10 +17,9 @@
package org.jetbrains.jet.jps.build.android; package org.jetbrains.jet.jps.build.android;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;