Name class

In the most places in frontend identifier is stored in Name class, was in String.
Name has two advantages over String:
* validation: you cannot accidentally create identifier with dot, for example
* readability: if you see String, you don't now whether it is
  identifier, fq name, jvm class name or something else

Name's disadvantage is (small) performance overhead. We have no value types in JVM.
This commit is contained in:
Stepan Koltsov
2012-05-23 02:52:32 +04:00
parent c15ff2dee0
commit 33a59ff5fe
152 changed files with 962 additions and 726 deletions
@@ -57,7 +57,7 @@ public class InjectorForJavaSemanticServices {
this.bindingTrace = new org.jetbrains.jet.lang.resolve.BindingTraceContext();
this.javaBridgeConfiguration = new JavaBridgeConfiguration();
this.psiClassFinderForJvm = new PsiClassFinderForJvm();
this.moduleDescriptor = new org.jetbrains.jet.lang.descriptors.ModuleDescriptor("<dummy>");
this.moduleDescriptor = new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(org.jetbrains.jet.lang.resolve.name.Name.special("<dummy>"));
this.compilerDependencies = compilerDependencies;
this.compilerSpecialMode = compilerDependencies.getCompilerSpecialMode();
this.project = project;
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.ObservableBindingTrace;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import java.util.Collection;
@@ -83,7 +84,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@NotNull CompilerDependencies compilerDependencies) {
BindingTraceContext bindingTraceContext = new BindingTraceContext();
final ModuleDescriptor owner = new ModuleDescriptor("<module>");
final ModuleDescriptor owner = new ModuleDescriptor(Name.special("<module>"));
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false);
@@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.LabelName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
import java.util.Collection;
@@ -40,7 +41,7 @@ import java.util.Set;
* @author abreslav
*/
public class JavaClassMembersScope extends JavaClassOrPackageScope {
private final Map<String, ClassifierDescriptor> classifiers = Maps.newHashMap();
private final Map<Name, ClassifierDescriptor> classifiers = Maps.newHashMap();
public JavaClassMembersScope(
@NotNull JavaSemanticServices semanticServices,
@@ -62,7 +63,7 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
}
@Override
public ClassifierDescriptor getClassifier(@NotNull String name) {
public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassifierDescriptor classifierDescriptor = classifiers.get(name);
if (classifierDescriptor == null) {
classifierDescriptor = doGetClassifierDescriptor(name);
@@ -72,7 +73,7 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
}
@Override
public ClassDescriptor getObjectDescriptor(@NotNull String name) {
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
return null;
}
@@ -82,10 +83,10 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
return Collections.emptySet();
}
private ClassifierDescriptor doGetClassifierDescriptor(String name) {
private ClassifierDescriptor doGetClassifierDescriptor(Name name) {
// TODO : suboptimal, walk the list only once
for (PsiClass innerClass : resolverScopeData.psiClass.getAllInnerClasses()) {
if (name.equals(innerClass.getName())) {
if (name.getName().equals(innerClass.getName())) {
if (innerClass.hasModifierProperty(PsiModifier.STATIC) != resolverScopeData.staticMembers) return null;
ClassDescriptor classDescriptor = semanticServices.getDescriptorResolver()
.resolveClass(new FqName(innerClass.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
@@ -98,7 +99,7 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
}
@Override
public NamespaceDescriptor getNamespace(@NotNull String name) {
public NamespaceDescriptor getNamespace(@NotNull Name name) {
return null;
}
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
import java.util.Collection;
@@ -60,13 +61,13 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl {
@NotNull
@Override
public Set<VariableDescriptor> getProperties(@NotNull String name) {
public Set<VariableDescriptor> getProperties(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFieldGroupByName(name, resolverScopeData);
}
@NotNull
@Override
public Set<FunctionDescriptor> getFunctions(@NotNull String name) {
public Set<FunctionDescriptor> getFunctions(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveFunctionGroup(name, resolverScopeData);
}
@@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.constants.StringValue;
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
@@ -50,11 +51,11 @@ import java.util.*;
*/
public class JavaDescriptorResolver {
public static final String JAVA_ROOT = "<java_root>";
public static final Name JAVA_ROOT = Name.special("<java_root>");
public static final ModuleDescriptor FAKE_ROOT_MODULE = new ModuleDescriptor(JAVA_ROOT);
/*package*/ static final DeclarationDescriptor JAVA_METHOD_TYPE_PARAMETER_PARENT = new DeclarationDescriptorImpl(null, Collections.<AnnotationDescriptor>emptyList(), "<java_generic_method>") {
/*package*/ static final DeclarationDescriptor JAVA_METHOD_TYPE_PARAMETER_PARENT = new DeclarationDescriptorImpl(null, Collections.<AnnotationDescriptor>emptyList(), Name.special("<java_generic_method>")) {
@Override
public DeclarationDescriptor substitute(TypeSubstitutor substitutor) {
@@ -67,7 +68,7 @@ public class JavaDescriptorResolver {
}
};
/*package*/ static final DeclarationDescriptor JAVA_CLASS_OBJECT = new DeclarationDescriptorImpl(null, Collections.<AnnotationDescriptor>emptyList(), "<java_class_object_emulation>") {
/*package*/ static final DeclarationDescriptor JAVA_CLASS_OBJECT = new DeclarationDescriptorImpl(null, Collections.<AnnotationDescriptor>emptyList(), Name.special("<java_class_object_emulation>")) {
@NotNull
@Override
public DeclarationDescriptor substitute(TypeSubstitutor substitutor) {
@@ -158,7 +159,7 @@ public class JavaDescriptorResolver {
(new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS));
classOrNamespaceDescriptor = descriptor;
if (fqName.lastSegmentIs(JvmAbi.PACKAGE_CLASS) && psiClass != null && kotlin) {
if (fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && kotlin) {
throw new IllegalStateException("Kotlin namespace cannot have last segment " + JvmAbi.PACKAGE_CLASS + ": " + fqName);
}
}
@@ -189,7 +190,7 @@ public class JavaDescriptorResolver {
}
}
private Map<String, NamedMembers> namedMembersMap;
private Map<Name, NamedMembers> namedMembersMap;
@NotNull
public abstract List<TypeParameterDescriptor> getTypeParameters();
@@ -359,7 +360,7 @@ public class JavaDescriptorResolver {
checkPsiClassIsNotJet(psiClass);
String name = psiClass.getName();
Name name = Name.identifier(psiClass.getName());
ClassKind kind = psiClass.isInterface() ? (psiClass.isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT) : ClassKind.CLASS;
ClassOrNamespaceDescriptor containingDeclaration = resolveParentDescriptor(psiClass);
@@ -454,7 +455,7 @@ public class JavaDescriptorResolver {
constructorDescriptor,
i,
Collections.<AnnotationDescriptor>emptyList(),
method.getName(),
Name.identifier(method.getName()),
false,
semanticServices.getTypeTransformer().transformToType(returnType, resolverForTypeParameters),
annotationMethod.getDefaultValue() != null,
@@ -686,7 +687,7 @@ public class JavaDescriptorResolver {
Collections.<AnnotationDescriptor>emptyList(), // TODO: wrong
reified,
JetSignatureUtils.translateVariance(variance),
name,
Name.identifier(name),
formalTypeParameterIndex++);
previousTypeParameters.add(typeParameter);
@@ -761,7 +762,7 @@ public class JavaDescriptorResolver {
Collections.<AnnotationDescriptor>emptyList(), // TODO
false,
Variance.INVARIANT,
psiTypeParameter.getName(),
Name.identifier(psiTypeParameter.getName()),
psiTypeParameter.getIndex()
);
return new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter);
@@ -1012,7 +1013,7 @@ public class JavaDescriptorResolver {
@Nullable
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
return psiClassFinder.findPsiClass(packageFQN.child(JvmAbi.PACKAGE_CLASS), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
return psiClassFinder.findPsiClass(packageFQN.child(Name.identifier(JvmAbi.PACKAGE_CLASS)), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
}
private static class ValueParameterDescriptors {
@@ -1068,10 +1069,10 @@ public class JavaDescriptorResolver {
PsiType psiType = parameter.getPsiParameter().getType();
// TODO: must be very slow, make it lazy?
String name = parameter.getPsiParameter().getName() != null ? parameter.getPsiParameter().getName() : "p" + i;
Name name = Name.identifier(parameter.getPsiParameter().getName() != null ? parameter.getPsiParameter().getName() : "p" + i);
if (parameter.getJetValueParameter().name().length() > 0) {
name = parameter.getJetValueParameter().name();
name = Name.identifier(parameter.getJetValueParameter().name());
}
String typeFromAnnotation = parameter.getJetValueParameter().type();
@@ -1123,7 +1124,7 @@ public class JavaDescriptorResolver {
}
}
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull String fieldName, @NotNull ResolverScopeData scopeData) {
public Set<VariableDescriptor> resolveFieldGroupByName(@NotNull Name fieldName, @NotNull ResolverScopeData scopeData) {
if (scopeData.psiClass == null) {
return Collections.emptySet();
@@ -1148,10 +1149,10 @@ public class JavaDescriptorResolver {
getResolverScopeData(scopeData);
Set<VariableDescriptor> descriptors = Sets.newHashSet();
Map<String, NamedMembers> membersForProperties = scopeData.namedMembersMap;
for (Map.Entry<String, NamedMembers> entry : membersForProperties.entrySet()) {
Map<Name, NamedMembers> membersForProperties = scopeData.namedMembersMap;
for (Map.Entry<Name, NamedMembers> entry : membersForProperties.entrySet()) {
NamedMembers namedMembers = entry.getValue();
String propertyName = entry.getKey();
Name propertyName = entry.getKey();
resolveNamedGroupProperties(scopeData.classOrNamespaceDescriptor, scopeData, namedMembers, propertyName, "class or namespace " + scopeData.psiClass.getQualifiedName());
descriptors.addAll(namedMembers.propertyDescriptors);
@@ -1196,7 +1197,7 @@ public class JavaDescriptorResolver {
private void resolveNamedGroupProperties(
@NotNull ClassOrNamespaceDescriptor owner,
@NotNull ResolverScopeData scopeData,
@NotNull NamedMembers namedMembers, @NotNull String propertyName,
@NotNull NamedMembers namedMembers, @NotNull Name propertyName,
@NotNull String context) {
getResolverScopeData(scopeData);
@@ -1397,7 +1398,7 @@ public class JavaDescriptorResolver {
getterDescriptor.initialize(propertyType);
}
if (setterDescriptor != null) {
setterDescriptor.initialize(new ValueParameterDescriptorImpl(setterDescriptor, 0, Collections.<AnnotationDescriptor>emptyList(), "p0"/*TODO*/, false, propertyDescriptor.getType(), false, null));
setterDescriptor.initialize(new ValueParameterDescriptorImpl(setterDescriptor, 0, Collections.<AnnotationDescriptor>emptyList(), Name.identifier("p0") /*TODO*/, false, propertyDescriptor.getType(), false, null));
}
trace.record(BindingContext.VARIABLE, anyMember.getMember().psiMember, propertyDescriptor);
@@ -1432,7 +1433,7 @@ public class JavaDescriptorResolver {
}
private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, String methodName, ResolverScopeData scopeData) {
TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData) {
if (namedMembers.functionDescriptors != null) {
return;
}
@@ -1471,7 +1472,7 @@ public class JavaDescriptorResolver {
namedMembers.functionDescriptors = functions;
}
private Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, String methodName) {
private Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
Set<SimpleFunctionDescriptor> r = new HashSet<SimpleFunctionDescriptor>();
for (JetType supertype : getSupertypes(scopeData)) {
for (FunctionDescriptor function : supertype.getMemberScope().getFunctions(methodName)) {
@@ -1481,7 +1482,7 @@ public class JavaDescriptorResolver {
return r;
}
private Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, String propertyName) {
private Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, Name propertyName) {
Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>();
for (JetType supertype : getSupertypes(scopeData)) {
for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) {
@@ -1498,11 +1499,11 @@ public class JavaDescriptorResolver {
}
@NotNull
public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull String methodName, @NotNull ResolverScopeData scopeData) {
public Set<FunctionDescriptor> resolveFunctionGroup(@NotNull Name methodName, @NotNull ResolverScopeData scopeData) {
getResolverScopeData(scopeData);
Map<String, NamedMembers> namedMembersMap = scopeData.namedMembersMap;
Map<Name, NamedMembers> namedMembersMap = scopeData.namedMembersMap;
NamedMembers namedMembers = namedMembersMap.get(methodName);
if (namedMembers != null && namedMembers.methods != null) {
@@ -1582,7 +1583,7 @@ public class JavaDescriptorResolver {
SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
scopeData.classOrNamespaceDescriptor,
resolveAnnotations(method.getPsiMethod()),
method.getName(),
Name.identifier(method.getName()),
CallableMemberDescriptor.Kind.DECLARATION
);
@@ -1696,8 +1697,8 @@ public class JavaDescriptorResolver {
List<FunctionDescriptor> functions = new ArrayList<FunctionDescriptor>();
for (Map.Entry<String, NamedMembers> entry : scopeData.namedMembersMap.entrySet()) {
String methodName = entry.getKey();
for (Map.Entry<Name, NamedMembers> entry : scopeData.namedMembersMap.entrySet()) {
Name methodName = entry.getKey();
NamedMembers namedMembers = entry.getValue();
resolveNamedGroupFunctions(scopeData.classOrNamespaceDescriptor, scopeData.psiClass, substitutorForGenericSupertypes, namedMembers, methodName, scopeData);
functions.addAll(namedMembers.functionDescriptors);
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiParameter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collections;
import java.util.HashMap;
@@ -39,7 +40,7 @@ class JavaDescriptorResolverHelper {
private final boolean staticMembers;
private final boolean kotlin;
private Map<String, NamedMembers> namedMembersMap = new HashMap<String, NamedMembers>();
private Map<Name, NamedMembers> namedMembersMap = new HashMap<Name, NamedMembers>();
private Builder(PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) {
this.psiClass = psiClass;
@@ -52,10 +53,7 @@ class JavaDescriptorResolverHelper {
processMethods();
}
private NamedMembers getNamedMembers(String name) {
if (name.length() == 0) {
throw new IllegalStateException("Oi! Empty member name in " + psiClass.getPsiClass() + ". How it is possible?");
}
private NamedMembers getNamedMembers(Name name) {
NamedMembers r = namedMembersMap.get(name);
if (r == null) {
r = new NamedMembers();
@@ -87,7 +85,7 @@ class JavaDescriptorResolverHelper {
PsiFieldWrapper field = new PsiFieldWrapper(field0);
// group must be created even for excluded field
NamedMembers namedMembers = getNamedMembers(field.getName());
NamedMembers namedMembers = getNamedMembers(Name.identifier(field.getName()));
if (!includeMember(field)) {
continue;
@@ -102,11 +100,11 @@ class JavaDescriptorResolverHelper {
private void processMethods() {
for (PsiMethod method : psiClass.getPsiClass().getAllMethods()) {
getNamedMembers(method.getName());
getNamedMembers(Name.identifier(method.getName()));
PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName());
if (propertyParseResult != null) {
getNamedMembers(propertyParseResult.getPropertyName());
getNamedMembers(Name.identifier(propertyParseResult.getPropertyName()));
}
}
@@ -124,7 +122,7 @@ class JavaDescriptorResolverHelper {
if (propertyParseResult != null && propertyParseResult.isGetter()) {
String propertyName = propertyParseResult.getPropertyName();
NamedMembers members = getNamedMembers(propertyName);
NamedMembers members = getNamedMembers(Name.identifier(propertyName));
// TODO: some java properties too
if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
@@ -167,7 +165,7 @@ class JavaDescriptorResolverHelper {
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
String propertyName = propertyParseResult.getPropertyName();
NamedMembers members = getNamedMembers(propertyName);
NamedMembers members = getNamedMembers(Name.identifier(propertyName));
if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
if (method.getParameters().size() == 0) {
@@ -207,7 +205,7 @@ class JavaDescriptorResolverHelper {
}
if (method.getJetMethod().kind() != JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
NamedMembers namedMembers = getNamedMembers(method.getName());
NamedMembers namedMembers = getNamedMembers(Name.identifier(method.getName()));
namedMembers.addMethod(method);
}
}
@@ -216,7 +214,7 @@ class JavaDescriptorResolverHelper {
@NotNull
static Map<String, NamedMembers> getNamedMembers(@NotNull JavaDescriptorResolver.ResolverScopeData resolverScopeData) {
static Map<Name, NamedMembers> getNamedMembers(@NotNull JavaDescriptorResolver.ResolverScopeData resolverScopeData) {
if (resolverScopeData.psiClass != null) {
Builder builder = new Builder(new PsiClassWrapper(resolverScopeData.psiClass), resolverScopeData.staticMembers, resolverScopeData.kotlin);
builder.run();
@@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.descriptors.AbstractNamespaceDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import java.util.List;
@@ -33,7 +34,7 @@ public class JavaNamespaceDescriptor extends AbstractNamespaceDescriptorImpl {
private final FqName qualifiedName;
public JavaNamespaceDescriptor(NamespaceDescriptorParent containingDeclaration, List<AnnotationDescriptor> annotations,
@NotNull String name, @NotNull FqName qualifiedName) {
@NotNull Name name, @NotNull FqName qualifiedName) {
super(containingDeclaration, annotations, name);
this.qualifiedName = qualifiedName;
}
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
/**
* @author abreslav
@@ -44,7 +45,7 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
}
@Override
public ClassifierDescriptor getClassifier(@NotNull String name) {
public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassDescriptor classDescriptor = semanticServices.getDescriptorResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor == null || DescriptorUtils.isObject(classDescriptor)) {
// TODO: this is a big hack against several things that I barely understand myself and cannot explain
@@ -56,13 +57,13 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
}
@Override
public ClassDescriptor getObjectDescriptor(@NotNull String name) {
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
// TODO
return null;
}
@Override
public NamespaceDescriptor getNamespace(@NotNull String name) {
public NamespaceDescriptor getNamespace(@NotNull Name name) {
return semanticServices.getDescriptorResolver().resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN);
}
}
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import javax.inject.Inject;
@@ -87,8 +88,8 @@ public class JavaSemanticServices {
@Nullable
public ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) {
if (qualifiedName.getFqName().startsWith("jet.")) {
return (ClassDescriptor) JetStandardLibrary.getInstance().getLibraryScope().getClassifier(qualifiedName.getFqName().substring("jet.".length()));
if (qualifiedName.firstSegmentIs(Name.identifier("jet")) && qualifiedName.pathSegments().size() == 2) {
return (ClassDescriptor) JetStandardLibrary.getInstance().getLibraryScope().getClassifier(qualifiedName.pathSegments().get(1));
}
else {
return null;
@@ -20,6 +20,7 @@ import com.intellij.psi.PsiClass;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.ArrayList;
import java.util.List;
@@ -29,7 +30,7 @@ import java.util.Set;
* @author Stepan Koltsov
*/
class NamedMembers {
String name;
Name name;
List<PsiMethodWrapper> methods = new ArrayList<PsiMethodWrapper>(0);
@Nullable
@@ -64,7 +64,7 @@ public class TypeVariableResolverFromTypeDescriptors implements TypeVariableReso
@NotNull DeclarationDescriptor owner,
@NotNull String context) {
for (TypeParameterDescriptor typeParameter : typeParameters) {
if (typeParameter.getName().equals(name)) {
if (typeParameter.getName().getName().equals(name)) {
return typeParameter;
}
}