Lazy resolve: Support for imports and Java interop
This commit is contained in:
@@ -18,20 +18,14 @@
|
||||
package org.jetbrains.jet.di;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.*;
|
||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
|
||||
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||
@@ -45,9 +39,9 @@ public class InjectorForLazyResolve {
|
||||
private TypeResolver typeResolver;
|
||||
private ScopeProvider scopeProvider;
|
||||
private AnnotationResolver annotationResolver;
|
||||
private QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||
private CallResolver callResolver;
|
||||
private OverloadingConflictResolver overloadingConflictResolver;
|
||||
private QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||
|
||||
public InjectorForLazyResolve(
|
||||
@NotNull Project project,
|
||||
@@ -62,9 +56,9 @@ public class InjectorForLazyResolve {
|
||||
this.typeResolver = new TypeResolver();
|
||||
this.scopeProvider = new ScopeProvider(resolveSession);
|
||||
this.annotationResolver = new AnnotationResolver();
|
||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||
this.callResolver = new CallResolver();
|
||||
this.overloadingConflictResolver = new OverloadingConflictResolver();
|
||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||
|
||||
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
@@ -113,4 +107,8 @@ public class InjectorForLazyResolve {
|
||||
return this.annotationResolver;
|
||||
}
|
||||
|
||||
public QualifiedExpressionResolver getQualifiedExpressionResolver() {
|
||||
return this.qualifiedExpressionResolver;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -87,9 +87,19 @@ public class ImportsResolver {
|
||||
}
|
||||
}
|
||||
|
||||
private void processImportsInFile(
|
||||
boolean onlyClasses, WritableScope namespaceScope,
|
||||
List<JetImportDirective> importDirectives, @NotNull JetScope rootScope) {
|
||||
private void processImportsInFile(boolean classes, WritableScope scope, List<JetImportDirective> directives, JetScope rootScope) {
|
||||
processImportsInFile(classes, scope, directives, rootScope, configuration, trace, qualifiedExpressionResolver);
|
||||
}
|
||||
|
||||
public static void processImportsInFile(
|
||||
boolean onlyClasses,
|
||||
@NotNull WritableScope namespaceScope,
|
||||
@NotNull List<JetImportDirective> importDirectives,
|
||||
@NotNull JetScope rootScope,
|
||||
@NotNull ModuleConfiguration configuration,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull QualifiedExpressionResolver qualifiedExpressionResolver
|
||||
) {
|
||||
|
||||
Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(namespaceScope);
|
||||
if (!onlyClasses) {
|
||||
@@ -114,14 +124,17 @@ public class ImportsResolver {
|
||||
|
||||
if (!onlyClasses) {
|
||||
for (JetImportDirective importDirective : importDirectives) {
|
||||
reportUselessImport(importDirective, namespaceScope, resolvedDirectives);
|
||||
reportUselessImport(importDirective, namespaceScope, resolvedDirectives, trace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void reportUselessImport(@NotNull JetImportDirective importDirective,
|
||||
@NotNull WritableScope namespaceScope,
|
||||
@NotNull Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives) {
|
||||
private static void reportUselessImport(
|
||||
@NotNull JetImportDirective importDirective,
|
||||
@NotNull WritableScope namespaceScope,
|
||||
@NotNull Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives,
|
||||
@NotNull BindingTrace trace
|
||||
) {
|
||||
|
||||
JetExpression importedReference = importDirective.getImportedReference();
|
||||
if (importedReference == null || !resolvedDirectives.containsKey(importDirective)) {
|
||||
|
||||
+2
-2
@@ -44,8 +44,8 @@ public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl imple
|
||||
@NotNull PackageMemberDeclarationProvider declarationProvider
|
||||
) {
|
||||
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), name);
|
||||
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope for " + name);
|
||||
//resolveSession.getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope);
|
||||
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope");
|
||||
resolveSession.getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope);
|
||||
LazyPackageMemberScope lazyPackageMemberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this);
|
||||
scope.importScope(lazyPackageMemberScope);
|
||||
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.lazy;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -23,14 +24,14 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
@@ -59,8 +60,14 @@ public class ScopeProvider {
|
||||
}
|
||||
|
||||
WritableScope writableScope = new WritableScopeImpl(
|
||||
JetScope.EMPTY, packageDescriptor, RedeclarationHandler.DO_NOTHING, "file scope for declaration resollution");
|
||||
JetScope.EMPTY, packageDescriptor, RedeclarationHandler.DO_NOTHING, "File scope for declaration resolution");
|
||||
writableScope.importScope(resolveSession.getPackageDescriptorByFqName(FqName.ROOT).getMemberScope());
|
||||
List<JetImportDirective> importDirectives = Lists.newArrayList(file.getImportDirectives());
|
||||
resolveSession.getModuleConfiguration().addDefaultImports(importDirectives);
|
||||
ImportsResolver.processImportsInFile(true, writableScope, importDirectives,
|
||||
resolveSession.getPackageDescriptorByFqName(FqName.ROOT).getMemberScope(),
|
||||
resolveSession.getModuleConfiguration(), resolveSession.getTrace(),
|
||||
resolveSession.getInjector().getQualifiedExpressionResolver());
|
||||
writableScope.importScope(packageDescriptor.getMemberScope());
|
||||
|
||||
// TODO: imports
|
||||
|
||||
Reference in New Issue
Block a user