Convert KotlinScriptDefinitionProvider to kotlin - phase 2 - convert; related fixes and refactorings
This commit is contained in:
+2
-1
@@ -55,7 +55,8 @@ class LazyScriptClassMemberScope(
|
|||||||
|
|
||||||
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
|
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
|
||||||
val file = scriptDescriptor.scriptInfo.script.getContainingKtFile()
|
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 ->
|
return scriptDefinition.getScriptParameters(scriptDescriptor).mapIndexed { index, scriptParameter ->
|
||||||
ValueParameterDescriptorImpl(
|
ValueParameterDescriptorImpl(
|
||||||
constructor, null, index, Annotations.EMPTY, scriptParameter.name, scriptParameter.type,
|
constructor, null, index, Annotations.EMPTY, scriptParameter.name, scriptParameter.type,
|
||||||
|
|||||||
+14
-17
@@ -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.data.KtScriptInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
|
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
|
||||||
import org.jetbrains.kotlin.resolve.source.toSourceElement
|
import org.jetbrains.kotlin.resolve.source.toSourceElement
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter
|
|
||||||
import org.jetbrains.kotlin.script.ScriptPriorities
|
import org.jetbrains.kotlin.script.ScriptPriorities
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
@@ -55,36 +55,33 @@ class LazyScriptDescriptor(
|
|||||||
|
|
||||||
override fun getPriority() = priority
|
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 substitute(substitutor: TypeSubstitutor) = this
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
|
||||||
return visitor.visitScriptDescriptor(this, data)
|
visitor.visitScriptDescriptor(this, data)
|
||||||
}
|
|
||||||
|
|
||||||
override fun createMemberScope(
|
override fun createMemberScope( c: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider): LazyScriptClassMemberScope =
|
||||||
c: LazyClassContext,
|
LazyScriptClassMemberScope(
|
||||||
declarationProvider: ClassMemberDeclarationProvider): LazyScriptClassMemberScope {
|
|
||||||
return LazyScriptClassMemberScope(
|
|
||||||
// Must be a ResolveSession for scripts
|
// Must be a ResolveSession for scripts
|
||||||
c as ResolveSession,
|
c as ResolveSession,
|
||||||
declarationProvider,
|
declarationProvider,
|
||||||
this,
|
this,
|
||||||
c.trace
|
c.trace
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
override fun getUnsubstitutedPrimaryConstructor() = super.getUnsubstitutedPrimaryConstructor()!!
|
override fun getUnsubstitutedPrimaryConstructor() = super.getUnsubstitutedPrimaryConstructor()!!
|
||||||
|
|
||||||
override fun getInjectedSupertypes(): List<KotlinType>? {
|
override fun getInjectedSupertypes(): List<KotlinType>? =
|
||||||
val file = scriptInfo.script.getContainingKtFile()
|
scriptDefinition.getScriptSupertypes(this).let { if (it.isEmpty()) null else it }
|
||||||
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
|
|
||||||
val superclasses = scriptDefinition.getScriptSupertypes(this)
|
|
||||||
return if (superclasses.isEmpty()) null else superclasses
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getScriptParametersToPassToSuperclass(): List<Pair<Name, KotlinType>> {
|
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)
|
val scriptParams = scriptDefinition.getScriptParameters(this)
|
||||||
return scriptDefinition.getScriptParametersToPassToSuperclass(this).map { name ->
|
return scriptDefinition.getScriptParametersToPassToSuperclass(this).map { name ->
|
||||||
Pair(name,
|
Pair(name,
|
||||||
|
|||||||
+20
-36
@@ -14,51 +14,35 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.script;
|
package org.jetbrains.kotlin.script
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
class KotlinScriptDefinitionProvider {
|
||||||
import java.util.List;
|
private val definitions: MutableList<KotlinScriptDefinition> = arrayListOf(StandardScriptDefinition)
|
||||||
|
|
||||||
public class KotlinScriptDefinitionProvider {
|
fun findScriptDefinition(psiFile: PsiFile): KotlinScriptDefinition? = definitions.firstOrNull { it.isScript(psiFile) }
|
||||||
private final List<KotlinScriptDefinition> definitions = new ArrayList<KotlinScriptDefinition>();
|
|
||||||
|
|
||||||
public static KotlinScriptDefinitionProvider getInstance(Project project) {
|
fun isScript(psiFile: PsiFile): Boolean = findScriptDefinition(psiFile) != null
|
||||||
return ServiceManager.getService(project, KotlinScriptDefinitionProvider.class);
|
|
||||||
|
fun addScriptDefinition(scriptDefinition: KotlinScriptDefinition) {
|
||||||
|
definitions.add(0, scriptDefinition)
|
||||||
}
|
}
|
||||||
|
|
||||||
public KotlinScriptDefinitionProvider() {
|
fun setScriptDefinitions(definitions: List<KotlinScriptDefinition>) {
|
||||||
definitions.add(StandardScriptDefinition.INSTANCE);
|
this.definitions.clear()
|
||||||
|
this.definitions.addAll(definitions)
|
||||||
}
|
}
|
||||||
|
|
||||||
public KotlinScriptDefinition findScriptDefinition(PsiFile psiFile) {
|
fun removeScriptDefinition(scriptDefinition: KotlinScriptDefinition) {
|
||||||
for (KotlinScriptDefinition definition : definitions) {
|
definitions.remove(scriptDefinition)
|
||||||
if (definition.isScript(psiFile)) {
|
|
||||||
return definition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isScript(PsiFile psiFile) {
|
companion object {
|
||||||
return findScriptDefinition(psiFile) != null;
|
@JvmStatic
|
||||||
}
|
fun getInstance(project: Project): KotlinScriptDefinitionProvider =
|
||||||
|
ServiceManager.getService(project, KotlinScriptDefinitionProvider::class.java)
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user