using guice to wire TopDownAnalyzer beans

This commit is contained in:
Stepan Koltsov
2012-03-07 04:09:12 +04:00
parent 406c81fbb3
commit c3e2fc947d
32 changed files with 596 additions and 376 deletions
+1
View File
@@ -27,6 +27,7 @@
<orderEntry type="library" scope="PROVIDED" name="junit-plugin" level="project" />
<orderEntry type="module" module-name="j2k" />
<orderEntry type="module" module-name="js.translator" />
<orderEntry type="library" name="guice-3.0" level="project" />
</component>
</module>
@@ -16,6 +16,9 @@
package org.jetbrains.jet.plugin.liveTemplates.macro;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.template.Expression;
@@ -30,10 +33,14 @@ import com.intellij.psi.PsiNamedElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.compiler.TipsManager;
import org.jetbrains.jet.lang.JetSemanticServices;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
@@ -51,7 +58,7 @@ public abstract class BaseJetVariableMacro extends Macro {
private JetNamedDeclaration[] getVariables(Expression[] params, ExpressionContext context) {
if (params.length != 0) return null;
Project project = context.getProject();
final Project project = context.getProject();
PsiDocumentManager.getInstance(project).commitAllDocuments();
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(context.getEditor().getDocument());
@@ -66,11 +73,19 @@ public abstract class BaseJetVariableMacro extends Macro {
return null;
}
class TdacModule extends AbstractModule {
@Override
protected void configure() {
bind(JetSemanticServices.class).toInstance(JetSemanticServices.createSemanticServices(project));
}
}
CallResolver.Context callResolverContext = Guice.createInjector(new TdacModule()).getInstance(CallResolver.Context.class);
List<VariableDescriptor> filteredDescriptors = new ArrayList<VariableDescriptor>();
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
if (declarationDescriptor instanceof VariableDescriptor) {
VariableDescriptor variableDescriptor = (VariableDescriptor) declarationDescriptor;
if (isSuitable(variableDescriptor, scope, project)) {
if (isSuitable(variableDescriptor, scope, project, callResolverContext)) {
filteredDescriptors.add(variableDescriptor);
}
}
@@ -89,7 +104,7 @@ public abstract class BaseJetVariableMacro extends Macro {
return declarations.toArray(new JetNamedDeclaration[declarations.size()]);
}
protected abstract boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project);
protected abstract boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project, CallResolver.Context callResolverContext);
@Nullable
private static JetExpression findContextExpression(PsiFile psiFile, int startOffset) {
@@ -19,6 +19,7 @@ package org.jetbrains.jet.plugin.liveTemplates.macro;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.plugin.JetBundle;
@@ -38,7 +39,7 @@ public class JetAnyVariableMacro extends BaseJetVariableMacro {
}
@Override
protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project) {
protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project, CallResolver.Context callResolverContext) {
return true;
}
}
@@ -19,6 +19,7 @@ package org.jetbrains.jet.plugin.liveTemplates.macro;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
import org.jetbrains.jet.plugin.JetBundle;
@@ -28,6 +29,10 @@ import org.jetbrains.jet.plugin.JetBundle;
* @since 2/7/12
*/
public class JetIterableVariableMacro extends BaseJetVariableMacro {
public JetIterableVariableMacro() {
}
@Override
public String getName() {
return "kotlinIterableVariable";
@@ -39,7 +44,7 @@ public class JetIterableVariableMacro extends BaseJetVariableMacro {
}
@Override
protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project) {
return ExpressionTypingUtils.isVariableIterable(project, variableDescriptor, scope);
protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope, @NotNull Project project, CallResolver.Context callResolverContext) {
return ExpressionTypingUtils.isVariableIterable(callResolverContext, project, variableDescriptor, scope);
}
}