Converting ElementResolver to Kotlin (step 1)

This commit is contained in:
Valentin Kipyatkov
2015-03-25 17:14:47 +03:00
parent f7a147f236
commit 2637bf608a
@@ -14,645 +14,494 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.resolve.lazy;
package org.jetbrains.kotlin.resolve.lazy
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analyzer.AnalyzerPackage;
import org.jetbrains.kotlin.cfg.JetFlowInformationProvider;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotated;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.di.InjectorForBodyResolve;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.*;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor;
import org.jetbrains.kotlin.resolve.scopes.ChainedScope;
import org.jetbrains.kotlin.resolve.scopes.JetScope;
import org.jetbrains.kotlin.storage.ExceptionTracker;
import org.jetbrains.kotlin.storage.StorageManager;
import org.jetbrains.kotlin.types.TypeConstructor;
import org.jetbrains.kotlin.types.TypeUtils;
import com.google.common.base.Function
import com.google.common.base.Functions
import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil
import kotlin.KotlinPackage
import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.cfg.JetFlowInformationProvider
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotated
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.di.InjectorForBodyResolve
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.storage.ExceptionTracker
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.TypeConstructor
import org.jetbrains.kotlin.types.TypeUtils
import java.util.Collections
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtilPackage.getDataFlowInfo
import static org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtilPackage.getDataFlowInfo;
public abstract class ElementResolver protected(protected val resolveSession: ResolveSession) {
public abstract class ElementResolver {
protected final ResolveSession resolveSession;
protected ElementResolver(@NotNull ResolveSession session) {
resolveSession = session;
public open fun getElementAdditionalResolve(jetElement: JetElement): BindingContext {
return elementAdditionalResolve(jetElement, jetElement, BodyResolveMode.FULL)
}
@NotNull
public BindingContext getElementAdditionalResolve(@NotNull JetElement jetElement) {
return elementAdditionalResolve(jetElement, jetElement, BodyResolveMode.FULL);
public open fun hasElementAdditionalResolveCached(jetElement: JetElement): Boolean {
return false
}
public boolean hasElementAdditionalResolveCached(@NotNull JetElement jetElement) {
return false;
public fun resolveToElement(jetElement: JetElement): BindingContext {
return resolveToElement(jetElement, BodyResolveMode.FULL)
}
@NotNull
public BindingContext resolveToElement(@NotNull JetElement jetElement) {
return resolveToElement(jetElement, BodyResolveMode.FULL);
protected open fun probablyNothingCallableNames(): ProbablyNothingCallableNames {
return DefaultNothingCallableNames
}
@NotNull
protected ProbablyNothingCallableNames probablyNothingCallableNames() {
return DefaultNothingCallableNames.INSTANCE$;
}
public fun resolveToElement(jetElement: JetElement, bodyResolveMode: BodyResolveMode): BindingContext {
var jetElement = jetElement
[SuppressWarnings("unchecked")] var elementOfAdditionalResolve: JetElement? = JetPsiUtil.getTopmostParentOfTypes(jetElement, javaClass<JetNamedFunction>(), javaClass<JetClassInitializer>(), javaClass<JetSecondaryConstructor>(), javaClass<JetProperty>(), javaClass<JetParameter>(), javaClass<JetDelegationSpecifierList>(), javaClass<JetInitializerList>(), javaClass<JetImportDirective>(), javaClass<JetAnnotationEntry>(), javaClass<JetTypeParameter>(), javaClass<JetTypeConstraint>(), javaClass<JetPackageDirective>(), javaClass<JetCodeFragment>()) as JetElement
@NotNull
public BindingContext resolveToElement(@NotNull JetElement jetElement, BodyResolveMode bodyResolveMode) {
@SuppressWarnings("unchecked") JetElement elementOfAdditionalResolve = (JetElement) JetPsiUtil.getTopmostParentOfTypes(
jetElement,
JetNamedFunction.class,
JetClassInitializer.class,
JetSecondaryConstructor.class,
JetProperty.class,
JetParameter.class,
JetDelegationSpecifierList.class,
JetInitializerList.class,
JetImportDirective.class,
JetAnnotationEntry.class,
JetTypeParameter.class,
JetTypeConstraint.class,
JetPackageDirective.class,
JetCodeFragment.class
);
if (elementOfAdditionalResolve != null && !(elementOfAdditionalResolve instanceof JetParameter)) {
if (elementOfAdditionalResolve instanceof JetPackageDirective) {
elementOfAdditionalResolve = jetElement;
if (elementOfAdditionalResolve != null && !(elementOfAdditionalResolve is JetParameter)) {
if (elementOfAdditionalResolve is JetPackageDirective) {
elementOfAdditionalResolve = jetElement
}
if (bodyResolveMode != BodyResolveMode.FULL && !hasElementAdditionalResolveCached(jetElement)) {
return elementAdditionalResolve(elementOfAdditionalResolve, jetElement, bodyResolveMode);
return elementAdditionalResolve(elementOfAdditionalResolve, jetElement, bodyResolveMode)
}
return getElementAdditionalResolve(elementOfAdditionalResolve);
return getElementAdditionalResolve(elementOfAdditionalResolve)
}
JetParameter parameter = (JetParameter) elementOfAdditionalResolve;
val parameter = elementOfAdditionalResolve as JetParameter
if (parameter != null) {
JetClass klass = PsiTreeUtil.getParentOfType(parameter, JetClass.class);
val klass = PsiTreeUtil.getParentOfType<JetClass>(parameter, javaClass<JetClass>())
if (klass != null && parameter.getParent() == klass.getPrimaryConstructorParameterList()) {
return getElementAdditionalResolve(klass);
return getElementAdditionalResolve(klass)
}
// Parameters for function literal could be met inside other parameters. We can't make resolveToDescriptors for internal elements.
jetElement = parameter;
jetElement = parameter
}
JetDeclaration declaration = PsiTreeUtil.getParentOfType(jetElement, JetDeclaration.class, false);
if (declaration != null && !(declaration instanceof JetClassInitializer)) {
val declaration = PsiTreeUtil.getParentOfType<JetDeclaration>(jetElement, javaClass<JetDeclaration>(), false)
if (declaration != null && !(declaration is JetClassInitializer)) {
// Activate descriptor resolution
resolveSession.resolveToDescriptor(declaration);
resolveSession.resolveToDescriptor(declaration)
}
return resolveSession.getBindingContext();
return resolveSession.getBindingContext()
}
@NotNull
protected BindingContext elementAdditionalResolve(
@NotNull JetElement resolveElement,
@NotNull JetElement contextElement,
@NotNull BodyResolveMode bodyResolveMode
) {
protected fun elementAdditionalResolve(resolveElement: JetElement, contextElement: JetElement, bodyResolveMode: BodyResolveMode): BindingContext {
// All additional resolve should be done to separate trace
BindingTrace trace = resolveSession.getStorageManager().createSafeTrace(
new DelegatingBindingTrace(resolveSession.getBindingContext(), "trace to resolve element", resolveElement));
val trace = resolveSession.getStorageManager().createSafeTrace(DelegatingBindingTrace(resolveSession.getBindingContext(), "trace to resolve element", resolveElement))
JetFile file = resolveElement.getContainingJetFile();
val file = resolveElement.getContainingJetFile()
StatementFilter statementFilter;
if (bodyResolveMode != BodyResolveMode.FULL && resolveElement instanceof JetDeclaration) {
statementFilter = new PartialBodyResolveFilter(
contextElement,
(JetDeclaration) resolveElement,
probablyNothingCallableNames(),
bodyResolveMode == BodyResolveMode.PARTIAL_FOR_COMPLETION);
val statementFilter: StatementFilter
if (bodyResolveMode != BodyResolveMode.FULL && resolveElement is JetDeclaration) {
statementFilter = PartialBodyResolveFilter(contextElement, resolveElement as JetDeclaration, probablyNothingCallableNames(), bodyResolveMode == BodyResolveMode.PARTIAL_FOR_COMPLETION)
}
else {
statementFilter = StatementFilter.NONE;
statementFilter = StatementFilter.NONE
}
if (resolveElement instanceof JetNamedFunction) {
functionAdditionalResolve(resolveSession, (JetNamedFunction) resolveElement, trace, file, statementFilter);
if (resolveElement is JetNamedFunction) {
functionAdditionalResolve(resolveSession, resolveElement as JetNamedFunction, trace, file, statementFilter)
}
else if (resolveElement instanceof JetClassInitializer) {
initializerAdditionalResolve(resolveSession, (JetClassInitializer) resolveElement, trace, file, statementFilter);
else if (resolveElement is JetClassInitializer) {
initializerAdditionalResolve(resolveSession, resolveElement as JetClassInitializer, trace, file, statementFilter)
}
else if (resolveElement instanceof JetSecondaryConstructor) {
secondaryConstructorAdditionalResolve(resolveSession, (JetSecondaryConstructor) resolveElement, trace, file, statementFilter);
else if (resolveElement is JetSecondaryConstructor) {
secondaryConstructorAdditionalResolve(resolveSession, resolveElement as JetSecondaryConstructor, trace, file, statementFilter)
}
else if (resolveElement instanceof JetProperty) {
propertyAdditionalResolve(resolveSession, (JetProperty) resolveElement, trace, file, statementFilter);
else if (resolveElement is JetProperty) {
propertyAdditionalResolve(resolveSession, resolveElement as JetProperty, trace, file, statementFilter)
}
else if (resolveElement instanceof JetDelegationSpecifierList) {
delegationSpecifierAdditionalResolve(resolveSession, (JetClassOrObject) resolveElement.getParent(), trace, file);
else if (resolveElement is JetDelegationSpecifierList) {
delegationSpecifierAdditionalResolve(resolveSession, resolveElement.getParent() as JetClassOrObject, trace, file)
}
else if (resolveElement instanceof JetInitializerList) {
delegationSpecifierAdditionalResolve(resolveSession, (JetEnumEntry) resolveElement.getParent(), trace, file);
else if (resolveElement is JetInitializerList) {
delegationSpecifierAdditionalResolve(resolveSession, resolveElement.getParent() as JetEnumEntry, trace, file)
}
else if (resolveElement instanceof JetImportDirective) {
JetImportDirective importDirective = (JetImportDirective) resolveElement;
LazyFileScope scope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile());
scope.forceResolveAllImports();
else if (resolveElement is JetImportDirective) {
val importDirective = resolveElement as JetImportDirective
val scope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile())
scope.forceResolveAllImports()
}
else if (resolveElement instanceof JetAnnotationEntry) {
annotationAdditionalResolve(resolveSession, (JetAnnotationEntry) resolveElement);
else if (resolveElement is JetAnnotationEntry) {
annotationAdditionalResolve(resolveSession, resolveElement as JetAnnotationEntry)
}
else if (resolveElement instanceof JetClass) {
constructorAdditionalResolve(resolveSession, (JetClass) resolveElement, trace, file, statementFilter);
else if (resolveElement is JetClass) {
constructorAdditionalResolve(resolveSession, resolveElement as JetClass, trace, file, statementFilter)
}
else if (resolveElement instanceof JetTypeParameter) {
typeParameterAdditionalResolve(resolveSession, (JetTypeParameter) resolveElement);
else if (resolveElement is JetTypeParameter) {
typeParameterAdditionalResolve(resolveSession, resolveElement as JetTypeParameter)
}
else if (resolveElement instanceof JetTypeConstraint) {
typeConstraintAdditionalResolve(resolveSession, (JetTypeConstraint) resolveElement);
else if (resolveElement is JetTypeConstraint) {
typeConstraintAdditionalResolve(resolveSession, resolveElement as JetTypeConstraint)
}
else if (resolveElement instanceof JetCodeFragment) {
codeFragmentAdditionalResolve(resolveSession, (JetCodeFragment) resolveElement, trace, bodyResolveMode);
else if (resolveElement is JetCodeFragment) {
codeFragmentAdditionalResolve(resolveSession, resolveElement as JetCodeFragment, trace, bodyResolveMode)
}
else if (PsiTreeUtil.getParentOfType(resolveElement, JetPackageDirective.class) != null) {
packageRefAdditionalResolve(resolveSession, trace, resolveElement);
else if (PsiTreeUtil.getParentOfType<JetPackageDirective>(resolveElement, javaClass<JetPackageDirective>()) != null) {
packageRefAdditionalResolve(resolveSession, trace, resolveElement)
}
else {
assert false : String.format("Invalid type of the topmost parent: %s\n%s",
resolveElement.toString(),
JetPsiUtil.getElementTextWithContext(resolveElement));
assert(false) { String.format("Invalid type of the topmost parent: %s\n%s", resolveElement.toString(), JetPsiUtil.getElementTextWithContext(resolveElement)) }
}
new JetFlowInformationProvider(resolveElement, trace).checkDeclaration();
JetFlowInformationProvider(resolveElement, trace).checkDeclaration()
return trace.getBindingContext();
return trace.getBindingContext()
}
private static void packageRefAdditionalResolve(ResolveSession resolveSession, BindingTrace trace, JetElement jetElement) {
if (jetElement instanceof JetSimpleNameExpression) {
JetPackageDirective header = PsiTreeUtil.getParentOfType(jetElement, JetPackageDirective.class);
assert header != null;
private fun packageRefAdditionalResolve(resolveSession: ResolveSession, trace: BindingTrace, jetElement: JetElement) {
if (jetElement is JetSimpleNameExpression) {
val header = PsiTreeUtil.getParentOfType<JetPackageDirective>(jetElement, javaClass<JetPackageDirective>())
assert(header != null)
JetSimpleNameExpression packageNameExpression = (JetSimpleNameExpression) jetElement;
if (trace.getBindingContext().get(BindingContext.RESOLUTION_SCOPE, packageNameExpression) == null) {
JetScope scope = getExpressionMemberScope(resolveSession, packageNameExpression);
val packageNameExpression = jetElement as JetSimpleNameExpression
if (trace.getBindingContext().get<JetExpression, JetScope>(BindingContext.RESOLUTION_SCOPE, packageNameExpression) == null) {
val scope = getExpressionMemberScope(resolveSession, packageNameExpression)
if (scope != null) {
trace.record(BindingContext.RESOLUTION_SCOPE, packageNameExpression, scope);
trace.record<JetExpression, JetScope>(BindingContext.RESOLUTION_SCOPE, packageNameExpression, scope)
}
}
if (Name.isValidIdentifier(packageNameExpression.getReferencedName())) {
if (trace.getBindingContext().get(BindingContext.REFERENCE_TARGET, packageNameExpression) == null) {
FqName fqName = header.getFqName(packageNameExpression);
PackageViewDescriptor packageDescriptor = resolveSession.getModuleDescriptor().getPackage(fqName);
assert packageDescriptor != null: "Package descriptor should be present in session for " + fqName;
trace.record(BindingContext.REFERENCE_TARGET, packageNameExpression, packageDescriptor);
if (trace.getBindingContext().get<JetReferenceExpression, DeclarationDescriptor>(BindingContext.REFERENCE_TARGET, packageNameExpression) == null) {
val fqName = header!!.getFqName(packageNameExpression)
val packageDescriptor = resolveSession.getModuleDescriptor().getPackage(fqName)
assert(packageDescriptor != null) { "Package descriptor should be present in session for " + fqName }
trace.record<JetReferenceExpression, DeclarationDescriptor>(BindingContext.REFERENCE_TARGET, packageNameExpression, packageDescriptor)
}
}
}
}
private static void typeConstraintAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeConstraint jetTypeConstraint) {
JetDeclaration declaration = PsiTreeUtil.getParentOfType(jetTypeConstraint, JetDeclaration.class);
DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(declaration);
private fun typeConstraintAdditionalResolve(analyzer: KotlinCodeAnalyzer, jetTypeConstraint: JetTypeConstraint) {
val declaration = PsiTreeUtil.getParentOfType<JetDeclaration>(jetTypeConstraint, javaClass<JetDeclaration>())
val descriptor = analyzer.resolveToDescriptor(declaration)
assert (descriptor instanceof ClassDescriptor);
assert((descriptor is ClassDescriptor))
TypeConstructor constructor = ((ClassDescriptor) descriptor).getTypeConstructor();
for (TypeParameterDescriptor parameterDescriptor : constructor.getParameters()) {
ForceResolveUtil.forceResolveAllContents(parameterDescriptor);
val constructor = (descriptor as ClassDescriptor).getTypeConstructor()
for (parameterDescriptor in constructor.getParameters()) {
ForceResolveUtil.forceResolveAllContents<TypeParameterDescriptor>(parameterDescriptor)
}
}
private void codeFragmentAdditionalResolve(
ResolveSession resolveSession,
JetCodeFragment codeFragment,
BindingTrace trace,
BodyResolveMode bodyResolveMode
) {
JetElement codeFragmentExpression = codeFragment.getContentElement();
if (!(codeFragmentExpression instanceof JetExpression)) return;
private fun codeFragmentAdditionalResolve(resolveSession: ResolveSession, codeFragment: JetCodeFragment, trace: BindingTrace, bodyResolveMode: BodyResolveMode) {
val codeFragmentExpression = codeFragment.getContentElement()
if (!(codeFragmentExpression is JetExpression)) return
PsiElement contextElement = codeFragment.getContext();
val contextElement = codeFragment.getContext()
JetScope scopeForContextElement;
DataFlowInfo dataFlowInfoForContextElement;
val scopeForContextElement: JetScope?
val dataFlowInfoForContextElement: DataFlowInfo
if (contextElement instanceof JetClassOrObject) {
LazyClassDescriptor descriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor((JetClassOrObject) contextElement);
if (contextElement is JetClassOrObject) {
val descriptor = resolveSession.resolveToDescriptor(contextElement as JetClassOrObject) as LazyClassDescriptor
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution();
dataFlowInfoForContextElement = DataFlowInfo.EMPTY;
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution()
dataFlowInfoForContextElement = DataFlowInfo.EMPTY
}
else if (contextElement instanceof JetBlockExpression) {
JetElement newContextElement = KotlinPackage.lastOrNull(((JetBlockExpression) contextElement).getStatements());
else if (contextElement is JetBlockExpression) {
val newContextElement = KotlinPackage.lastOrNull<JetElement>((contextElement as JetBlockExpression).getStatements())
if (!(newContextElement instanceof JetExpression)) return;
if (!(newContextElement is JetExpression)) return
BindingContext contextForElement = resolveToElement((JetElement) contextElement, BodyResolveMode.FULL);
val contextForElement = resolveToElement(contextElement as JetElement, BodyResolveMode.FULL)
scopeForContextElement = contextForElement.get(BindingContext.RESOLUTION_SCOPE, ((JetExpression) newContextElement));
dataFlowInfoForContextElement = getDataFlowInfo(contextForElement, (JetExpression) newContextElement);
scopeForContextElement = contextForElement.get<JetExpression, JetScope>(BindingContext.RESOLUTION_SCOPE, (newContextElement as JetExpression))
dataFlowInfoForContextElement = contextForElement.getDataFlowInfo(newContextElement as JetExpression)
}
else {
if (!(contextElement instanceof JetExpression)) return;
if (!(contextElement is JetExpression)) return
JetExpression contextExpression = (JetExpression) contextElement;
BindingContext contextForElement = resolveToElement((JetElement) contextElement, bodyResolveMode);
val contextExpression = contextElement as JetExpression
val contextForElement = resolveToElement(contextElement as JetElement, bodyResolveMode)
scopeForContextElement = contextForElement.get(BindingContext.RESOLUTION_SCOPE, contextExpression);
dataFlowInfoForContextElement = getDataFlowInfo(contextForElement, contextExpression);
scopeForContextElement = contextForElement.get<JetExpression, JetScope>(BindingContext.RESOLUTION_SCOPE, contextExpression)
dataFlowInfoForContextElement = contextForElement.getDataFlowInfo(contextExpression)
}
if (scopeForContextElement == null) return;
if (scopeForContextElement == null) return
JetScope codeFragmentScope = resolveSession.getScopeProvider().getFileScope(codeFragment);
ChainedScope chainedScope = new ChainedScope(
scopeForContextElement.getContainingDeclaration(),
"Scope for resolve code fragment",
scopeForContextElement,
codeFragmentScope
);
val codeFragmentScope = resolveSession.getScopeProvider().getFileScope(codeFragment)
val chainedScope = ChainedScope(scopeForContextElement.getContainingDeclaration(), "Scope for resolve code fragment", scopeForContextElement, codeFragmentScope)
AnalyzerPackage.computeTypeInContext(
(JetExpression) codeFragmentExpression,
chainedScope,
trace,
dataFlowInfoForContextElement,
TypeUtils.NO_EXPECTED_TYPE,
resolveSession.getModuleDescriptor()
);
(codeFragmentExpression as JetExpression).computeTypeInContext(chainedScope, trace, dataFlowInfoForContextElement, TypeUtils.NO_EXPECTED_TYPE, resolveSession.getModuleDescriptor())
}
private static void annotationAdditionalResolve(ResolveSession resolveSession, JetAnnotationEntry jetAnnotationEntry) {
JetModifierList modifierList = PsiTreeUtil.getParentOfType(jetAnnotationEntry, JetModifierList.class);
JetDeclaration declaration = PsiTreeUtil.getParentOfType(modifierList, JetDeclaration.class);
private fun annotationAdditionalResolve(resolveSession: ResolveSession, jetAnnotationEntry: JetAnnotationEntry) {
val modifierList = PsiTreeUtil.getParentOfType<JetModifierList>(jetAnnotationEntry, javaClass<JetModifierList>())
val declaration = PsiTreeUtil.getParentOfType<JetDeclaration>(modifierList, javaClass<JetDeclaration>())
if (declaration != null) {
doResolveAnnotations(resolveSession, getAnnotationsByDeclaration(resolveSession, modifierList, declaration));
doResolveAnnotations(resolveSession, getAnnotationsByDeclaration(resolveSession, modifierList, declaration))
}
else {
JetFileAnnotationList fileAnnotationList = PsiTreeUtil.getParentOfType(jetAnnotationEntry, JetFileAnnotationList.class);
val fileAnnotationList = PsiTreeUtil.getParentOfType<JetFileAnnotationList>(jetAnnotationEntry, javaClass<JetFileAnnotationList>())
if (fileAnnotationList != null) {
doResolveAnnotations(resolveSession, resolveSession.getFileAnnotations(fileAnnotationList.getContainingJetFile()));
doResolveAnnotations(resolveSession, resolveSession.getFileAnnotations(fileAnnotationList.getContainingJetFile()))
}
if (modifierList != null && modifierList.getParent() instanceof JetFile) {
doResolveAnnotations(resolveSession, resolveSession.getDanglingAnnotations(modifierList.getContainingJetFile()));
if (modifierList != null && modifierList.getParent() is JetFile) {
doResolveAnnotations(resolveSession, resolveSession.getDanglingAnnotations(modifierList.getContainingJetFile()))
}
}
}
private static void doResolveAnnotations(ResolveSession resolveSession, Annotations annotations) {
AnnotationResolver.resolveAnnotationsArguments(annotations, resolveSession.getTrace());
ForceResolveUtil.forceResolveAllContents(annotations);
private fun doResolveAnnotations(resolveSession: ResolveSession, annotations: Annotations) {
AnnotationResolver.resolveAnnotationsArguments(annotations, resolveSession.getTrace())
ForceResolveUtil.forceResolveAllContents(annotations)
}
private static Annotations getAnnotationsByDeclaration(
ResolveSession resolveSession,
JetModifierList modifierList,
JetDeclaration declaration
) {
Annotated descriptor = resolveSession.resolveToDescriptor(declaration);
if (declaration instanceof JetClass) {
JetClass jetClass = (JetClass) declaration;
ClassDescriptor classDescriptor = (ClassDescriptor) descriptor;
private fun getAnnotationsByDeclaration(resolveSession: ResolveSession, modifierList: JetModifierList, declaration: JetDeclaration): Annotations {
var descriptor: Annotated? = resolveSession.resolveToDescriptor(declaration)
if (declaration is JetClass) {
val jetClass = declaration as JetClass
val classDescriptor = descriptor as ClassDescriptor
if (modifierList == jetClass.getPrimaryConstructorModifierList()) {
descriptor = classDescriptor.getUnsubstitutedPrimaryConstructor();
assert descriptor != null : "No constructor found: " + declaration.getText();
descriptor = classDescriptor.getUnsubstitutedPrimaryConstructor()
assert(descriptor != null) { "No constructor found: " + declaration.getText() }
}
else if (modifierList.getParent() == jetClass.getBody()) {
if (classDescriptor instanceof LazyClassDescriptor) {
return ((LazyClassDescriptor) classDescriptor).getDanglingAnnotations();
if (classDescriptor is LazyClassDescriptor) {
return (classDescriptor as LazyClassDescriptor).getDanglingAnnotations()
}
}
}
return descriptor.getAnnotations();
return descriptor!!.getAnnotations()
}
private static void typeParameterAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeParameter typeParameter) {
DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(typeParameter);
ForceResolveUtil.forceResolveAllContents(descriptor);
private fun typeParameterAdditionalResolve(analyzer: KotlinCodeAnalyzer, typeParameter: JetTypeParameter) {
val descriptor = analyzer.resolveToDescriptor(typeParameter)
ForceResolveUtil.forceResolveAllContents<DeclarationDescriptor>(descriptor)
}
private void delegationSpecifierAdditionalResolve(
ResolveSession resolveSession,
JetClassOrObject classOrObject,
BindingTrace trace,
JetFile file
) {
LazyClassDescriptor descriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject);
private fun delegationSpecifierAdditionalResolve(resolveSession: ResolveSession, classOrObject: JetClassOrObject, trace: BindingTrace, file: JetFile) {
val descriptor = resolveSession.resolveToDescriptor(classOrObject) as LazyClassDescriptor
// Activate resolving of supertypes
ForceResolveUtil.forceResolveAllContents(descriptor.getTypeConstructor().getSupertypes());
ForceResolveUtil.forceResolveAllContents(descriptor.getTypeConstructor().getSupertypes())
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, StatementFilter.NONE);
bodyResolver.resolveDelegationSpecifierList(createEmptyContext(resolveSession), classOrObject, descriptor,
descriptor.getUnsubstitutedPrimaryConstructor(),
descriptor.getScopeForClassHeaderResolution(),
descriptor.getScopeForMemberDeclarationResolution());
val bodyResolver = createBodyResolver(resolveSession, trace, file, StatementFilter.NONE)
bodyResolver.resolveDelegationSpecifierList(createEmptyContext(resolveSession), classOrObject, descriptor, descriptor.getUnsubstitutedPrimaryConstructor(), descriptor.getScopeForClassHeaderResolution(), descriptor.getScopeForMemberDeclarationResolution())
}
private void propertyAdditionalResolve(
final ResolveSession resolveSession,
final JetProperty jetProperty,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetScope propertyResolutionScope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(jetProperty);
private fun propertyAdditionalResolve(resolveSession: ResolveSession, jetProperty: JetProperty, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter) {
val propertyResolutionScope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(jetProperty)
BodyResolveContextForLazy bodyResolveContext = new BodyResolveContextForLazy(
createParameters(resolveSession),
new Function<JetDeclaration, JetScope>() {
@Override
public JetScope apply(JetDeclaration declaration) {
assert declaration.getParent() == jetProperty : "Must be called only for property accessors, but called for " +
declaration;
return resolveSession.getScopeProvider().getResolutionScopeForDeclaration(declaration);
}
});
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty);
ForceResolveUtil.forceResolveAllContents(descriptor);
val bodyResolveContext = BodyResolveContextForLazy(createParameters(resolveSession), object : Function<JetDeclaration, JetScope> {
override fun apply(declaration: JetDeclaration?): JetScope? {
assert(declaration!!.getParent() == jetProperty) { "Must be called only for property accessors, but called for " + declaration }
return resolveSession.getScopeProvider().getResolutionScopeForDeclaration(declaration)
}
})
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
val descriptor = resolveSession.resolveToDescriptor(jetProperty) as PropertyDescriptor
ForceResolveUtil.forceResolveAllContents<PropertyDescriptor>(descriptor)
JetExpression propertyInitializer = jetProperty.getInitializer();
val propertyInitializer = jetProperty.getInitializer()
if (propertyInitializer != null) {
bodyResolver.resolvePropertyInitializer(bodyResolveContext, jetProperty, descriptor, propertyInitializer, propertyResolutionScope);
bodyResolver.resolvePropertyInitializer(bodyResolveContext, jetProperty, descriptor, propertyInitializer, propertyResolutionScope)
}
JetExpression propertyDelegate = jetProperty.getDelegateExpression();
val propertyDelegate = jetProperty.getDelegateExpression()
if (propertyDelegate != null) {
bodyResolver.resolvePropertyDelegate(bodyResolveContext, jetProperty, descriptor, propertyDelegate, propertyResolutionScope, propertyResolutionScope);
bodyResolver.resolvePropertyDelegate(bodyResolveContext, jetProperty, descriptor, propertyDelegate, propertyResolutionScope, propertyResolutionScope)
}
bodyResolver.resolvePropertyAccessors(bodyResolveContext, jetProperty, descriptor);
bodyResolver.resolvePropertyAccessors(bodyResolveContext, jetProperty, descriptor)
for (JetPropertyAccessor accessor : jetProperty.getAccessors()) {
new JetFlowInformationProvider(accessor, trace).checkDeclaration();
for (accessor in jetProperty.getAccessors()) {
JetFlowInformationProvider(accessor, trace).checkDeclaration()
}
}
private void functionAdditionalResolve(
ResolveSession resolveSession,
JetNamedFunction namedFunction,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetScope scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(namedFunction);
FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction);
ForceResolveUtil.forceResolveAllContents(functionDescriptor);
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: JetNamedFunction, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter) {
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(namedFunction)
val functionDescriptor = resolveSession.resolveToDescriptor(namedFunction) as FunctionDescriptor
ForceResolveUtil.forceResolveAllContents<FunctionDescriptor>(functionDescriptor)
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
bodyResolver.resolveFunctionBody(createEmptyContext(resolveSession), trace, namedFunction, functionDescriptor, scope);
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
bodyResolver.resolveFunctionBody(createEmptyContext(resolveSession), trace, namedFunction, functionDescriptor, scope)
}
private void secondaryConstructorAdditionalResolve(
ResolveSession resolveSession,
JetSecondaryConstructor constructor,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetScope scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(constructor);
ConstructorDescriptor constructorDescriptor = (ConstructorDescriptor) resolveSession.resolveToDescriptor(constructor);
ForceResolveUtil.forceResolveAllContents(constructorDescriptor);
private fun secondaryConstructorAdditionalResolve(resolveSession: ResolveSession, constructor: JetSecondaryConstructor, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter) {
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(constructor)
val constructorDescriptor = resolveSession.resolveToDescriptor(constructor) as ConstructorDescriptor
ForceResolveUtil.forceResolveAllContents<ConstructorDescriptor>(constructorDescriptor)
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
bodyResolver.resolveSecondaryConstructorBody(createEmptyContext(resolveSession), trace, constructor, constructorDescriptor, scope);
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
bodyResolver.resolveSecondaryConstructorBody(createEmptyContext(resolveSession), trace, constructor, constructorDescriptor, scope)
}
private void constructorAdditionalResolve(
ResolveSession resolveSession,
JetClass klass,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetScope scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(klass);
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: JetClass, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter) {
val scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(klass)
ClassDescriptor classDescriptor = (ClassDescriptor) resolveSession.resolveToDescriptor(klass);
ConstructorDescriptor constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor();
assert constructorDescriptor != null :
String.format("Can't get primary constructor for descriptor '%s' in from class '%s'",
classDescriptor,
JetPsiUtil.getElementTextWithContext(klass));
val classDescriptor = resolveSession.resolveToDescriptor(klass) as ClassDescriptor
val constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor()
assert(constructorDescriptor != null) { String.format("Can't get primary constructor for descriptor '%s' in from class '%s'", classDescriptor, JetPsiUtil.getElementTextWithContext(klass)) }
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
bodyResolver.resolveConstructorParameterDefaultValuesAndAnnotations(createEmptyContext(resolveSession), trace, klass,
constructorDescriptor, scope);
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
bodyResolver.resolveConstructorParameterDefaultValuesAndAnnotations(createEmptyContext(resolveSession), trace, klass, constructorDescriptor, scope)
}
private void initializerAdditionalResolve(
ResolveSession resolveSession,
JetClassInitializer classInitializer,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class);
LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject);
private fun initializerAdditionalResolve(resolveSession: ResolveSession, classInitializer: JetClassInitializer, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter) {
val classOrObject = PsiTreeUtil.getParentOfType<JetClassOrObject>(classInitializer, javaClass<JetClassOrObject>())
val classOrObjectDescriptor = resolveSession.resolveToDescriptor(classOrObject) as LazyClassDescriptor
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
bodyResolver.resolveAnonymousInitializer(createEmptyContext(resolveSession), classInitializer, classOrObjectDescriptor);
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
bodyResolver.resolveAnonymousInitializer(createEmptyContext(resolveSession), classInitializer, classOrObjectDescriptor)
}
private BodyResolver createBodyResolver(ResolveSession resolveSession, BindingTrace trace, JetFile file, @NotNull StatementFilter statementFilter) {
InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(
file.getProject(),
createParameters(resolveSession),
trace,
resolveSession.getModuleDescriptor(),
getAdditionalCheckerProvider(file),
statementFilter
);
return bodyResolve.getBodyResolver();
private fun createBodyResolver(resolveSession: ResolveSession, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter): BodyResolver {
val bodyResolve = InjectorForBodyResolve(file.getProject(), createParameters(resolveSession), trace, resolveSession.getModuleDescriptor(), getAdditionalCheckerProvider(file), statementFilter)
return bodyResolve.getBodyResolver()
}
private static TopDownAnalysisParameters createParameters(@NotNull ResolveSession resolveSession) {
return TopDownAnalysisParameters.createForLocalDeclarations(
resolveSession.getStorageManager(), resolveSession.getExceptionTracker()
);
private fun createParameters(resolveSession: ResolveSession): TopDownAnalysisParameters {
return TopDownAnalysisParameters.createForLocalDeclarations(resolveSession.getStorageManager(), resolveSession.getExceptionTracker())
}
@NotNull
private static BodyResolveContextForLazy createEmptyContext(@NotNull ResolveSession resolveSession) {
return new BodyResolveContextForLazy(createParameters(resolveSession), Functions.<JetScope>constant(null));
private fun createEmptyContext(resolveSession: ResolveSession): BodyResolveContextForLazy {
return BodyResolveContextForLazy(createParameters(resolveSession), Functions.constant<JetScope>(null))
}
private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) {
ScopeProvider provider = resolveSession.getScopeProvider();
JetDeclaration parentDeclaration = PsiTreeUtil.getParentOfType(expression, JetDeclaration.class);
private fun getExpressionResolutionScope(resolveSession: ResolveSession, expression: JetExpression): JetScope {
val provider = resolveSession.getScopeProvider()
val parentDeclaration = PsiTreeUtil.getParentOfType<JetDeclaration>(expression, javaClass<JetDeclaration>())
if (parentDeclaration == null) {
return provider.getFileScope(expression.getContainingJetFile());
return provider.getFileScope(expression.getContainingJetFile())
}
return provider.getResolutionScopeForDeclaration(parentDeclaration);
return provider.getResolutionScopeForDeclaration(parentDeclaration)
}
private static JetScope getExpressionMemberScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) {
BindingTrace trace = resolveSession.getStorageManager().createSafeTrace(new DelegatingBindingTrace(
resolveSession.getBindingContext(), "trace to resolve a member scope of expression", expression));
private fun getExpressionMemberScope(resolveSession: ResolveSession, expression: JetExpression): JetScope? {
val trace = resolveSession.getStorageManager().createSafeTrace(DelegatingBindingTrace(resolveSession.getBindingContext(), "trace to resolve a member scope of expression", expression))
if (BindingContextUtils.isExpressionWithValidReference(expression, resolveSession.getBindingContext())) {
QualifiedExpressionResolver qualifiedExpressionResolver = resolveSession.getQualifiedExpressionResolver();
val qualifiedExpressionResolver = resolveSession.getQualifiedExpressionResolver()
// In some type declaration
if (expression.getParent() instanceof JetUserType) {
JetUserType qualifier = ((JetUserType) expression.getParent()).getQualifier();
if (expression.getParent() is JetUserType) {
val qualifier = (expression.getParent() as JetUserType).getQualifier()
if (qualifier != null) {
JetScope resolutionScope = getExpressionResolutionScope(resolveSession, expression);
Collection<DeclarationDescriptor> descriptors =
qualifiedExpressionResolver.lookupDescriptorsForUserType(qualifier, resolutionScope, trace, false);
for (DeclarationDescriptor descriptor : descriptors) {
if (descriptor instanceof LazyPackageDescriptor) {
return ((LazyPackageDescriptor) descriptor).getMemberScope();
val resolutionScope = getExpressionResolutionScope(resolveSession, expression)
val descriptors = qualifiedExpressionResolver.lookupDescriptorsForUserType(qualifier, resolutionScope, trace, false)
for (descriptor in descriptors) {
if (descriptor is LazyPackageDescriptor) {
return (descriptor as LazyPackageDescriptor).getMemberScope()
}
}
}
}
// Inside import
if (PsiTreeUtil.getParentOfType(expression, JetImportDirective.class, false) != null) {
PackageViewDescriptor rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT);
assert rootPackage != null;
if (PsiTreeUtil.getParentOfType<JetImportDirective>(expression, javaClass<JetImportDirective>(), false) != null) {
val rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT)
assert(rootPackage != null)
if (expression.getParent() instanceof JetDotQualifiedExpression) {
JetExpression element = ((JetDotQualifiedExpression) expression.getParent()).getReceiverExpression();
FqName fqName = expression.getContainingJetFile().getPackageFqName();
if (expression.getParent() is JetDotQualifiedExpression) {
val element = (expression.getParent() as JetDotQualifiedExpression).getReceiverExpression()
val fqName = expression.getContainingJetFile().getPackageFqName()
PackageViewDescriptor filePackage = resolveSession.getModuleDescriptor().getPackage(fqName);
assert filePackage != null : "File package should be already resolved and be found";
val filePackage = resolveSession.getModuleDescriptor().getPackage(fqName)
assert(filePackage != null, "File package should be already resolved and be found")
JetScope scope = filePackage.getMemberScope();
Collection<? extends DeclarationDescriptor> descriptors;
val scope = filePackage!!.getMemberScope()
val descriptors: Collection<out DeclarationDescriptor>
if (element instanceof JetDotQualifiedExpression) {
descriptors = qualifiedExpressionResolver.lookupDescriptorsForQualifiedExpression(
(JetDotQualifiedExpression) element, rootPackage.getMemberScope(), scope, trace,
QualifiedExpressionResolver.LookupMode.EVERYTHING, false);
if (element is JetDotQualifiedExpression) {
descriptors = qualifiedExpressionResolver.lookupDescriptorsForQualifiedExpression(element as JetDotQualifiedExpression, rootPackage!!.getMemberScope(), scope, trace, QualifiedExpressionResolver.LookupMode.EVERYTHING, false)
}
else {
descriptors = qualifiedExpressionResolver.lookupDescriptorsForSimpleNameReference(
(JetSimpleNameExpression) element, rootPackage.getMemberScope(), scope, trace,
QualifiedExpressionResolver.LookupMode.EVERYTHING, false, false);
descriptors = qualifiedExpressionResolver.lookupDescriptorsForSimpleNameReference(element as JetSimpleNameExpression, rootPackage!!.getMemberScope(), scope, trace, QualifiedExpressionResolver.LookupMode.EVERYTHING, false, false)
}
for (DeclarationDescriptor descriptor : descriptors) {
if (descriptor instanceof PackageViewDescriptor) {
return ((PackageViewDescriptor) descriptor).getMemberScope();
for (descriptor in descriptors) {
if (descriptor is PackageViewDescriptor) {
return (descriptor as PackageViewDescriptor).getMemberScope()
}
}
}
else {
return rootPackage.getMemberScope();
return rootPackage!!.getMemberScope()
}
}
// Inside package declaration
JetPackageDirective packageDirective = PsiTreeUtil.getParentOfType(expression, JetPackageDirective.class, false);
val packageDirective = PsiTreeUtil.getParentOfType<JetPackageDirective>(expression, javaClass<JetPackageDirective>(), false)
if (packageDirective != null) {
PackageViewDescriptor packageDescriptor = resolveSession.getModuleDescriptor().getPackage(
packageDirective.getFqName((JetSimpleNameExpression) expression).parent());
val packageDescriptor = resolveSession.getModuleDescriptor().getPackage(packageDirective.getFqName(expression as JetSimpleNameExpression).parent())
if (packageDescriptor != null) {
return packageDescriptor.getMemberScope();
return packageDescriptor.getMemberScope()
}
}
}
return null;
return null
}
@NotNull
protected abstract AdditionalCheckerProvider getAdditionalCheckerProvider(@NotNull JetFile jetFile);
protected abstract fun getAdditionalCheckerProvider(jetFile: JetFile): AdditionalCheckerProvider
private static class BodyResolveContextForLazy implements BodiesResolveContext {
private class BodyResolveContextForLazy private(private val topDownAnalysisParameters: TopDownAnalysisParameters, private val declaringScopes: Function<in JetDeclaration, JetScope>) : BodiesResolveContext {
private final Function<? super JetDeclaration, JetScope> declaringScopes;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private BodyResolveContextForLazy(
@NotNull TopDownAnalysisParameters parameters,
@NotNull Function<? super JetDeclaration, JetScope> declaringScopes
) {
this.topDownAnalysisParameters = parameters;
this.declaringScopes = declaringScopes;
override fun getStorageManager(): StorageManager {
return topDownAnalysisParameters.getStorageManager()
}
@NotNull
@Override
public StorageManager getStorageManager() {
return topDownAnalysisParameters.getStorageManager();
override fun getExceptionTracker(): ExceptionTracker {
return topDownAnalysisParameters.getExceptionTracker()
}
@NotNull
@Override
public ExceptionTracker getExceptionTracker() {
return topDownAnalysisParameters.getExceptionTracker();
override fun getFiles(): Collection<JetFile> {
return setOf()
}
@Override
public Collection<JetFile> getFiles() {
return Collections.emptySet();
override fun getDeclaredClasses(): Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> {
return mapOf()
}
@Override
public Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> getDeclaredClasses() {
return Collections.emptyMap();
override fun getAnonymousInitializers(): Map<JetClassInitializer, ClassDescriptorWithResolutionScopes> {
return mapOf()
}
@Override
public Map<JetClassInitializer, ClassDescriptorWithResolutionScopes> getAnonymousInitializers() {
return Collections.emptyMap();
override fun getSecondaryConstructors(): Map<JetSecondaryConstructor, ConstructorDescriptor> {
return mapOf()
}
@Override
public Map<JetSecondaryConstructor, ConstructorDescriptor> getSecondaryConstructors() {
return Collections.emptyMap();
override fun getProperties(): Map<JetProperty, PropertyDescriptor> {
return mapOf()
}
@Override
public Map<JetProperty, PropertyDescriptor> getProperties() {
return Collections.emptyMap();
override fun getFunctions(): Map<JetNamedFunction, SimpleFunctionDescriptor> {
return mapOf()
}
@Override
public Map<JetNamedFunction, SimpleFunctionDescriptor> getFunctions() {
return Collections.emptyMap();
}
@Override
public Function<JetDeclaration, JetScope> getDeclaringScopes() {
override fun getDeclaringScopes(): Function<JetDeclaration, JetScope> {
//noinspection unchecked
return (Function<JetDeclaration, JetScope>) declaringScopes;
return declaringScopes as Function<JetDeclaration, JetScope>
}
@Override
public Map<JetScript, ScriptDescriptor> getScripts() {
return Collections.emptyMap();
override fun getScripts(): Map<JetScript, ScriptDescriptor> {
return mapOf()
}
@Override
public DataFlowInfo getOuterDataFlowInfo() {
return DataFlowInfo.EMPTY;
override fun getOuterDataFlowInfo(): DataFlowInfo {
return DataFlowInfo.EMPTY
}
@NotNull
@Override
public TopDownAnalysisParameters getTopDownAnalysisParameters() {
return topDownAnalysisParameters;
override fun getTopDownAnalysisParameters(): TopDownAnalysisParameters {
return topDownAnalysisParameters
}
}
}