protected IScope doGetTypeScope(XFeatureCall call, JvmType type) { if (call.isPackageFragment()) { if (type instanceof JvmDeclaredType) { String packageName = ((JvmDeclaredType) type).getPackageName(); int dot = packageName.indexOf('.'); if (dot == -1) { return new SingletonScope(EObjectDescription.create(packageName, type), IScope.NULLSCOPE); } else { String firstSegment = packageName.substring(0, dot); return new SingletonScope( EObjectDescription.create(firstSegment, type), IScope.NULLSCOPE); } } return IScope.NULLSCOPE; } else { if (type instanceof JvmDeclaredType && ((JvmDeclaredType) type).getDeclaringType() != null) { Resource resource = call.eResource(); if (resource instanceof XtextResource) { XImportSection importSection = importsConfiguration.getImportSection((XtextResource) resource); if (importSection != null) { List<XImportDeclaration> importDeclarations = importSection.getImportDeclarations(); List<IEObjectDescription> descriptions = Lists.newArrayList(); for (XImportDeclaration importDeclaration : importDeclarations) { if (!importDeclaration.isStatic() && !importDeclaration.isWildcard() && !importDeclaration.isExtension()) { JvmDeclaredType importedType = importDeclaration.getImportedType(); if (importedType == type) { String syntax = importsConfiguration.getLegacyImportSyntax(importDeclaration); if (syntax != null /* no node model attached */ && syntax.equals(type.getQualifiedName())) { String packageName = importedType.getPackageName(); descriptions.add( EObjectDescription.create( syntax.substring(packageName.length() + 1), type)); } } if (EcoreUtil.isAncestor(importedType, type)) { String name = type.getSimpleName(); JvmType worker = type; while (worker != importedType) { worker = (JvmType) worker.eContainer(); name = worker.getSimpleName() + "$" + name; } descriptions.add(EObjectDescription.create(name, type)); } } } return new SimpleScope(descriptions); } } return new SingletonScope( EObjectDescription.create(type.getSimpleName(), type), IScope.NULLSCOPE); } else { return new SingletonScope( EObjectDescription.create(type.getSimpleName(), type), IScope.NULLSCOPE); } } }
protected IScope getLocalElementsScope( IScope parent, IScope globalScope, EObject context, EReference reference) { IScope result = parent; QualifiedName name = getQualifiedNameOfLocalElement(context); boolean ignoreCase = isIgnoreCase(reference); ISelectable resourceOnlySelectable = getAllDescriptions(context.eResource()); ISelectable globalScopeSelectable = new ScopeBasedSelectable(globalScope); // imports List<ImportNormalizer> explicitImports = getImportedNamespaceResolvers(context, ignoreCase); if (!explicitImports.isEmpty()) { result = createImportScope( result, explicitImports, globalScopeSelectable, reference.getEReferenceType(), ignoreCase); } // local element if (name != null) { ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase); result = createImportScope( result, singletonList(localNormalizer), resourceOnlySelectable, reference.getEReferenceType(), ignoreCase); } // scope for jvm elements Set<EObject> elements = associations.getJvmElements(context); for (EObject derivedJvmElement : elements) { // scope for JvmDeclaredTypes if (derivedJvmElement instanceof JvmDeclaredType) { JvmDeclaredType declaredType = (JvmDeclaredType) derivedJvmElement; QualifiedName jvmTypeName = getQualifiedNameOfLocalElement(declaredType); if (declaredType.getDeclaringType() == null && !Strings.isEmpty(declaredType.getPackageName())) { QualifiedName packageName = this.qualifiedNameConverter.toQualifiedName(declaredType.getPackageName()); ImportNormalizer normalizer = doCreateImportNormalizer(packageName, true, ignoreCase); result = createImportScope( result, singletonList(normalizer), globalScopeSelectable, reference.getEReferenceType(), ignoreCase); } if (jvmTypeName != null && !jvmTypeName.equals(name)) { ImportNormalizer localNormalizer = doCreateImportNormalizer(jvmTypeName, true, ignoreCase); result = createImportScope( result, singletonList(localNormalizer), resourceOnlySelectable, reference.getEReferenceType(), ignoreCase); } } // scope for JvmTypeParameterDeclarator if (derivedJvmElement instanceof JvmTypeParameterDeclarator) { JvmTypeParameterDeclarator parameterDeclarator = (JvmTypeParameterDeclarator) derivedJvmElement; List<IEObjectDescription> descriptions = null; for (JvmTypeParameter param : parameterDeclarator.getTypeParameters()) { if (param.getSimpleName() != null) { if (descriptions == null) descriptions = Lists.newArrayList(); QualifiedName paramName = QualifiedName.create(param.getSimpleName()); descriptions.add(EObjectDescription.create(paramName, param)); } } if (descriptions != null && !descriptions.isEmpty()) result = MapBasedScope.createScope(result, descriptions); } } return result; }
public boolean needsImport(JvmDeclaredType type) { if (type.getDeclaringType() != null) return true; String packageName = type.getPackageName(); return packageName != null && !(implicitlyImportedPackages.contains(packageName)); }
@Override public String getPackageName() { JvmDeclaredType declaringType = internalGetDeclaringType(); if (declaringType != null) return declaringType.getPackageName(); return packageName; }