ScriptParameterResolver extracted
This commit is contained in:
+6
-1
@@ -57,6 +57,7 @@ import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.psi.JetImportsFactory;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverloadResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
|
||||
@@ -115,6 +116,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
private final ImportsResolver importsResolver;
|
||||
private final JetImportsFactory jetImportsFactory;
|
||||
private final ScriptHeaderResolver scriptHeaderResolver;
|
||||
private final ScriptParameterResolver scriptParameterResolver;
|
||||
private final OverloadResolver overloadResolver;
|
||||
private final OverrideResolver overrideResolver;
|
||||
private final TypeHierarchyResolver typeHierarchyResolver;
|
||||
@@ -177,6 +179,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.importsResolver = new ImportsResolver();
|
||||
this.jetImportsFactory = new JetImportsFactory();
|
||||
this.scriptHeaderResolver = new ScriptHeaderResolver();
|
||||
this.scriptParameterResolver = new ScriptParameterResolver();
|
||||
this.overloadResolver = new OverloadResolver();
|
||||
this.overrideResolver = new OverrideResolver();
|
||||
this.typeHierarchyResolver = new TypeHierarchyResolver();
|
||||
@@ -289,10 +292,12 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
|
||||
jetImportsFactory.setProject(project);
|
||||
|
||||
scriptHeaderResolver.setDependencyClassByQualifiedNameResolver(javaDescriptorResolver);
|
||||
scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
|
||||
scriptHeaderResolver.setScriptParameterResolver(scriptParameterResolver);
|
||||
scriptHeaderResolver.setTrace(bindingTrace);
|
||||
|
||||
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(javaDescriptorResolver);
|
||||
|
||||
overloadResolver.setTrace(bindingTrace);
|
||||
|
||||
overrideResolver.setTrace(bindingTrace);
|
||||
|
||||
@@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.psi.JetImportsFactory;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverloadResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
|
||||
@@ -92,6 +93,7 @@ public class InjectorForTopDownAnalyzerBasic {
|
||||
private final ImportsResolver importsResolver;
|
||||
private final JetImportsFactory jetImportsFactory;
|
||||
private final ScriptHeaderResolver scriptHeaderResolver;
|
||||
private final ScriptParameterResolver scriptParameterResolver;
|
||||
private final OverloadResolver overloadResolver;
|
||||
private final OverrideResolver overrideResolver;
|
||||
private final TypeHierarchyResolver typeHierarchyResolver;
|
||||
@@ -135,6 +137,7 @@ public class InjectorForTopDownAnalyzerBasic {
|
||||
this.importsResolver = new ImportsResolver();
|
||||
this.jetImportsFactory = new JetImportsFactory();
|
||||
this.scriptHeaderResolver = new ScriptHeaderResolver();
|
||||
this.scriptParameterResolver = new ScriptParameterResolver();
|
||||
this.overloadResolver = new OverloadResolver();
|
||||
this.overrideResolver = new OverrideResolver();
|
||||
this.typeHierarchyResolver = new TypeHierarchyResolver();
|
||||
@@ -231,10 +234,12 @@ public class InjectorForTopDownAnalyzerBasic {
|
||||
|
||||
jetImportsFactory.setProject(project);
|
||||
|
||||
scriptHeaderResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
|
||||
scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
|
||||
scriptHeaderResolver.setScriptParameterResolver(scriptParameterResolver);
|
||||
scriptHeaderResolver.setTrace(bindingTrace);
|
||||
|
||||
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
|
||||
|
||||
overloadResolver.setTrace(bindingTrace);
|
||||
|
||||
overrideResolver.setTrace(bindingTrace);
|
||||
|
||||
@@ -16,14 +16,12 @@
|
||||
|
||||
package org.jetbrains.jet.lang.resolve;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetScript;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -31,13 +29,8 @@ import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
|
||||
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import org.jetbrains.jet.lang.types.ref.JetTypeName;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -49,7 +42,7 @@ public class ScriptHeaderResolver {
|
||||
@NotNull
|
||||
private MutablePackageFragmentProvider packageFragmentProvider;
|
||||
@NotNull
|
||||
private DependencyClassByQualifiedNameResolver dependencyClassByQualifiedNameResolver;
|
||||
private ScriptParameterResolver scriptParameterResolver;
|
||||
@NotNull
|
||||
private BindingTrace trace;
|
||||
|
||||
@@ -59,8 +52,8 @@ public class ScriptHeaderResolver {
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setDependencyClassByQualifiedNameResolver(@NotNull DependencyClassByQualifiedNameResolver dependencyClassByQualifiedNameResolver) {
|
||||
this.dependencyClassByQualifiedNameResolver = dependencyClassByQualifiedNameResolver;
|
||||
public void setScriptParameterResolver(@NotNull ScriptParameterResolver scriptParameterResolver) {
|
||||
this.scriptParameterResolver = scriptParameterResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -69,34 +62,6 @@ public class ScriptHeaderResolver {
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private ClassDescriptor resolveClass(@NotNull FqName className) {
|
||||
ClassDescriptor classDescriptor = dependencyClassByQualifiedNameResolver.resolveClass(className);
|
||||
if (classDescriptor == null) {
|
||||
throw new IllegalStateException("dependency class not found by name: " + className);
|
||||
}
|
||||
return classDescriptor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType resolveTypeName(@NotNull JetTypeName typeName) {
|
||||
List<JetType> typeArguments = new ArrayList<JetType>();
|
||||
for (JetTypeName typeArgumentName : typeName.getArguments()) {
|
||||
typeArguments.add(resolveTypeName(typeArgumentName));
|
||||
}
|
||||
ClassDescriptor classDescriptor = resolveClass(typeName.getClassName());
|
||||
return TypeUtils.substituteParameters(classDescriptor, typeArguments);
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private ValueParameterDescriptor resolveScriptParameter(
|
||||
@NotNull AnalyzerScriptParameter scriptParameter,
|
||||
int index,
|
||||
@NotNull ScriptDescriptor script) {
|
||||
JetType type = resolveTypeName(scriptParameter.getType());
|
||||
return new ValueParameterDescriptorImpl(script, null, index, Annotations.EMPTY, scriptParameter.getName(), type, false, null);
|
||||
}
|
||||
|
||||
public void processScriptHierarchy(@NotNull TopDownAnalysisContext c, @NotNull JetScript script, @NotNull WritableScope outerScope) {
|
||||
JetFile file = (JetFile) script.getContainingFile();
|
||||
@@ -130,7 +95,7 @@ public class ScriptHeaderResolver {
|
||||
JetScript declaration = e.getKey();
|
||||
ScriptDescriptorImpl descriptor = (ScriptDescriptorImpl) e.getValue();
|
||||
|
||||
List<ValueParameterDescriptor> valueParameters = resolveScriptParameters(c, declaration, descriptor);
|
||||
List<ValueParameterDescriptor> valueParameters = scriptParameterResolver.resolveScriptParameters(c, declaration, descriptor);
|
||||
|
||||
descriptor.setValueParameters(valueParameters);
|
||||
|
||||
@@ -142,27 +107,4 @@ public class ScriptHeaderResolver {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<ValueParameterDescriptor> resolveScriptParameters(
|
||||
@NotNull TopDownAnalysisContext c,
|
||||
@NotNull JetScript declaration,
|
||||
@NotNull ScriptDescriptor scriptDescriptor
|
||||
) {
|
||||
List<ValueParameterDescriptor> valueParameters = Lists.newArrayList();
|
||||
|
||||
JetFile file = (JetFile) declaration.getContainingFile();
|
||||
JetScriptDefinition scriptDefinition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
||||
|
||||
int index = 0;
|
||||
List<AnalyzerScriptParameter> scriptParameters = !scriptDefinition.getScriptParameters().isEmpty()
|
||||
? scriptDefinition.getScriptParameters()
|
||||
: c.getTopDownAnalysisParameters().getScriptParameters();
|
||||
|
||||
for (AnalyzerScriptParameter scriptParameter : scriptParameters) {
|
||||
ValueParameterDescriptor parameter = resolveScriptParameter(scriptParameter, index, scriptDescriptor);
|
||||
valueParameters.add(parameter);
|
||||
++index;
|
||||
}
|
||||
return valueParameters;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 2010-2014 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.lang.resolve;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetScript;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import org.jetbrains.jet.lang.types.ref.JetTypeName;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
// SCRIPT: Resolve script parameters
|
||||
public class ScriptParameterResolver {
|
||||
@NotNull
|
||||
private DependencyClassByQualifiedNameResolver dependencyClassByQualifiedNameResolver;
|
||||
|
||||
@Inject
|
||||
public void setDependencyClassByQualifiedNameResolver(@NotNull DependencyClassByQualifiedNameResolver dependencyClassByQualifiedNameResolver) {
|
||||
this.dependencyClassByQualifiedNameResolver = dependencyClassByQualifiedNameResolver;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<ValueParameterDescriptor> resolveScriptParameters(
|
||||
@NotNull TopDownAnalysisContext c,
|
||||
@NotNull JetScript declaration,
|
||||
@NotNull ScriptDescriptor scriptDescriptor
|
||||
) {
|
||||
List<ValueParameterDescriptor> valueParameters = Lists.newArrayList();
|
||||
|
||||
JetFile file = (JetFile) declaration.getContainingFile();
|
||||
JetScriptDefinition scriptDefinition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
||||
|
||||
int index = 0;
|
||||
List<AnalyzerScriptParameter> scriptParameters = !scriptDefinition.getScriptParameters().isEmpty()
|
||||
? scriptDefinition.getScriptParameters()
|
||||
: c.getTopDownAnalysisParameters().getScriptParameters();
|
||||
|
||||
for (AnalyzerScriptParameter scriptParameter : scriptParameters) {
|
||||
ValueParameterDescriptor parameter = resolveScriptParameter(scriptParameter, index, scriptDescriptor);
|
||||
valueParameters.add(parameter);
|
||||
++index;
|
||||
}
|
||||
return valueParameters;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ClassDescriptor resolveClass(@NotNull FqName className) {
|
||||
ClassDescriptor classDescriptor = dependencyClassByQualifiedNameResolver.resolveClass(className);
|
||||
if (classDescriptor == null) {
|
||||
throw new IllegalStateException("dependency class not found by name: " + className);
|
||||
}
|
||||
return classDescriptor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType resolveTypeName(@NotNull JetTypeName typeName) {
|
||||
List<JetType> typeArguments = new ArrayList<JetType>();
|
||||
for (JetTypeName typeArgumentName : typeName.getArguments()) {
|
||||
typeArguments.add(resolveTypeName(typeArgumentName));
|
||||
}
|
||||
ClassDescriptor classDescriptor = resolveClass(typeName.getClassName());
|
||||
return TypeUtils.substituteParameters(classDescriptor, typeArguments);
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private ValueParameterDescriptor resolveScriptParameter(
|
||||
@NotNull AnalyzerScriptParameter scriptParameter,
|
||||
int index,
|
||||
@NotNull ScriptDescriptor script) {
|
||||
JetType type = resolveTypeName(scriptParameter.getType());
|
||||
return new ValueParameterDescriptorImpl(script, null, index, Annotations.EMPTY, scriptParameter.getName(), type, false, null);
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.psi.JetImportsFactory;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverloadResolver;
|
||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
|
||||
@@ -92,6 +93,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
private final ImportsResolver importsResolver;
|
||||
private final JetImportsFactory jetImportsFactory;
|
||||
private final ScriptHeaderResolver scriptHeaderResolver;
|
||||
private final ScriptParameterResolver scriptParameterResolver;
|
||||
private final OverloadResolver overloadResolver;
|
||||
private final OverrideResolver overrideResolver;
|
||||
private final TypeHierarchyResolver typeHierarchyResolver;
|
||||
@@ -135,6 +137,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
this.importsResolver = new ImportsResolver();
|
||||
this.jetImportsFactory = new JetImportsFactory();
|
||||
this.scriptHeaderResolver = new ScriptHeaderResolver();
|
||||
this.scriptParameterResolver = new ScriptParameterResolver();
|
||||
this.overloadResolver = new OverloadResolver();
|
||||
this.overrideResolver = new OverrideResolver();
|
||||
this.typeHierarchyResolver = new TypeHierarchyResolver();
|
||||
@@ -231,10 +234,12 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
|
||||
jetImportsFactory.setProject(project);
|
||||
|
||||
scriptHeaderResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
|
||||
scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
|
||||
scriptHeaderResolver.setScriptParameterResolver(scriptParameterResolver);
|
||||
scriptHeaderResolver.setTrace(bindingTrace);
|
||||
|
||||
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
|
||||
|
||||
overloadResolver.setTrace(bindingTrace);
|
||||
|
||||
overrideResolver.setTrace(bindingTrace);
|
||||
|
||||
Reference in New Issue
Block a user