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> {
|
||||
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,
|
||||
|
||||
+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.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,
|
||||
|
||||
+20
-36
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user