Classify Location.NO_LOCATION usages
This commit is contained in:
@@ -60,7 +60,7 @@ public class CodegenUtil {
|
|||||||
@NotNull ClassifierDescriptor returnedClassifier,
|
@NotNull ClassifierDescriptor returnedClassifier,
|
||||||
@NotNull ClassifierDescriptor... valueParameterClassifiers
|
@NotNull ClassifierDescriptor... valueParameterClassifiers
|
||||||
) {
|
) {
|
||||||
Collection<FunctionDescriptor> functions = owner.getDefaultType().getMemberScope().getFunctions(name, LookupLocation.NO_LOCATION);
|
Collection<FunctionDescriptor> functions = owner.getDefaultType().getMemberScope().getFunctions(name, LookupLocation.NO_LOCATION_FROM_BACKEND);
|
||||||
for (FunctionDescriptor function : functions) {
|
for (FunctionDescriptor function : functions) {
|
||||||
if (!CallResolverUtilPackage.isOrOverridesSynthesized(function)
|
if (!CallResolverUtilPackage.isOrOverridesSynthesized(function)
|
||||||
&& function.getTypeParameters().isEmpty()
|
&& function.getTypeParameters().isEmpty()
|
||||||
|
|||||||
@@ -16,16 +16,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common
|
package org.jetbrains.kotlin.backend.common
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.types.JetType
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import kotlin.platform.platformStatic
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
|
||||||
import org.jetbrains.kotlin.utils.keysToMapExceptNulls
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.MemberComparator
|
import org.jetbrains.kotlin.resolve.MemberComparator
|
||||||
import java.util.Comparator
|
import org.jetbrains.kotlin.types.JetType
|
||||||
import org.jetbrains.kotlin.types.isDynamic
|
import org.jetbrains.kotlin.types.isDynamic
|
||||||
|
import org.jetbrains.kotlin.utils.keysToMapExceptNulls
|
||||||
|
import java.util.Comparator
|
||||||
|
import kotlin.platform.platformStatic
|
||||||
|
|
||||||
public object CodegenUtilKt {
|
public object CodegenUtilKt {
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ public object CodegenUtilKt {
|
|||||||
val name = overriddenDescriptor.getName()
|
val name = overriddenDescriptor.getName()
|
||||||
|
|
||||||
// this is the actual member of delegateExpressionType that we are delegating to
|
// this is the actual member of delegateExpressionType that we are delegating to
|
||||||
(scope.getFunctions(name) + scope.getProperties(name))
|
(scope.getFunctions(name, LookupLocation.NO_LOCATION_FROM_BACKEND) + scope.getProperties(name, LookupLocation.NO_LOCATION_FROM_BACKEND))
|
||||||
.first {
|
.first {
|
||||||
(listOf(it) + DescriptorUtils.getAllOverriddenDescriptors(it)).map { it.getOriginal() }.contains(overriddenDescriptor.getOriginal())
|
(listOf(it) + DescriptorUtils.getAllOverriddenDescriptors(it)).map { it.getOriginal() }.contains(overriddenDescriptor.getOriginal())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.psi.JetElement;
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupLocation;
|
import org.jetbrains.kotlin.incremental.components.LookupLocation;
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
|
||||||
import org.jetbrains.kotlin.utils.UtilsPackage;
|
import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||||
@@ -453,6 +454,7 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
|
|||||||
ClassDescriptor elementClass = elementDescriptor.getExtensionReceiverParameter() == null
|
ClassDescriptor elementClass = elementDescriptor.getExtensionReceiverParameter() == null
|
||||||
? getBuiltIns(elementDescriptor).getFunction(arity)
|
? getBuiltIns(elementDescriptor).getFunction(arity)
|
||||||
: getBuiltIns(elementDescriptor).getExtensionFunction(arity);
|
: getBuiltIns(elementDescriptor).getExtensionFunction(arity);
|
||||||
return elementClass.getDefaultType().getMemberScope().getFunctions(OperatorConventions.INVOKE, LookupLocation.NO_LOCATION).iterator().next();
|
JetScope scope = elementClass.getDefaultType().getMemberScope();
|
||||||
|
return scope.getFunctions(OperatorConventions.INVOKE, LookupLocation.NO_LOCATION_FROM_BACKEND).iterator().next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1075,7 +1075,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
Type asmLoopRangeType = asmType(loopRangeType);
|
Type asmLoopRangeType = asmType(loopRangeType);
|
||||||
|
|
||||||
Collection<VariableDescriptor> incrementProp =
|
Collection<VariableDescriptor> incrementProp =
|
||||||
loopRangeType.getMemberScope().getProperties(Name.identifier("increment"), LookupLocation.NO_LOCATION);
|
loopRangeType.getMemberScope().getProperties(Name.identifier("increment"), LookupLocation.NO_LOCATION_FROM_BACKEND);
|
||||||
assert incrementProp.size() == 1 : loopRangeType + " " + incrementProp.size();
|
assert incrementProp.size() == 1 : loopRangeType + " " + incrementProp.size();
|
||||||
incrementType = asmType(incrementProp.iterator().next().getType());
|
incrementType = asmType(incrementProp.iterator().next().getType());
|
||||||
|
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
|
|
||||||
private boolean isGenericToArrayPresent() {
|
private boolean isGenericToArrayPresent() {
|
||||||
Collection<FunctionDescriptor> functions =
|
Collection<FunctionDescriptor> functions =
|
||||||
descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier("toArray"), LookupLocation.NO_LOCATION);
|
descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier("toArray"), LookupLocation.NO_LOCATION_FROM_BACKEND);
|
||||||
for (FunctionDescriptor function : functions) {
|
for (FunctionDescriptor function : functions) {
|
||||||
if (CallResolverUtilPackage.isOrOverridesSynthesized(function)) {
|
if (CallResolverUtilPackage.isOrOverridesSynthesized(function)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -817,7 +817,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Type type = typeMapper.mapType(getBuiltIns(descriptor).getArrayType(INVARIANT, descriptor.getDefaultType()));
|
Type type = typeMapper.mapType(getBuiltIns(descriptor).getArrayType(INVARIANT, descriptor.getDefaultType()));
|
||||||
|
|
||||||
FunctionDescriptor valuesFunction =
|
FunctionDescriptor valuesFunction =
|
||||||
KotlinPackage.single(descriptor.getStaticScope().getFunctions(ENUM_VALUES, LookupLocation.NO_LOCATION), new Function1<FunctionDescriptor, Boolean>() {
|
KotlinPackage.single(descriptor.getStaticScope().getFunctions(ENUM_VALUES, LookupLocation.NO_LOCATION_FROM_BACKEND), new Function1<FunctionDescriptor, Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public Boolean invoke(FunctionDescriptor descriptor) {
|
public Boolean invoke(FunctionDescriptor descriptor) {
|
||||||
return CodegenUtil.isEnumValuesMethod(descriptor);
|
return CodegenUtil.isEnumValuesMethod(descriptor);
|
||||||
@@ -837,7 +837,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
|
|
||||||
private void generateEnumValueOfMethod() {
|
private void generateEnumValueOfMethod() {
|
||||||
FunctionDescriptor valueOfFunction =
|
FunctionDescriptor valueOfFunction =
|
||||||
KotlinPackage.single(descriptor.getStaticScope().getFunctions(ENUM_VALUE_OF, LookupLocation.NO_LOCATION), new Function1<FunctionDescriptor, Boolean>() {
|
KotlinPackage.single(descriptor.getStaticScope().getFunctions(ENUM_VALUE_OF, LookupLocation.NO_LOCATION_FROM_BACKEND), new Function1<FunctionDescriptor, Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public Boolean invoke(FunctionDescriptor descriptor) {
|
public Boolean invoke(FunctionDescriptor descriptor) {
|
||||||
return CodegenUtil.isEnumValueOfMethod(descriptor);
|
return CodegenUtil.isEnumValueOfMethod(descriptor);
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ public class SamWrapperCodegen {
|
|||||||
(ClassDescriptor) erasedInterfaceFunction.getContainingDeclaration(), OwnerKind.IMPLEMENTATION, state), cv, state, parentCodegen);
|
(ClassDescriptor) erasedInterfaceFunction.getContainingDeclaration(), OwnerKind.IMPLEMENTATION, state), cv, state, parentCodegen);
|
||||||
|
|
||||||
FunctionDescriptor invokeFunction =
|
FunctionDescriptor invokeFunction =
|
||||||
functionJetType.getMemberScope().getFunctions(OperatorConventions.INVOKE, LookupLocation.NO_LOCATION).iterator().next().getOriginal();
|
functionJetType.getMemberScope().getFunctions(OperatorConventions.INVOKE, LookupLocation.NO_LOCATION_FROM_BACKEND).iterator().next().getOriginal();
|
||||||
StackValue functionField = StackValue.field(functionType, ownerType, FUNCTION_FIELD_NAME, false, StackValue.none());
|
StackValue functionField = StackValue.field(functionType, ownerType, FUNCTION_FIELD_NAME, false, StackValue.none());
|
||||||
codegen.genDelegate(erasedInterfaceFunction, invokeFunction, functionField);
|
codegen.genDelegate(erasedInterfaceFunction, invokeFunction, functionField);
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.context.ProjectContext
|
import org.jetbrains.kotlin.context.ProjectContext
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
@@ -113,7 +114,7 @@ public class MultiModuleJavaAnalysisCustomTest : UsefulTestCase() {
|
|||||||
private fun checkClassInPackage(moduleDescriptor: ModuleDescriptor, packageName: String, className: String) {
|
private fun checkClassInPackage(moduleDescriptor: ModuleDescriptor, packageName: String, className: String) {
|
||||||
val kotlinPackage = moduleDescriptor.getPackage(FqName(packageName))
|
val kotlinPackage = moduleDescriptor.getPackage(FqName(packageName))
|
||||||
val kotlinClassName = Name.identifier(className)
|
val kotlinClassName = Name.identifier(className)
|
||||||
val kotlinClass = kotlinPackage.memberScope.getClassifier(kotlinClassName) as ClassDescriptor
|
val kotlinClass = kotlinPackage.memberScope.getClassifier(kotlinClassName, LookupLocation.NO_LOCATION_FROM_TEST) as ClassDescriptor
|
||||||
checkClass(kotlinClass)
|
checkClass(kotlinClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -155,7 +155,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
protected static FunctionDescriptor getFunctionDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name) {
|
protected static FunctionDescriptor getFunctionDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name) {
|
||||||
Name functionName = Name.identifier(name);
|
Name functionName = Name.identifier(name);
|
||||||
JetScope memberScope = packageView.getMemberScope();
|
JetScope memberScope = packageView.getMemberScope();
|
||||||
Collection<FunctionDescriptor> functions = memberScope.getFunctions(functionName, LookupLocation.NO_LOCATION);
|
Collection<FunctionDescriptor> functions = memberScope.getFunctions(functionName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + packageView.getName();
|
assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + packageView.getName();
|
||||||
return functions.iterator().next();
|
return functions.iterator().next();
|
||||||
}
|
}
|
||||||
@@ -164,7 +164,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
private static FunctionDescriptor getFunctionDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
private static FunctionDescriptor getFunctionDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
||||||
Name functionName = Name.identifier(name);
|
Name functionName = Name.identifier(name);
|
||||||
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
||||||
Collection<FunctionDescriptor> functions = memberScope.getFunctions(functionName, LookupLocation.NO_LOCATION);
|
Collection<FunctionDescriptor> functions = memberScope.getFunctions(functionName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + classDescriptor.getName();
|
assert functions.size() == 1 : "Failed to find function " + functionName + " in class" + "." + classDescriptor.getName();
|
||||||
return functions.iterator().next();
|
return functions.iterator().next();
|
||||||
}
|
}
|
||||||
@@ -173,13 +173,13 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
protected static PropertyDescriptor getPropertyDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name, boolean failOnMissing) {
|
protected static PropertyDescriptor getPropertyDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name, boolean failOnMissing) {
|
||||||
Name propertyName = Name.identifier(name);
|
Name propertyName = Name.identifier(name);
|
||||||
JetScope memberScope = packageView.getMemberScope();
|
JetScope memberScope = packageView.getMemberScope();
|
||||||
Collection<VariableDescriptor> properties = memberScope.getProperties(propertyName, LookupLocation.NO_LOCATION);
|
Collection<VariableDescriptor> properties = memberScope.getProperties(propertyName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
if (properties.isEmpty()) {
|
if (properties.isEmpty()) {
|
||||||
for (DeclarationDescriptor descriptor : memberScope.getAllDescriptors()) {
|
for (DeclarationDescriptor descriptor : memberScope.getAllDescriptors()) {
|
||||||
if (descriptor instanceof ClassDescriptor) {
|
if (descriptor instanceof ClassDescriptor) {
|
||||||
Collection<VariableDescriptor> classProperties =
|
Collection<VariableDescriptor> classProperties =
|
||||||
((ClassDescriptor) descriptor).getMemberScope(Collections.<TypeProjection>emptyList())
|
((ClassDescriptor) descriptor).getMemberScope(Collections.<TypeProjection>emptyList())
|
||||||
.getProperties(propertyName, LookupLocation.NO_LOCATION);
|
.getProperties(propertyName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
if (!classProperties.isEmpty()) {
|
if (!classProperties.isEmpty()) {
|
||||||
properties = classProperties;
|
properties = classProperties;
|
||||||
break;
|
break;
|
||||||
@@ -200,7 +200,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
private static PropertyDescriptor getPropertyDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
private static PropertyDescriptor getPropertyDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
||||||
Name propertyName = Name.identifier(name);
|
Name propertyName = Name.identifier(name);
|
||||||
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
||||||
Collection<VariableDescriptor> properties = memberScope.getProperties(propertyName, LookupLocation.NO_LOCATION);
|
Collection<VariableDescriptor> properties = memberScope.getProperties(propertyName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert properties.size() == 1 : "Failed to find property " + propertyName + " in class " + classDescriptor.getName();
|
assert properties.size() == 1 : "Failed to find property " + propertyName + " in class " + classDescriptor.getName();
|
||||||
return (PropertyDescriptor) properties.iterator().next();
|
return (PropertyDescriptor) properties.iterator().next();
|
||||||
}
|
}
|
||||||
@@ -208,7 +208,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
@NotNull
|
@NotNull
|
||||||
protected static ClassDescriptor getClassDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name) {
|
protected static ClassDescriptor getClassDescriptor(@NotNull PackageFragmentDescriptor packageView, @NotNull String name) {
|
||||||
Name className = Name.identifier(name);
|
Name className = Name.identifier(name);
|
||||||
ClassifierDescriptor aClass = packageView.getMemberScope().getClassifier(className, LookupLocation.NO_LOCATION);
|
ClassifierDescriptor aClass = packageView.getMemberScope().getClassifier(className, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assertNotNull("Failed to find class: " + packageView.getName() + "." + className, aClass);
|
assertNotNull("Failed to find class: " + packageView.getName() + "." + className, aClass);
|
||||||
assert aClass instanceof ClassDescriptor : "Not a class: " + aClass;
|
assert aClass instanceof ClassDescriptor : "Not a class: " + aClass;
|
||||||
return (ClassDescriptor) aClass;
|
return (ClassDescriptor) aClass;
|
||||||
@@ -218,7 +218,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
|
|||||||
private static ClassDescriptor getInnerClassDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
private static ClassDescriptor getInnerClassDescriptor(@NotNull ClassDescriptor classDescriptor, @NotNull String name) {
|
||||||
Name propertyName = Name.identifier(name);
|
Name propertyName = Name.identifier(name);
|
||||||
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
JetScope memberScope = classDescriptor.getMemberScope(Collections.<TypeProjection>emptyList());
|
||||||
ClassifierDescriptor innerClass = memberScope.getClassifier(propertyName, LookupLocation.NO_LOCATION);
|
ClassifierDescriptor innerClass = memberScope.getClassifier(propertyName, LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert innerClass instanceof ClassDescriptor : "Failed to find inner class " +
|
assert innerClass instanceof ClassDescriptor : "Failed to find inner class " +
|
||||||
propertyName +
|
propertyName +
|
||||||
" in class " +
|
" in class " +
|
||||||
|
|||||||
@@ -411,7 +411,7 @@ public class DescriptorValidator {
|
|||||||
public Void visitVariableDescriptor(
|
public Void visitVariableDescriptor(
|
||||||
VariableDescriptor descriptor, JetScope scope
|
VariableDescriptor descriptor, JetScope scope
|
||||||
) {
|
) {
|
||||||
assertFound(scope, descriptor, scope.getProperties(descriptor.getName(), LookupLocation.NO_LOCATION));
|
assertFound(scope, descriptor, scope.getProperties(descriptor.getName(), LookupLocation.NO_LOCATION_FROM_TEST));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -419,7 +419,7 @@ public class DescriptorValidator {
|
|||||||
public Void visitFunctionDescriptor(
|
public Void visitFunctionDescriptor(
|
||||||
FunctionDescriptor descriptor, JetScope scope
|
FunctionDescriptor descriptor, JetScope scope
|
||||||
) {
|
) {
|
||||||
assertFound(scope, descriptor, scope.getFunctions(descriptor.getName(), LookupLocation.NO_LOCATION));
|
assertFound(scope, descriptor, scope.getFunctions(descriptor.getName(), LookupLocation.NO_LOCATION_FROM_TEST));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@ public class DescriptorValidator {
|
|||||||
public Void visitTypeParameterDescriptor(
|
public Void visitTypeParameterDescriptor(
|
||||||
TypeParameterDescriptor descriptor, JetScope scope
|
TypeParameterDescriptor descriptor, JetScope scope
|
||||||
) {
|
) {
|
||||||
assertFound(scope, descriptor, scope.getClassifier(descriptor.getName(), LookupLocation.NO_LOCATION), true);
|
assertFound(scope, descriptor, scope.getClassifier(descriptor.getName(), LookupLocation.NO_LOCATION_FROM_TEST), true);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,7 +435,7 @@ public class DescriptorValidator {
|
|||||||
public Void visitClassDescriptor(
|
public Void visitClassDescriptor(
|
||||||
ClassDescriptor descriptor, JetScope scope
|
ClassDescriptor descriptor, JetScope scope
|
||||||
) {
|
) {
|
||||||
assertFound(scope, descriptor, scope.getClassifier(descriptor.getName(), LookupLocation.NO_LOCATION), true);
|
assertFound(scope, descriptor, scope.getClassifier(descriptor.getName(), LookupLocation.NO_LOCATION_FROM_TEST), true);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public class BoundsSubstitutorTest extends KotlinTestWithEnvironment {
|
|||||||
JetFile jetFile = JetPsiFactory(getProject()).createFile("fun.kt", text);
|
JetFile jetFile = JetPsiFactory(getProject()).createFile("fun.kt", text);
|
||||||
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment());
|
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment());
|
||||||
Collection<FunctionDescriptor> functions =
|
Collection<FunctionDescriptor> functions =
|
||||||
module.getPackage(FqName.ROOT).getMemberScope().getFunctions(Name.identifier("f"), LookupLocation.NO_LOCATION);
|
module.getPackage(FqName.ROOT).getMemberScope().getFunctions(Name.identifier("f"), LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert functions.size() == 1 : "Many functions defined";
|
assert functions.size() == 1 : "Many functions defined";
|
||||||
FunctionDescriptor function = ContainerUtil.getFirstItem(functions);
|
FunctionDescriptor function = ContainerUtil.getFirstItem(functions);
|
||||||
|
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ public class JetTypeCheckerTest extends JetLiteFixture {
|
|||||||
else {
|
else {
|
||||||
Name shortName = fqName.shortName();
|
Name shortName = fqName.shortName();
|
||||||
assert shortName.equals(defaultImport.getImportedName());
|
assert shortName.equals(defaultImport.getImportedName());
|
||||||
writableScope.addClassifierDescriptor(module.getPackage(fqName.parent()).getMemberScope().getClassifier(shortName, LookupLocation.NO_LOCATION));
|
writableScope.addClassifierDescriptor(module.getPackage(fqName.parent()).getMemberScope().getClassifier(shortName, LookupLocation.NO_LOCATION_FROM_TEST));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scopeChain.add(module.getPackage(FqName.ROOT).getMemberScope());
|
scopeChain.add(module.getPackage(FqName.ROOT).getMemberScope());
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment {
|
|||||||
JetFile jetFile = JetPsiFactory(getProject()).createFile(text);
|
JetFile jetFile = JetPsiFactory(getProject()).createFile(text);
|
||||||
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment());
|
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment());
|
||||||
JetScope topLevelDeclarations = module.getPackage(FqName.ROOT).getMemberScope();
|
JetScope topLevelDeclarations = module.getPackage(FqName.ROOT).getMemberScope();
|
||||||
ClassifierDescriptor contextClass = topLevelDeclarations.getClassifier(Name.identifier("___Context"), LookupLocation.NO_LOCATION);
|
ClassifierDescriptor contextClass = topLevelDeclarations.getClassifier(Name.identifier("___Context"), LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assert contextClass instanceof ClassDescriptor;
|
assert contextClass instanceof ClassDescriptor;
|
||||||
WritableScopeImpl typeParameters = new WritableScopeImpl(JetScope.Empty.INSTANCE$, module, RedeclarationHandler.THROW_EXCEPTION,
|
WritableScopeImpl typeParameters = new WritableScopeImpl(JetScope.Empty.INSTANCE$, module, RedeclarationHandler.THROW_EXCEPTION,
|
||||||
"Type parameter scope");
|
"Type parameter scope");
|
||||||
@@ -125,7 +125,7 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment {
|
|||||||
String typeParameterName = pair.first;
|
String typeParameterName = pair.first;
|
||||||
String replacementProjectionString = pair.second;
|
String replacementProjectionString = pair.second;
|
||||||
|
|
||||||
ClassifierDescriptor classifier = scope.getClassifier(Name.identifier(typeParameterName), LookupLocation.NO_LOCATION);
|
ClassifierDescriptor classifier = scope.getClassifier(Name.identifier(typeParameterName), LookupLocation.NO_LOCATION_FROM_TEST);
|
||||||
assertNotNull("No type parameter named " + typeParameterName, classifier);
|
assertNotNull("No type parameter named " + typeParameterName, classifier);
|
||||||
assertTrue(typeParameterName + " is not a type parameter: " + classifier, classifier instanceof TypeParameterDescriptor);
|
assertTrue(typeParameterName + " is not a type parameter: " + classifier, classifier instanceof TypeParameterDescriptor);
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION
|
||||||
@@ -81,7 +82,7 @@ fun JetType.isResolvableInScope(scope: JetScope?, checkTypeParameters: Boolean):
|
|||||||
if (descriptor == null || descriptor.getName().isSpecial()) return false
|
if (descriptor == null || descriptor.getName().isSpecial()) return false
|
||||||
if (!checkTypeParameters && descriptor is TypeParameterDescriptor) return true
|
if (!checkTypeParameters && descriptor is TypeParameterDescriptor) return true
|
||||||
|
|
||||||
return scope != null && scope.getClassifier(descriptor.getName()) == descriptor
|
return scope != null && scope.getClassifier(descriptor.name, LookupLocation.NO_LOCATION_FROM_IDE) == descriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun JetType.approximateWithResolvableType(scope: JetScope?, checkTypeParameters: Boolean): JetType {
|
public fun JetType.approximateWithResolvableType(scope: JetScope?, checkTypeParameters: Boolean): JetType {
|
||||||
|
|||||||
+2
-2
@@ -140,7 +140,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
|
|||||||
if (declaration instanceof JetFunction) {
|
if (declaration instanceof JetFunction) {
|
||||||
JetFunction jetFunction = (JetFunction) declaration;
|
JetFunction jetFunction = (JetFunction) declaration;
|
||||||
Name name = jetFunction.getNameAsSafeName();
|
Name name = jetFunction.getNameAsSafeName();
|
||||||
Collection<FunctionDescriptor> functions = packageDescriptor.getMemberScope().getFunctions(name, LookupLocation.NO_LOCATION);
|
Collection<FunctionDescriptor> functions = packageDescriptor.getMemberScope().getFunctions(name, LookupLocation.NO_LOCATION_FROM_IDE);
|
||||||
for (FunctionDescriptor descriptor : functions) {
|
for (FunctionDescriptor descriptor : functions) {
|
||||||
ForceResolveUtil.forceResolveAllContents(descriptor);
|
ForceResolveUtil.forceResolveAllContents(descriptor);
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
|
|||||||
else if (declaration instanceof JetProperty) {
|
else if (declaration instanceof JetProperty) {
|
||||||
JetProperty jetProperty = (JetProperty) declaration;
|
JetProperty jetProperty = (JetProperty) declaration;
|
||||||
Name name = jetProperty.getNameAsSafeName();
|
Name name = jetProperty.getNameAsSafeName();
|
||||||
Collection<VariableDescriptor> properties = packageDescriptor.getMemberScope().getProperties(name, LookupLocation.NO_LOCATION);
|
Collection<VariableDescriptor> properties = packageDescriptor.getMemberScope().getProperties(name, LookupLocation.NO_LOCATION_FROM_IDE);
|
||||||
for (VariableDescriptor descriptor : properties) {
|
for (VariableDescriptor descriptor : properties) {
|
||||||
ForceResolveUtil.forceResolveAllContents(descriptor);
|
ForceResolveUtil.forceResolveAllContents(descriptor);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.caches.resolve
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.sources.JavaSourceElement
|
import org.jetbrains.kotlin.load.java.sources.JavaSourceElement
|
||||||
import org.jetbrains.kotlin.load.java.structure.*
|
import org.jetbrains.kotlin.load.java.structure.*
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.*
|
import org.jetbrains.kotlin.load.java.structure.impl.*
|
||||||
@@ -73,7 +74,7 @@ fun PsiMember.getJavaMemberDescriptor(): DeclarationDescriptor? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? {
|
public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? {
|
||||||
return getContainingScope(method)?.getFunctions(method.getName())?.findByJavaElement(method)
|
return getContainingScope(method)?.getFunctions(method.name, LookupLocation.NO_LOCATION_FROM_IDE)?.findByJavaElement(method)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? {
|
public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructor): ConstructorDescriptor? {
|
||||||
@@ -81,7 +82,7 @@ public fun JavaDescriptorResolver.resolveConstructor(constructor: JavaConstructo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? {
|
public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescriptor? {
|
||||||
return getContainingScope(field)?.getProperties(field.getName())?.findByJavaElement(field) as? PropertyDescriptor
|
return getContainingScope(field)?.getProperties(field.name, LookupLocation.NO_LOCATION_FROM_IDE)?.findByJavaElement(field) as? PropertyDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetScope? {
|
private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetScope? {
|
||||||
|
|||||||
@@ -16,11 +16,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.util
|
package org.jetbrains.kotlin.idea.util
|
||||||
|
|
||||||
import com.intellij.openapi.util.Key
|
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.PsiDocumentManager
|
import com.intellij.psi.PsiDocumentManager
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiRecursiveElementVisitor
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.analyzer.analyzeInContext
|
import org.jetbrains.kotlin.analyzer.analyzeInContext
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
@@ -32,10 +30,10 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
|||||||
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
||||||
import org.jetbrains.kotlin.idea.imports.getImportableTargets
|
import org.jetbrains.kotlin.idea.imports.getImportableTargets
|
||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences.Options
|
import org.jetbrains.kotlin.idea.util.ShortenReferences.Options
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -275,7 +273,7 @@ public class ShortenReferences(val options: (JetElement) -> Options = { Options.
|
|||||||
val typeReference = type.getStrictParentOfType<JetTypeReference>()!!
|
val typeReference = type.getStrictParentOfType<JetTypeReference>()!!
|
||||||
val scope = bindingContext[BindingContext.TYPE_RESOLUTION_SCOPE, typeReference]!!
|
val scope = bindingContext[BindingContext.TYPE_RESOLUTION_SCOPE, typeReference]!!
|
||||||
val name = target.getName()
|
val name = target.getName()
|
||||||
val targetByName = if (target is ClassifierDescriptor) scope.getClassifier(name) else scope.getPackage(name)
|
val targetByName = if (target is ClassifierDescriptor) scope.getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE) else scope.getPackage(name)
|
||||||
val canShortenNow = targetByName?.asString() == target.asString()
|
val canShortenNow = targetByName?.asString() == target.asString()
|
||||||
|
|
||||||
processQualifiedElement(type, target, canShortenNow)
|
processQualifiedElement(type, target, canShortenNow)
|
||||||
|
|||||||
+2
-1
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider
|
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider
|
||||||
import org.jetbrains.kotlin.idea.completion.*
|
import org.jetbrains.kotlin.idea.completion.*
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.psi.JetExpression
|
import org.jetbrains.kotlin.psi.JetExpression
|
||||||
import org.jetbrains.kotlin.renderer.render
|
import org.jetbrains.kotlin.renderer.render
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -89,7 +90,7 @@ class MultipleArgumentsItemProvider(val bindingContext: BindingContext,
|
|||||||
private fun variableInScope(parameter: ValueParameterDescriptor, scope: JetScope): VariableDescriptor? {
|
private fun variableInScope(parameter: ValueParameterDescriptor, scope: JetScope): VariableDescriptor? {
|
||||||
val name = parameter.getName()
|
val name = parameter.getName()
|
||||||
//TODO: there can be more than one property with such name in scope and we should be able to select one (but we need API for this)
|
//TODO: there can be more than one property with such name in scope and we should be able to select one (but we need API for this)
|
||||||
val variable = scope.getLocalVariable(name) ?: scope.getProperties(name).singleOrNull() ?: return null
|
val variable = scope.getLocalVariable(name) ?: scope.getProperties(name, LookupLocation.NO_LOCATION_FROM_IDE).singleOrNull() ?: return null
|
||||||
return if (smartCastCalculator.types(variable).any { JetTypeChecker.DEFAULT.isSubtypeOf(it, parameter.getType()) })
|
return if (smartCastCalculator.types(variable).any { JetTypeChecker.DEFAULT.isSubtypeOf(it, parameter.getType()) })
|
||||||
variable
|
variable
|
||||||
else
|
else
|
||||||
|
|||||||
+2
-1
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.completion.handlers.KotlinFunctionInsertHandler
|
|||||||
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler
|
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler
|
||||||
import org.jetbrains.kotlin.idea.core.psiClassToDescriptor
|
import org.jetbrains.kotlin.idea.core.psiClassToDescriptor
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.psi.JetClassOrObject
|
import org.jetbrains.kotlin.psi.JetClassOrObject
|
||||||
@@ -253,7 +254,7 @@ class TypeInstantiationItems(
|
|||||||
is ClassDescriptor -> container.getStaticScope()
|
is ClassDescriptor -> container.getStaticScope()
|
||||||
else -> return
|
else -> return
|
||||||
}
|
}
|
||||||
val samConstructor = scope.getFunctions(`class`.getName())
|
val samConstructor = scope.getFunctions(`class`.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
.filterIsInstance<SamConstructorDescriptor>()
|
.filterIsInstance<SamConstructorDescriptor>()
|
||||||
.singleOrNull() ?: return
|
.singleOrNull() ?: return
|
||||||
val lookupElement = lookupElementFactory.createLookupElement(samConstructor, bindingContext, false)
|
val lookupElement = lookupElementFactory.createLookupElement(samConstructor, bindingContext, false)
|
||||||
|
|||||||
+15
-14
@@ -16,21 +16,21 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.completion.smart
|
package org.jetbrains.kotlin.idea.completion.smart
|
||||||
|
|
||||||
import org.jetbrains.kotlin.types.JetType
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
|
||||||
import java.util.HashMap
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.nullability
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
|
|
||||||
import org.jetbrains.kotlin.idea.util.FuzzyType
|
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.completion.HeuristicSignatures
|
import org.jetbrains.kotlin.idea.completion.HeuristicSignatures
|
||||||
|
import org.jetbrains.kotlin.idea.util.FuzzyType
|
||||||
import org.jetbrains.kotlin.idea.util.nullability
|
import org.jetbrains.kotlin.idea.util.nullability
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
|
import org.jetbrains.kotlin.types.JetType
|
||||||
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
|
||||||
|
import java.util.HashMap
|
||||||
|
|
||||||
class TypesWithContainsDetector(
|
class TypesWithContainsDetector(
|
||||||
private val scope: JetScope,
|
private val scope: JetScope,
|
||||||
@@ -43,7 +43,7 @@ class TypesWithContainsDetector(
|
|||||||
private val containsName = Name.identifier("contains")
|
private val containsName = Name.identifier("contains")
|
||||||
private val booleanType = KotlinBuiltIns.getInstance().getBooleanType()
|
private val booleanType = KotlinBuiltIns.getInstance().getBooleanType()
|
||||||
|
|
||||||
private val typesWithExtensionContains: Collection<JetType> = scope.getFunctions(containsName)
|
private val typesWithExtensionContains: Collection<JetType> = scope.getFunctions(containsName, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
.filter { it.getExtensionReceiverParameter() != null && isGoodContainsFunction(it, listOf()) }
|
.filter { it.getExtensionReceiverParameter() != null && isGoodContainsFunction(it, listOf()) }
|
||||||
.map { it.getExtensionReceiverParameter()!!.getType() }
|
.map { it.getExtensionReceiverParameter()!!.getType() }
|
||||||
|
|
||||||
@@ -52,7 +52,8 @@ class TypesWithContainsDetector(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun hasContainsNoCache(type: FuzzyType): Boolean {
|
private fun hasContainsNoCache(type: FuzzyType): Boolean {
|
||||||
return type.nullability() != TypeNullability.NULLABLE && type.type.getMemberScope().getFunctions(containsName).any { isGoodContainsFunction(it, type.freeParameters) }
|
return type.nullability() != TypeNullability.NULLABLE &&
|
||||||
|
type.type.memberScope.getFunctions(containsName, LookupLocation.NO_LOCATION_FROM_IDE).any { isGoodContainsFunction(it, type.freeParameters) }
|
||||||
|| typesWithExtensionContains.any { type.checkIsSubtypeOf(it) != null }
|
|| typesWithExtensionContains.any { type.checkIsSubtypeOf(it) != null }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.frontend.di.createContainerForMacros
|
import org.jetbrains.kotlin.frontend.di.createContainerForMacros
|
||||||
import org.jetbrains.kotlin.idea.util.FuzzyType
|
import org.jetbrains.kotlin.idea.util.FuzzyType
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetPsiFactory
|
import org.jetbrains.kotlin.psi.JetPsiFactory
|
||||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||||
@@ -41,7 +42,7 @@ public class IterableTypesDetector(
|
|||||||
private val cache = HashMap<FuzzyType, FuzzyType?>()
|
private val cache = HashMap<FuzzyType, FuzzyType?>()
|
||||||
private val iteratorName = Name.identifier("iterator")
|
private val iteratorName = Name.identifier("iterator")
|
||||||
|
|
||||||
private val typesWithExtensionIterator: Collection<JetType> = scope.getFunctions(iteratorName)
|
private val typesWithExtensionIterator: Collection<JetType> = scope.getFunctions(iteratorName, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
.map { it.getExtensionReceiverParameter() }
|
.map { it.getExtensionReceiverParameter() }
|
||||||
.filterNotNull()
|
.filterNotNull()
|
||||||
.map { it.getType() }
|
.map { it.getType() }
|
||||||
@@ -74,6 +75,7 @@ public class IterableTypesDetector(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun canBeIterable(type: FuzzyType): Boolean {
|
private fun canBeIterable(type: FuzzyType): Boolean {
|
||||||
return type.type.getMemberScope().getFunctions(iteratorName).isNotEmpty() || typesWithExtensionIterator.any { type.checkIsSubtypeOf(it) != null }
|
return type.type.memberScope.getFunctions(iteratorName, LookupLocation.NO_LOCATION_FROM_IDE).isNotEmpty() ||
|
||||||
|
typesWithExtensionIterator.any { type.checkIsSubtypeOf(it) != null }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
@@ -96,8 +96,12 @@ public class NewDeclarationNameValidator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return when(target) {
|
return when(target) {
|
||||||
Target.VARIABLES -> getProperties(name).any { !it.isExtension && it.isVisible() } || getLocalVariable(name) != null
|
Target.VARIABLES ->
|
||||||
Target.FUNCTIONS_AND_CLASSES -> getFunctions(name).any { !it.isExtension && it.isVisible() } || getClassifier(name)?.let { it.isVisible() } ?: false
|
getProperties(name, LookupLocation.NO_LOCATION_FROM_IDE).any { !it.isExtension && it.isVisible() } ||
|
||||||
|
getLocalVariable(name) != null
|
||||||
|
Target.FUNCTIONS_AND_CLASSES ->
|
||||||
|
getFunctions(name, LookupLocation.NO_LOCATION_FROM_IDE).any { !it.isExtension && it.isVisible() } ||
|
||||||
|
getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE)?.let { it.isVisible() } ?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,9 +42,13 @@ import org.jetbrains.kotlin.idea.conversion.copy.range
|
|||||||
import org.jetbrains.kotlin.idea.conversion.copy.start
|
import org.jetbrains.kotlin.idea.conversion.copy.start
|
||||||
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
||||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||||
import org.jetbrains.kotlin.idea.references.*
|
import org.jetbrains.kotlin.idea.references.JetMultiReference
|
||||||
|
import org.jetbrains.kotlin.idea.references.JetReference
|
||||||
|
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
||||||
|
import org.jetbrains.kotlin.idea.references.mainReference
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.elementsInRange
|
import org.jetbrains.kotlin.psi.psiUtil.elementsInRange
|
||||||
@@ -234,10 +238,12 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Kotlin
|
|||||||
val originalFqName = FqName(refData.fqName)
|
val originalFqName = FqName(refData.fqName)
|
||||||
|
|
||||||
if (refData.kind == KotlinReferenceData.Kind.EXTENSION_FUNCTION) {
|
if (refData.kind == KotlinReferenceData.Kind.EXTENSION_FUNCTION) {
|
||||||
if (fileResolutionScope.getFunctions(originalFqName.shortName()).any { it.importableFqName == originalFqName }) return null // already imported
|
val functions = fileResolutionScope.getFunctions(originalFqName.shortName(), LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
if (functions.any { it.importableFqName == originalFqName }) return null // already imported
|
||||||
}
|
}
|
||||||
else if (refData.kind == KotlinReferenceData.Kind.EXTENSION_PROPERTY) {
|
else if (refData.kind == KotlinReferenceData.Kind.EXTENSION_PROPERTY) {
|
||||||
if (fileResolutionScope.getProperties(originalFqName.shortName()).any { it.importableFqName == originalFqName }) return null // already imported
|
val properties = fileResolutionScope.getProperties(originalFqName.shortName(), LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
if (properties.any { it.importableFqName == originalFqName }) return null // already imported
|
||||||
}
|
}
|
||||||
|
|
||||||
val referencedDescriptors = try {
|
val referencedDescriptors = try {
|
||||||
|
|||||||
+19
-21
@@ -16,30 +16,28 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.debugger
|
package org.jetbrains.kotlin.idea.debugger
|
||||||
|
|
||||||
import com.intellij.psi.search.FilenameIndex
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
|
||||||
import org.jetbrains.kotlin.psi.JetElement
|
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import com.intellij.openapi.roots.libraries.LibraryUtil
|
|
||||||
import com.intellij.openapi.module.impl.scopes.LibraryScope
|
|
||||||
import com.intellij.openapi.roots.LibraryOrderEntry
|
|
||||||
import org.jetbrains.kotlin.psi.JetDeclaration
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
|
||||||
import com.intellij.openapi.module.impl.scopes.JdkScope
|
import com.intellij.openapi.module.impl.scopes.JdkScope
|
||||||
|
import com.intellij.openapi.module.impl.scopes.LibraryScope
|
||||||
import com.intellij.openapi.roots.JdkOrderEntry
|
import com.intellij.openapi.roots.JdkOrderEntry
|
||||||
import org.jetbrains.kotlin.psi.JetPsiUtil
|
import com.intellij.openapi.roots.LibraryOrderEntry
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import com.intellij.openapi.roots.libraries.LibraryUtil
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import com.intellij.psi.search.FilenameIndex
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
import com.intellij.util.indexing.FileBasedIndex
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||||
|
import org.jetbrains.kotlin.psi.JetDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.JetElement
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||||
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
|
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
||||||
|
|
||||||
private val LOG = Logger.getInstance("org.jetbrains.kotlin.idea.debugger")
|
private val LOG = Logger.getInstance("org.jetbrains.kotlin.idea.debugger")
|
||||||
|
|
||||||
@@ -64,8 +62,8 @@ fun findPackagePartInternalNameForLibraryFile(topLevelDeclaration: JetDeclaratio
|
|||||||
val descFromSourceText = render(descriptor)
|
val descFromSourceText = render(descriptor)
|
||||||
|
|
||||||
val descriptors: Collection<CallableDescriptor> = when (descriptor) {
|
val descriptors: Collection<CallableDescriptor> = when (descriptor) {
|
||||||
is FunctionDescriptor -> packageDescriptor.memberScope.getFunctions(descriptor.getName())
|
is FunctionDescriptor -> packageDescriptor.memberScope.getFunctions(descriptor.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
is PropertyDescriptor -> packageDescriptor.memberScope.getProperties(descriptor.getName())
|
is PropertyDescriptor -> packageDescriptor.memberScope.getProperties(descriptor.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
else -> {
|
else -> {
|
||||||
reportError(topLevelDeclaration, descriptor)
|
reportError(topLevelDeclaration, descriptor)
|
||||||
listOf()
|
listOf()
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.core.formatter.JetCodeStyleSettings
|
|||||||
import org.jetbrains.kotlin.idea.references.JetReference
|
import org.jetbrains.kotlin.idea.references.JetReference
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -198,7 +199,7 @@ public class KotlinImportOptimizer() : ImportOptimizer {
|
|||||||
val scope = fileWithImports.getResolutionFacade().getFileTopLevelScope(fileWithImports)
|
val scope = fileWithImports.getResolutionFacade().getFileTopLevelScope(fileWithImports)
|
||||||
|
|
||||||
for (fqName in classNamesToCheck) {
|
for (fqName in classNamesToCheck) {
|
||||||
if (scope.getClassifier(fqName.shortName())?.importableFqNameSafe != fqName) {
|
if (scope.getClassifier(fqName.shortName(), LookupLocation.NO_LOCATION_FROM_IDE)?.importableFqNameSafe != fqName) {
|
||||||
// add explicit import if failed to import with * (or from current package)
|
// add explicit import if failed to import with * (or from current package)
|
||||||
importsToGenerate.add(ImportPath(fqName, false))
|
importsToGenerate.add(ImportPath(fqName, false))
|
||||||
|
|
||||||
|
|||||||
@@ -42,14 +42,15 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.search
|
|||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|
||||||
public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetNamedFunction>(javaClass(), "Convert function to property"), LowPriorityAction {
|
public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetNamedFunction>(javaClass(), "Convert function to property"), LowPriorityAction {
|
||||||
@@ -114,7 +115,7 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetN
|
|||||||
}
|
}
|
||||||
|
|
||||||
callableDescriptor.getContainingScope(bindingContext)
|
callableDescriptor.getContainingScope(bindingContext)
|
||||||
?.getProperties(callableDescriptor.getName())
|
?.getProperties(callableDescriptor.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
?.firstOrNull()
|
?.firstOrNull()
|
||||||
?.let { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) }
|
?.let { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) }
|
||||||
?.let { reportDeclarationConflict(conflicts, it) { "$it already exists" } }
|
?.let { reportDeclarationConflict(conflicts, it) { "$it already exists" } }
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.DefaultSearchHelper
|
|||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchTarget
|
import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchTarget
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.search
|
import org.jetbrains.kotlin.idea.search.usagesSearch.search
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
@@ -96,7 +97,7 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetP
|
|||||||
|
|
||||||
if (callable is JetProperty) {
|
if (callable is JetProperty) {
|
||||||
callableDescriptor.getContainingScope(bindingContext)
|
callableDescriptor.getContainingScope(bindingContext)
|
||||||
?.getFunctions(callableDescriptor.getName())
|
?.getFunctions(callableDescriptor.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
?.firstOrNull { it.getValueParameters().isEmpty() }
|
?.firstOrNull { it.getValueParameters().isEmpty() }
|
||||||
?.let { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) }
|
?.let { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) }
|
||||||
?.let { reportDeclarationConflict(conflicts, it) { "$it already exists" } }
|
?.let { reportDeclarationConflict(conflicts, it) { "$it already exists" } }
|
||||||
|
|||||||
@@ -268,7 +268,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunc
|
|||||||
Name name = functionDescriptor.getName();
|
Name name = functionDescriptor.getName();
|
||||||
for (JetType type : TypeUtils.getAllSupertypes(classDescriptor.getDefaultType())) {
|
for (JetType type : TypeUtils.getAllSupertypes(classDescriptor.getDefaultType())) {
|
||||||
JetScope scope = type.getMemberScope();
|
JetScope scope = type.getMemberScope();
|
||||||
for (FunctionDescriptor function : scope.getFunctions(name, LookupLocation.NO_LOCATION)) {
|
for (FunctionDescriptor function : scope.getFunctions(name, LookupLocation.NO_LOCATION_FROM_IDE)) {
|
||||||
if (!function.getKind().isReal()) continue;
|
if (!function.getKind().isReal()) continue;
|
||||||
if (function.getModality().isOverridable())
|
if (function.getModality().isOverridable())
|
||||||
superFunctions.add(function);
|
superFunctions.add(function);
|
||||||
|
|||||||
+3
-2
@@ -54,6 +54,7 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
|||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -399,7 +400,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
SourceElement.NO_SOURCE
|
SourceElement.NO_SOURCE
|
||||||
)
|
)
|
||||||
|
|
||||||
val validator = CollectingNameValidator { scope.getClassifier(Name.identifier(it)) == null }
|
val validator = CollectingNameValidator { scope.getClassifier(Name.identifier(it), LookupLocation.NO_LOCATION_FROM_IDE) == null }
|
||||||
val parameterNames = KotlinNameSuggester.suggestNamesForTypeParameters(typeParameterCount, validator)
|
val parameterNames = KotlinNameSuggester.suggestNamesForTypeParameters(typeParameterCount, validator)
|
||||||
val typeParameters = (0..typeParameterCount - 1).map {
|
val typeParameters = (0..typeParameterCount - 1).map {
|
||||||
TypeParameterDescriptorImpl.createWithDefaultBound(
|
TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||||
@@ -619,7 +620,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val validator = CollectingNameValidator { scope.getClassifier(Name.identifier(it)) == null }
|
val validator = CollectingNameValidator { scope.getClassifier(Name.identifier(it), LookupLocation.NO_LOCATION_FROM_IDE) == null }
|
||||||
val typeParameterNames = allTypeParametersNotInScope.map { KotlinNameSuggester.suggestNameByName(it.getName().asString(), validator) }
|
val typeParameterNames = allTypeParametersNotInScope.map { KotlinNameSuggester.suggestNameByName(it.getName().asString(), validator) }
|
||||||
|
|
||||||
return allTypeParametersNotInScope.zip(typeParameterNames).toMap()
|
return allTypeParametersNotInScope.zip(typeParameterNames).toMap()
|
||||||
|
|||||||
+2
-1
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -65,7 +66,7 @@ private fun JetType.renderLong(typeParameterNameMap: Map<TypeParameterDescriptor
|
|||||||
|
|
||||||
private fun getTypeParameterNamesNotInScope(typeParameters: Collection<TypeParameterDescriptor>, scope: JetScope): List<TypeParameterDescriptor> {
|
private fun getTypeParameterNamesNotInScope(typeParameters: Collection<TypeParameterDescriptor>, scope: JetScope): List<TypeParameterDescriptor> {
|
||||||
return typeParameters.filter { typeParameter ->
|
return typeParameters.filter { typeParameter ->
|
||||||
val classifier = scope.getClassifier(typeParameter.getName())
|
val classifier = scope.getClassifier(typeParameter.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
classifier == null || classifier != typeParameter
|
classifier == null || classifier != typeParameter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.getTyp
|
|||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessTypes
|
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessTypes
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement
|
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement
|
||||||
@@ -136,5 +137,5 @@ fun JetType.hasTypeParametersToAdd(functionDescriptor: FunctionDescriptor, conte
|
|||||||
else -> null
|
else -> null
|
||||||
} ?: return true
|
} ?: return true
|
||||||
|
|
||||||
return typeParametersToAdd.any { scope.getClassifier(it.name) != it }
|
return typeParametersToAdd.any { scope.getClassifier(it.name, LookupLocation.NO_LOCATION_FROM_IDE) != it }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
|||||||
import org.jetbrains.kotlin.idea.core.CollectingNameValidator
|
import org.jetbrains.kotlin.idea.core.CollectingNameValidator
|
||||||
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
|
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JetCallableDefinitionUsage
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.JetCallableDefinitionUsage
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetCallableDeclaration
|
import org.jetbrains.kotlin.psi.JetCallableDeclaration
|
||||||
import org.jetbrains.kotlin.psi.JetClass
|
import org.jetbrains.kotlin.psi.JetClass
|
||||||
@@ -80,7 +81,7 @@ public class JetChangeSignatureData(
|
|||||||
val validator = bodyScope?.let { bodyScope ->
|
val validator = bodyScope?.let { bodyScope ->
|
||||||
CollectingNameValidator(paramNames) {
|
CollectingNameValidator(paramNames) {
|
||||||
val name = Name.identifier(it)
|
val name = Name.identifier(it)
|
||||||
bodyScope.getLocalVariable(name) == null && bodyScope.getProperties(name).isEmpty()
|
bodyScope.getLocalVariable(name) == null && bodyScope.getProperties(name, LookupLocation.NO_LOCATION_FROM_IDE).isEmpty()
|
||||||
}
|
}
|
||||||
} ?: CollectingNameValidator(paramNames)
|
} ?: CollectingNameValidator(paramNames)
|
||||||
val receiverType = baseDescriptor.getExtensionReceiverParameter()?.getType() ?: return null
|
val receiverType = baseDescriptor.getExtensionReceiverParameter()?.getType() ?: return null
|
||||||
|
|||||||
+3
-3
@@ -623,8 +623,8 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
if (!kind.getIsConstructor() && callableScope != null && !info.getNewName().isEmpty()) {
|
if (!kind.getIsConstructor() && callableScope != null && !info.getNewName().isEmpty()) {
|
||||||
Name newName = Name.identifier(info.getNewName());
|
Name newName = Name.identifier(info.getNewName());
|
||||||
Collection<? extends CallableDescriptor> conflicts = oldDescriptor instanceof FunctionDescriptor
|
Collection<? extends CallableDescriptor> conflicts = oldDescriptor instanceof FunctionDescriptor
|
||||||
? callableScope.getFunctions(newName, LookupLocation.NO_LOCATION)
|
? callableScope.getFunctions(newName, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
: callableScope.getProperties(newName, LookupLocation.NO_LOCATION);
|
: callableScope.getProperties(newName, LookupLocation.NO_LOCATION_FROM_IDE);
|
||||||
for (CallableDescriptor conflict : conflicts) {
|
for (CallableDescriptor conflict : conflicts) {
|
||||||
if (conflict == oldDescriptor) continue;
|
if (conflict == oldDescriptor) continue;
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
}
|
}
|
||||||
if (parametersScope != null) {
|
if (parametersScope != null) {
|
||||||
if (kind == JetMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR && valOrVar != JetValVar.None) {
|
if (kind == JetMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR && valOrVar != JetValVar.None) {
|
||||||
for (VariableDescriptor property : parametersScope.getProperties(Name.identifier(parameterName), LookupLocation.NO_LOCATION)) {
|
for (VariableDescriptor property : parametersScope.getProperties(Name.identifier(parameterName), LookupLocation.NO_LOCATION_FROM_IDE)) {
|
||||||
PsiElement propertyDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(property);
|
PsiElement propertyDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(property);
|
||||||
|
|
||||||
if (propertyDeclaration != null && !(propertyDeclaration.getParent() instanceof JetParameterList)) {
|
if (propertyDeclaration != null && !(propertyDeclaration.getParent() instanceof JetParameterList)) {
|
||||||
|
|||||||
+3
-2
@@ -60,6 +60,7 @@ import org.jetbrains.kotlin.idea.references.mainReference
|
|||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.approximateWithResolvableType
|
import org.jetbrains.kotlin.idea.util.approximateWithResolvableType
|
||||||
import org.jetbrains.kotlin.idea.util.isResolvableInScope
|
import org.jetbrains.kotlin.idea.util.isResolvableInScope
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
@@ -649,7 +650,7 @@ private fun ExtractionData.inferParametersInfo(
|
|||||||
options.captureLocalFunctions
|
options.captureLocalFunctions
|
||||||
&& originalRef.getReferencedName() == originalDescriptor.getName().asString() // to forbid calls by convention
|
&& originalRef.getReferencedName() == originalDescriptor.getName().asString() // to forbid calls by convention
|
||||||
&& originalDeclaration is JetNamedFunction && originalDeclaration.isLocal()
|
&& originalDeclaration is JetNamedFunction && originalDeclaration.isLocal()
|
||||||
&& (targetScope == null || originalDescriptor !in targetScope.getFunctions(originalDescriptor.getName()))
|
&& (targetScope == null || originalDescriptor !in targetScope.getFunctions(originalDescriptor.name, LookupLocation.NO_LOCATION_FROM_IDE))
|
||||||
|
|
||||||
val descriptorToExtract = (if (extractThis) thisDescriptor else null) ?: originalDescriptor
|
val descriptorToExtract = (if (extractThis) thisDescriptor else null) ?: originalDescriptor
|
||||||
|
|
||||||
@@ -1024,4 +1025,4 @@ fun ExtractableCodeDescriptor.validate(): ExtractableCodeDescriptorWithConflicts
|
|||||||
return ExtractableCodeDescriptorWithConflicts(this, conflicts)
|
return ExtractableCodeDescriptorWithConflicts(this, conflicts)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val LOG = Logger.getInstance(javaClass<ExtractionEngine>())
|
private val LOG = Logger.getInstance(javaClass<ExtractionEngine>())
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.util
|
package org.jetbrains.kotlin.util
|
||||||
|
|
||||||
import com.intellij.codeInsight.CodeInsightSettings
|
|
||||||
import com.intellij.codeInsight.actions.OptimizeImportsProcessor
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.impl.PsiModificationTrackerImpl
|
import com.intellij.psi.impl.PsiModificationTrackerImpl
|
||||||
@@ -33,6 +31,7 @@ import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.fqName.isImported
|
import org.jetbrains.kotlin.idea.refactoring.fqName.isImported
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper.ImportDescriptorResult
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper.ImportDescriptorResult
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -121,11 +120,24 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
|
|
||||||
// check if import is not needed
|
// check if import is not needed
|
||||||
when (target) {
|
when (target) {
|
||||||
is ClassDescriptor -> { if (topLevelScope.getClassifier(name)?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED }
|
is ClassDescriptor -> {
|
||||||
is PackageViewDescriptor -> { if (topLevelScope.getPackage(name)?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED }
|
val classifier = topLevelScope.getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
is FunctionDescriptor -> { if (topLevelScope.getFunctions(name).map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED }
|
if (classifier?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED
|
||||||
is PropertyDescriptor -> { if (topLevelScope.getProperties(name).map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED }
|
}
|
||||||
else -> return ImportDescriptorResult.FAIL
|
is PackageViewDescriptor -> {
|
||||||
|
if (topLevelScope.getPackage(name)?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED
|
||||||
|
}
|
||||||
|
is FunctionDescriptor -> {
|
||||||
|
val functions = topLevelScope.getFunctions(name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
if (functions.map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED
|
||||||
|
}
|
||||||
|
is PropertyDescriptor -> {
|
||||||
|
val properties = topLevelScope.getProperties(name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
if (properties.map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
return ImportDescriptorResult.FAIL
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mayImportByCodeStyle(descriptor)) {
|
if (!mayImportByCodeStyle(descriptor)) {
|
||||||
@@ -139,7 +151,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
|
|
||||||
// check there is an explicit import of a class/package with the same name already
|
// check there is an explicit import of a class/package with the same name already
|
||||||
val conflict = when (target) {
|
val conflict = when (target) {
|
||||||
is ClassDescriptor -> topLevelScope.getClassifier(name)
|
is ClassDescriptor -> topLevelScope.getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
is PackageViewDescriptor -> topLevelScope.getPackage(name)
|
is PackageViewDescriptor -> topLevelScope.getPackage(name)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
@@ -156,7 +168,9 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
|
|
||||||
val tryStarImport = shouldTryStarImport(packageFqName, imports)
|
val tryStarImport = shouldTryStarImport(packageFqName, imports)
|
||||||
&& when (target) {
|
&& when (target) {
|
||||||
is ClassDescriptor -> topLevelScope.getClassifier(name) == null // this check does not give a guarantee that import with * will import the class - for example, there can be classes with conflicting name in more than one import with *
|
// this check does not give a guarantee that import with * will import the class - for example,
|
||||||
|
// there can be classes with conflicting name in more than one import with *
|
||||||
|
is ClassDescriptor -> topLevelScope.getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE) == null
|
||||||
is PackageViewDescriptor -> false
|
is PackageViewDescriptor -> false
|
||||||
is FunctionDescriptor, is PropertyDescriptor -> true
|
is FunctionDescriptor, is PropertyDescriptor -> true
|
||||||
else -> throw Exception()
|
else -> throw Exception()
|
||||||
@@ -222,12 +236,14 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
val topLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
val topLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
||||||
val conflictCandidates: List<ClassifierDescriptor> = classNamesToImport
|
val conflictCandidates: List<ClassifierDescriptor> = classNamesToImport
|
||||||
.flatMap {
|
.flatMap {
|
||||||
importedScopes.map { scope -> scope.getClassifier(it) }.filterNotNull()
|
importedScopes.map { scope -> scope.getClassifier(it, LookupLocation.NO_LOCATION_FROM_IDE) }.filterNotNull()
|
||||||
}
|
}
|
||||||
.filter { importedClass ->
|
.filter { importedClass ->
|
||||||
isVisible(importedClass)
|
isVisible(importedClass)
|
||||||
&& topLevelScope.getClassifier(importedClass.getName()) == importedClass /* check that class is really imported */
|
// check that class is really imported
|
||||||
&& imports.all { it.getImportPath() != ImportPath(importedClass.importableFqNameSafe, false) } /* and not yet imported explicitly */
|
&& topLevelScope.getClassifier(importedClass.name, LookupLocation.NO_LOCATION_FROM_IDE) == importedClass
|
||||||
|
// and not yet imported explicitly
|
||||||
|
&& imports.all { it.importPath != ImportPath(importedClass.importableFqNameSafe, false) }
|
||||||
}
|
}
|
||||||
val conflicts = detectNeededImports(conflictCandidates)
|
val conflicts = detectNeededImports(conflictCandidates)
|
||||||
|
|
||||||
@@ -235,7 +251,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
|
|
||||||
if (target is ClassDescriptor) {
|
if (target is ClassDescriptor) {
|
||||||
val newTopLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
val newTopLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
||||||
val resolvedTo = newTopLevelScope.getClassifier(target.getName())
|
val resolvedTo = newTopLevelScope.getClassifier(target.name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
if (resolvedTo?.importableFqNameSafe != targetFqName) {
|
if (resolvedTo?.importableFqNameSafe != targetFqName) {
|
||||||
addedImport.delete()
|
addedImport.delete()
|
||||||
return ImportDescriptorResult.FAIL
|
return ImportDescriptorResult.FAIL
|
||||||
@@ -258,7 +274,8 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
}
|
}
|
||||||
|
|
||||||
val parentScope = getMemberScope(fqName.parent(), moduleDescriptor) ?: return null
|
val parentScope = getMemberScope(fqName.parent(), moduleDescriptor) ?: return null
|
||||||
val classDescriptor = parentScope.getClassifier(fqName.shortName()) as? ClassDescriptor ?: return null
|
val classifier = parentScope.getClassifier(fqName.shortName(), LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
val classDescriptor = classifier as? ClassDescriptor ?: return null
|
||||||
return classDescriptor.getDefaultType().getMemberScope()
|
return classDescriptor.getDefaultType().getMemberScope()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,7 +286,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
|
|
||||||
// check if there is a conflicting class imported with * import
|
// check if there is a conflicting class imported with * import
|
||||||
// (not with explicit import - explicit imports are checked before this method invocation)
|
// (not with explicit import - explicit imports are checked before this method invocation)
|
||||||
val classifier = topLevelScope.getClassifier(name)
|
val classifier = topLevelScope.getClassifier(name, LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
if (classifier != null && detectNeededImports(listOf(classifier)).isNotEmpty()) {
|
if (classifier != null && detectNeededImports(listOf(classifier)).isNotEmpty()) {
|
||||||
return ImportDescriptorResult.FAIL
|
return ImportDescriptorResult.FAIL
|
||||||
}
|
}
|
||||||
@@ -298,7 +315,8 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
|
|||||||
if (importsToCheck.isNotEmpty()) {
|
if (importsToCheck.isNotEmpty()) {
|
||||||
val topLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
val topLevelScope = resolutionFacade.getFileTopLevelScope(file)
|
||||||
for (classFqName in importsToCheck) {
|
for (classFqName in importsToCheck) {
|
||||||
if (topLevelScope.getClassifier(classFqName.shortName())?.importableFqNameSafe != classFqName) {
|
val classifier = topLevelScope.getClassifier(classFqName.shortName(), LookupLocation.NO_LOCATION_FROM_IDE)
|
||||||
|
if (classifier?.importableFqNameSafe != classFqName) {
|
||||||
addImport(classFqName, false) // restore explicit import
|
addImport(classFqName, false) // restore explicit import
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ package org.jetbrains.kotlin.idea.kdoc
|
|||||||
|
|
||||||
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
|
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
@@ -42,7 +43,7 @@ public class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
myFixture.configureByFile(getTestName(false) + ".kt")
|
myFixture.configureByFile(getTestName(false) + ".kt")
|
||||||
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Bar" }
|
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Bar" }
|
||||||
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
||||||
val overriddenFunctionDescriptor = descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier("xyzzy")).single()
|
val overriddenFunctionDescriptor = descriptor.defaultType.memberScope.getFunctions(Name.identifier("xyzzy"), LookupLocation.NO_LOCATION_FROM_TEST).single()
|
||||||
val doc = KDocFinder.findKDoc(overriddenFunctionDescriptor)
|
val doc = KDocFinder.findKDoc(overriddenFunctionDescriptor)
|
||||||
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
|
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
|
||||||
}
|
}
|
||||||
@@ -51,7 +52,7 @@ public class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
myFixture.configureByFile(getTestName(false) + ".kt")
|
myFixture.configureByFile(getTestName(false) + ".kt")
|
||||||
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Bar" }
|
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Bar" }
|
||||||
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
||||||
val overriddenFunctionDescriptor = descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier("xyzzy")).single()
|
val overriddenFunctionDescriptor = descriptor.defaultType.memberScope.getFunctions(Name.identifier("xyzzy"), LookupLocation.NO_LOCATION_FROM_TEST).single()
|
||||||
val doc = KDocFinder.findKDoc(overriddenFunctionDescriptor)
|
val doc = KDocFinder.findKDoc(overriddenFunctionDescriptor)
|
||||||
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
|
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
|
||||||
}
|
}
|
||||||
@@ -60,7 +61,7 @@ public class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
myFixture.configureByFile(getTestName(false) + ".kt")
|
myFixture.configureByFile(getTestName(false) + ".kt")
|
||||||
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Foo" }
|
val declaration = (myFixture.getFile() as JetFile).getDeclarations().single { it.getName() == "Foo" }
|
||||||
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
|
||||||
val propertyDescriptor = descriptor.getDefaultType().getMemberScope().getProperties(Name.identifier("xyzzy")).single()
|
val propertyDescriptor = descriptor.defaultType.memberScope.getProperties(Name.identifier("xyzzy"), LookupLocation.NO_LOCATION_FROM_TEST).single()
|
||||||
val doc = KDocFinder.findKDoc(propertyDescriptor)
|
val doc = KDocFinder.findKDoc(propertyDescriptor)
|
||||||
Assert.assertEquals("Doc for property xyzzy", doc!!.getContent())
|
Assert.assertEquals("Doc for property xyzzy", doc!!.getContent())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.idea.search.allScope
|
|||||||
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
|
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.name.*
|
import org.jetbrains.kotlin.name.*
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
@@ -185,13 +186,13 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
private fun renameKotlinFunctionTest(renameParamsObject: JsonObject, context: TestContext) {
|
private fun renameKotlinFunctionTest(renameParamsObject: JsonObject, context: TestContext) {
|
||||||
val oldMethodName = Name.identifier(renameParamsObject.getString("oldName"))
|
val oldMethodName = Name.identifier(renameParamsObject.getString("oldName"))
|
||||||
|
|
||||||
doRenameInKotlinClassOrPackage(renameParamsObject, context) { it.getFunctions(oldMethodName).first() }
|
doRenameInKotlinClassOrPackage(renameParamsObject, context) { it.getFunctions(oldMethodName, LookupLocation.NO_LOCATION_FROM_TEST).first() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renameKotlinPropertyTest(renameParamsObject: JsonObject, context: TestContext) {
|
private fun renameKotlinPropertyTest(renameParamsObject: JsonObject, context: TestContext) {
|
||||||
val oldPropertyName = Name.identifier(renameParamsObject.getString("oldName"))
|
val oldPropertyName = Name.identifier(renameParamsObject.getString("oldName"))
|
||||||
|
|
||||||
doRenameInKotlinClassOrPackage(renameParamsObject, context) { it.getProperties(oldPropertyName).first() }
|
doRenameInKotlinClassOrPackage(renameParamsObject, context) { it.getProperties(oldPropertyName, LookupLocation.NO_LOCATION_FROM_TEST).first() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renameKotlinClassTest(renameParamsObject: JsonObject, context: TestContext) {
|
private fun renameKotlinClassTest(renameParamsObject: JsonObject, context: TestContext) {
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ public class ManglingUtils {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) {
|
public static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) {
|
||||||
Collection<FunctionDescriptor> functions =
|
Collection<FunctionDescriptor> functions =
|
||||||
descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier(functionName), LookupLocation.NO_LOCATION);
|
descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier(functionName), LookupLocation.NO_LOCATION_FROM_BACKEND);
|
||||||
assert functions.size() == 1 : "Can't select a single function: " + functionName + " in " + descriptor;
|
assert functions.size() == 1 : "Can't select a single function: " + functionName + " in " + descriptor;
|
||||||
return getSuggestedName((DeclarationDescriptor) functions.iterator().next());
|
return getSuggestedName((DeclarationDescriptor) functions.iterator().next());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user