diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java index f0bd0d16f7d..6968d57d4e5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java @@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationRe import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl; import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl; import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazyResolveToken; import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; @@ -94,6 +95,7 @@ public class InjectorForLazyResolveWithJava { private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator; private final JavaSourceElementFactoryImpl javaSourceElementFactory; private final JavaFlexibleTypeCapabilitiesProvider javaFlexibleTypeCapabilitiesProvider; + private final LazyResolveToken lazyResolveToken; private final AdditionalCheckerProvider additionalCheckerProvider; private final AnnotationResolver annotationResolver; private final CallResolver callResolver; @@ -157,6 +159,7 @@ public class InjectorForLazyResolveWithJava { this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, module); this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module); this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider(); + this.lazyResolveToken = new LazyResolveToken(); this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$; this.annotationResolver = new AnnotationResolver(); this.callResolver = new CallResolver(); @@ -171,7 +174,7 @@ public class InjectorForLazyResolveWithJava { this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, module, javaFlexibleTypeCapabilitiesProvider, storageManager); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, module, javaFlexibleTypeCapabilitiesProvider, storageManager, lazyResolveToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 87e1148c79a..f2b54650fee 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -55,6 +55,7 @@ import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; @@ -123,6 +124,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final DelegatedPropertyResolver delegatedPropertyResolver; private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; + private final LazinessToken lazinessToken; private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; @@ -196,7 +198,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), javaFlexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), javaFlexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/context/context.kt b/compiler/frontend/src/org/jetbrains/jet/context/context.kt index 74d4743059e..ba4eb0e6f7b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/context/context.kt +++ b/compiler/frontend/src/org/jetbrains/jet/context/context.kt @@ -40,4 +40,16 @@ public open class GlobalContextImpl( public fun GlobalContext(): GlobalContextImpl { val tracker = ExceptionTracker() return GlobalContextImpl(LockBasedStorageManager.createWithExceptionHandling(tracker), tracker) +} + +deprecated("Used temporarily while we are in transition from to lazy resolve") +public open class LazinessToken { + deprecated("Used temporarily while we are in transition from to lazy resolve") + public open fun isLazy(): Boolean = false +} + +deprecated("Used temporarily while we are in transition from to lazy resolve") +public class LazyResolveToken : LazinessToken() { + deprecated("Used temporarily while we are in transition from to lazy resolve") + override fun isLazy() = true } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index 041b8b5ad4f..2521553ec1d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; @@ -77,6 +78,7 @@ public class InjectorForBodyResolve { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; + private final LazinessToken lazinessToken; private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; @@ -115,7 +117,8 @@ public class InjectorForBodyResolve { this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index 6e19e32c864..065f8f91d8f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFacto import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; +import org.jetbrains.jet.context.LazyResolveToken; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; @@ -62,6 +63,7 @@ public class InjectorForLazyResolve { private final BindingTrace bindingTrace; private final AdditionalCheckerProvider additionalCheckerProvider; private final ResolveSession resolveSession; + private final LazyResolveToken lazyResolveToken; private final AnnotationResolver annotationResolver; private final CallResolver callResolver; private final ArgumentTypeResolver argumentTypeResolver; @@ -101,6 +103,7 @@ public class InjectorForLazyResolve { this.bindingTrace = bindingTrace; this.additionalCheckerProvider = additionalCheckerProvider; this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace); + this.lazyResolveToken = new LazyResolveToken(); this.annotationResolver = new AnnotationResolver(); this.callResolver = new CallResolver(); this.argumentTypeResolver = new ArgumentTypeResolver(); @@ -115,7 +118,7 @@ public class InjectorForLazyResolve { this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazyResolveToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index c3853e98a20..eebf476edb9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -60,6 +61,7 @@ public class InjectorForMacros { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; + private final LazinessToken lazinessToken; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -88,7 +90,8 @@ public class InjectorForMacros { this.annotationResolver = new AnnotationResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index 803a3600185..6ca694b02aa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; @@ -90,6 +91,7 @@ public class InjectorForTopDownAnalyzerBasic { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; + private final LazinessToken lazinessToken; private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; @@ -138,7 +140,8 @@ public class InjectorForTopDownAnalyzerBasic { this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 581459aafb6..28fc49ece72 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -115,7 +115,7 @@ public class BodyResolver { resolvePropertyDeclarationBodies(c); - if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (!c.getTopDownAnalysisParameters().isLazy()) { resolveClassAnnotations(c); } resolveAnonymousInitializers(c); @@ -322,7 +322,7 @@ public class BodyResolver { } private void resolveAnonymousInitializers(@NotNull BodiesResolveContext c) { - if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (c.getTopDownAnalysisParameters().isLazy()) { for (Map.Entry entry : c.getAnonymousInitializers().entrySet()) { JetClassInitializer initializer = entry.getKey(); ClassDescriptorWithResolutionScopes descriptor = entry.getValue(); @@ -586,7 +586,7 @@ public class BodyResolver { JetScope declaringScope = c.getDeclaringScopes().apply(declaration); assert declaringScope != null; - if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (!c.getTopDownAnalysisParameters().isLazy()) { resolveAnnotationArguments(declaringScope, declaration); } resolveFunctionBody(c, trace, declaration, descriptor, declaringScope); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index bd4db9fc9ee..6fbfadb28ac 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -267,7 +267,7 @@ public class DeclarationsChecker { private void checkClass(BodiesResolveContext c, JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) { checkOpenMembers(classDescriptor); - if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (c.getTopDownAnalysisParameters().isLazy()) { checkTypeParameters(aClass); } if (aClass.isTrait()) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index f950c172572..632a990185f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -124,7 +124,7 @@ public class DescriptorResolver { } int index = 0; for (JetTypeParameter typeParameter : typeParameters) { - if (!topDownAnalysisParameters.isLazyTopDownAnalysis()) { + if (!topDownAnalysisParameters.isLazy()) { // TODO: Support AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index f46f5c84b26..476bdc95525 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -99,7 +99,7 @@ public class LazyTopDownAnalyzer { @NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull Collection declarations ) { - assert topDownAnalysisParameters.isLazyTopDownAnalysis() : "Lazy analyzer is run in non-lazy mode"; + assert topDownAnalysisParameters.isLazy() : "Lazy analyzer is run in non-lazy mode"; final TopDownAnalysisContext c = new TopDownAnalysisContext(topDownAnalysisParameters); final Multimap topLevelFqNames = HashMultimap.create(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java index a72d69aae99..2a043aef1b1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java @@ -62,7 +62,7 @@ public class ScriptBodyResolver { JetScript declaration = e.getKey(); ScriptDescriptor descriptor = e.getValue(); - if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (c.getTopDownAnalysisParameters().isLazy()) { ForceResolveUtil.forceResolveAllContents(descriptor); continue; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisParameters.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisParameters.java index 0603dbe57b4..9f9e20c7d3b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisParameters.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisParameters.java @@ -20,13 +20,14 @@ import com.google.common.base.Predicate; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.context.GlobalContext; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.storage.ExceptionTracker; import org.jetbrains.jet.storage.StorageManager; /** * Various junk that cannot be placed into context (yet). */ -public class TopDownAnalysisParameters implements GlobalContext { +public class TopDownAnalysisParameters extends LazinessToken implements GlobalContext { private static boolean LAZY; static { @@ -118,8 +119,9 @@ public class TopDownAnalysisParameters implements GlobalContext { } // Used temporarily while we are transitioning from eager to lazy analysis of headers in the IDE + @Override @Deprecated - public boolean isLazyTopDownAnalysis() { + public boolean isLazy() { return lazyTopDownAnalysis; } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index a25122bf1e9..3ad88deafda 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -133,7 +133,7 @@ public class TopDownAnalyzer { // c.enableDebugOutput(); c.debug("Enter"); - if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) { + if (c.getTopDownAnalysisParameters().isLazy()) { ResolveSession resolveSession = new InjectorForLazyResolve( project, new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt index 3626dd03dfb..5a57f60866d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.types.Variance.* import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider import kotlin.platform.platformStatic import org.jetbrains.jet.storage.StorageManager +import org.jetbrains.jet.context.LazinessToken import javax.inject.Inject public class TypeResolver( @@ -38,7 +39,8 @@ public class TypeResolver( private val qualifiedExpressionResolver: QualifiedExpressionResolver, private val moduleDescriptor: ModuleDescriptor, private val flexibleTypeCapabilitiesProvider: FlexibleTypeCapabilitiesProvider, - private val storageManager: StorageManager + private val storageManager: StorageManager, + private val lazinessToken: LazinessToken ) { public open class FlexibleTypeCapabilitiesProvider { @@ -61,7 +63,7 @@ public class TypeResolver( val cachedType = c.trace.getBindingContext().get(BindingContext.TYPE, typeReference) if (cachedType != null) return type(cachedType) - if (!c.allowBareTypes) { + if (!c.allowBareTypes && lazinessToken.isLazy()) { // Bare types can be allowed only inside expressions; lazy type resolution is only relevant for declarations class LazyKotlinType : DelegatingType() { private val _delegate = storageManager.createLazyValue { doResolvePossiblyBareType(c, typeReference).getActualType() } diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index 39477d87919..6e2cbfac082 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.annotations.NotNull; import javax.annotation.PreDestroy; @@ -71,6 +72,7 @@ public class InjectorForTests { private final CallResolverExtensionProvider callResolverExtensionProvider; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; + private final LazinessToken lazinessToken; public InjectorForTests( @NotNull Project project, @@ -89,7 +91,8 @@ public class InjectorForTests { this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext(); this.storageManager = globalContext.getStorageManager(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$; this.argumentTypeResolver = new ArgumentTypeResolver(); this.candidateResolver = new CandidateResolver(); diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt index 1834a2c47d0..3a490f12b88 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider +import org.jetbrains.jet.context.LazyResolveToken // NOTE: After making changes, you need to re-generate the injectors. // To do that, you can run main in this file. @@ -188,7 +189,8 @@ private fun generatorForLazyResolveWithJava() = javaClass(), javaClass(), javaClass(), - javaClass() + javaClass(), + javaClass() ) field(javaClass(), init = GivenExpression(javaClass().getName() + ".INSTANCE$")) @@ -250,6 +252,8 @@ private fun generatorForLazyResolve() = parameter(javaClass()) publicField(javaClass()) + + field(javaClass()) } private fun generator( diff --git a/js/js.frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index f320c2c767f..b95646e5479 100644 --- a/js/js.frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; +import org.jetbrains.jet.context.LazinessToken; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; @@ -90,6 +91,7 @@ public class InjectorForTopDownAnalyzerForJs { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; + private final LazinessToken lazinessToken; private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; @@ -137,7 +139,8 @@ public class InjectorForTopDownAnalyzerForJs { this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider(); - this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager); + this.lazinessToken = new LazinessToken(); + this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager, lazinessToken); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);