Convert KotlinScriptDefinitionProvider to kotlin - phase 2 - convert; related fixes and refactorings

This commit is contained in:
Ilya Chernikov
2016-05-31 17:39:02 +02:00
parent b9836d8c87
commit d63b53886c
3 changed files with 36 additions and 54 deletions
@@ -55,7 +55,8 @@ class LazyScriptClassMemberScope(
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
val file = scriptDescriptor.scriptInfo.script.getContainingKtFile()
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file) ?:
throw RuntimeException("file ${file.name} is not a script")
return scriptDefinition.getScriptParameters(scriptDescriptor).mapIndexed { index, scriptParameter ->
ValueParameterDescriptorImpl(
constructor, null, index, Annotations.EMPTY, scriptParameter.name, scriptParameter.type,
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.data.KtScriptInfo
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
import org.jetbrains.kotlin.resolve.source.toSourceElement
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
import org.jetbrains.kotlin.script.ScriptParameter
import org.jetbrains.kotlin.script.ScriptPriorities
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeSubstitutor
@@ -55,36 +55,33 @@ class LazyScriptDescriptor(
override fun getPriority() = priority
private val scriptDefinition: KotlinScriptDefinition
by lazy {
val file = scriptInfo.script.getContainingKtFile()
KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file) ?:
throw RuntimeException("file ${file.name} is not a script")
}
override fun substitute(substitutor: TypeSubstitutor) = this
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R {
return visitor.visitScriptDescriptor(this, data)
}
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
visitor.visitScriptDescriptor(this, data)
override fun createMemberScope(
c: LazyClassContext,
declarationProvider: ClassMemberDeclarationProvider): LazyScriptClassMemberScope {
return LazyScriptClassMemberScope(
override fun createMemberScope( c: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider): LazyScriptClassMemberScope =
LazyScriptClassMemberScope(
// Must be a ResolveSession for scripts
c as ResolveSession,
declarationProvider,
this,
c.trace
)
}
override fun getUnsubstitutedPrimaryConstructor() = super.getUnsubstitutedPrimaryConstructor()!!
override fun getInjectedSupertypes(): List<KotlinType>? {
val file = scriptInfo.script.getContainingKtFile()
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
val superclasses = scriptDefinition.getScriptSupertypes(this)
return if (superclasses.isEmpty()) null else superclasses
}
override fun getInjectedSupertypes(): List<KotlinType>? =
scriptDefinition.getScriptSupertypes(this).let { if (it.isEmpty()) null else it }
override fun getScriptParametersToPassToSuperclass(): List<Pair<Name, KotlinType>> {
val file = scriptInfo.script.getContainingKtFile()
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
val scriptParams = scriptDefinition.getScriptParameters(this)
return scriptDefinition.getScriptParametersToPassToSuperclass(this).map { name ->
Pair(name,
@@ -14,51 +14,35 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.script;
package org.jetbrains.kotlin.script
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import java.util.ArrayList;
import java.util.List;
class KotlinScriptDefinitionProvider {
private val definitions: MutableList<KotlinScriptDefinition> = arrayListOf(StandardScriptDefinition)
public class KotlinScriptDefinitionProvider {
private final List<KotlinScriptDefinition> definitions = new ArrayList<KotlinScriptDefinition>();
fun findScriptDefinition(psiFile: PsiFile): KotlinScriptDefinition? = definitions.firstOrNull { it.isScript(psiFile) }
public static KotlinScriptDefinitionProvider getInstance(Project project) {
return ServiceManager.getService(project, KotlinScriptDefinitionProvider.class);
fun isScript(psiFile: PsiFile): Boolean = findScriptDefinition(psiFile) != null
fun addScriptDefinition(scriptDefinition: KotlinScriptDefinition) {
definitions.add(0, scriptDefinition)
}
public KotlinScriptDefinitionProvider() {
definitions.add(StandardScriptDefinition.INSTANCE);
fun setScriptDefinitions(definitions: List<KotlinScriptDefinition>) {
this.definitions.clear()
this.definitions.addAll(definitions)
}
public KotlinScriptDefinition findScriptDefinition(PsiFile psiFile) {
for (KotlinScriptDefinition definition : definitions) {
if (definition.isScript(psiFile)) {
return definition;
}
}
return null;
fun removeScriptDefinition(scriptDefinition: KotlinScriptDefinition) {
definitions.remove(scriptDefinition)
}
public boolean isScript(PsiFile psiFile) {
return findScriptDefinition(psiFile) != null;
}
public void addScriptDefinition(@NotNull KotlinScriptDefinition scriptDefinition) {
definitions.add(0, scriptDefinition);
}
public void removeScriptDefinition(@NotNull KotlinScriptDefinition scriptDefinition) {
definitions.remove(scriptDefinition);
}
public void setScriptDefinitions(@NotNull List<KotlinScriptDefinition> definitions) {
this.definitions.clear();
this.definitions.addAll(definitions);
companion object {
@JvmStatic
fun getInstance(project: Project): KotlinScriptDefinitionProvider =
ServiceManager.getService(project, KotlinScriptDefinitionProvider::class.java)
}
}