protected abstract IEObjectDescription doGetSingleElement(QualifiedName name, String firstSegment, int dollarIndex);
/** * Returns a String representation of this using {@code delimiter} as namespace delimiter. * @param delimiter the delimiter to use. <code>null</code> will be represented as the String "<code>null</code>". * @return the concatenated segments joined with the given {@code delimiter} * @since 2.3 */ public String toString(String delimiter) { int segmentCount = getSegmentCount(); switch (segmentCount) { case 0: return ""; case 1: return getFirstSegment(); default: StringBuilder builder = new StringBuilder(); for (int i = 0; i < segmentCount; i++) { if (i > 0) builder.append(delimiter); builder.append(segments[i]); } return builder.toString(); } } }
protected boolean isLegacyMatch(int index, QualifiedName relativeName) { QualifiedName importedName = importNames.get(index); return importedName != null && relativeName.getSegmentCount() == 1 && importedName.getLastSegment().equals(relativeName.getFirstSegment()); }
protected String getExtensionSignature(IIdentifiableElementDescription desc) { JvmOperation operation = (JvmOperation) desc.getElementOrProxy(); StringBuilder builder = new StringBuilder(64).append(desc.getName()); String opName = operation.getSimpleName(); if (opName.length() - 3 == desc.getName().getFirstSegment().length() && opName.startsWith("set")) { builder.append("="); } appendParameters(operation, builder, desc.isExtension()); return builder.toString(); }
protected IEObjectDescription doGetSingleElement(QualifiedName name) { if (name.getSegmentCount() == 1) { String singleSegment = name.getFirstSegment(); for(int i = 0; i < typeParameters.size(); i++) { List<JvmTypeParameter> chunk = typeParameters.get(i); for(int j = 0; j < chunk.size(); j++) { JvmTypeParameter candidate = chunk.get(j); if (singleSegment.equals(candidate.getSimpleName())) { return EObjectDescription.create(name, candidate); } } } } return null; }
protected String getSignature(IIdentifiableElementDescription desc) { String descName = desc.getName().getFirstSegment(); StringBuilder builder = new StringBuilder(64).append(descName); JvmIdentifiableElement elementOrProxy = desc.getElementOrProxy(); if (elementOrProxy instanceof JvmExecutable) { JvmExecutable executable = (JvmExecutable) desc.getElementOrProxy(); String opName = executable.getSimpleName(); if (opName.length() - 3 == descName.length() && opName.startsWith("set")) { builder.append("="); } appendParameters(executable, builder, desc.isExtension()); } return builder.toString(); }
@Override protected JvmType findNestedType(JvmType result, int index, QualifiedName name) { if (result.eContainer() instanceof JvmDeclaredType && name.getSegmentCount() == 1) { QualifiedName importName = importNames.get(index); if (importName != null && importName.getLastSegment().equals(name.getFirstSegment())) { return result; } } return super.findNestedType(result, index, name); }
protected boolean isPrimitive(QualifiedName name) { return name.getSegmentCount() == 1 && Primitives.forName(name.getFirstSegment()) != null; }
protected boolean isAliased(IEObjectDescription desc) { String actualName = ((JvmIdentifiableElement) desc.getEObjectOrProxy()).getSimpleName(); String usedName = desc.getName().getFirstSegment(); if (actualName.equals(usedName)) { return false; } return true; }
protected boolean isReferenceToSelf(XFeatureCall featureCall, JvmType type) { return !featureCall.isTypeLiteral() && !featureCall.isPackageFragment() && type.equals(featureCall.getFeature()) && IFeatureNames.SELF.getFirstSegment().equals(featureCall.getConcreteSyntaxFeatureName()); }
protected boolean isValidAssignmentName(IIdentifiableElementDescription description) { JvmIdentifiableElement candidate = description.getElementOrProxy(); if (candidate.eClass() == TypesPackage.Literals.JVM_OPERATION) { if (candidate.getSimpleName().equals(description.getName().getFirstSegment())) { return false; } else if (!candidate.getSimpleName().startsWith("set")) { return false; } } return true; }
protected QualifiedName internalResolve(QualifiedName relativeName) { QualifiedName importedNamespace = getImportedNamespacePrefix(); if (importedNamespace.getLastSegment().equals(relativeName.getFirstSegment())) { return importedNamespace.skipLast(1).append(relativeName); } return null; } }
protected JvmType findNestedType(JvmType result, int index, QualifiedName name) { List<String> segments = name.getSegmentCount() == 1 ? Strings.split(name.getFirstSegment(), '$') : name.getSegments(); for(int i = 1; i < segments.size() && result instanceof JvmDeclaredType; i++) { JvmDeclaredType declaredType = (JvmDeclaredType) result; String simpleName = segments.get(i); // TODO handle ambiguous types for(JvmMember member: declaredType.findAllNestedTypesByName(simpleName)) { result = (JvmType) member; break; } if (declaredType == result) { return null; } } return result; }
@Override protected Iterable<IEObjectDescription> getLocalElementsByName(QualifiedName name) { List<JvmDeclaredType> nestedTypeDeclarators = session.getNestedTypeDeclarators(); if (nestedTypeDeclarators.isEmpty()) return Collections.emptyList(); Iterator<JvmDeclaredType> iterator = nestedTypeDeclarators.iterator(); String simpleName = name.getFirstSegment(); List<IEObjectDescription> result = null; while(iterator.hasNext()) { JvmDeclaredType declarator = iterator.next(); Iterable<JvmDeclaredType> nestedTypes = declarator.findAllNestedTypesByName(simpleName); if (name.getSegmentCount() == 1 && nestedTypes.iterator().hasNext()) { result = addDescriptions(name, 0, nestedTypes, result); } } if (result == null && name.getSegmentCount() == 1 && simpleName.indexOf('$') > 0) { QualifiedName splitted = QualifiedName.create(Strings.split(simpleName, '$')); return getLocalElementsByName(splitted); } if (result != null) return result; return Collections.emptyList(); }
@Override public String toString(String value) throws ValueConverterException { QualifiedName operatorName = operatorMapping.getOperator(QualifiedName.create(value)); if (operatorName != null) { return operatorName.getFirstSegment(); } return getDelegate().toString(value); }
@Override protected List<IEObjectDescription> getLocalElementsByName(QualifiedName name) { XAbstractFeatureCall featureCall = getFeatureCall(); if (featureCall.isExplicitOperationCallOrBuilderSyntax()) return Collections.emptyList(); if (rawEnclosingType instanceof JvmDeclaredType && name.getSegmentCount() == 1) { String singleSegment = name.getFirstSegment(); List<String> lookup = Collections.singletonList(singleSegment); if (singleSegment.indexOf('$') != -1) { lookup = Strings.split(singleSegment, '$'); } JvmType result = findNestedType((JvmDeclaredType)rawEnclosingType, lookup.iterator()); if (result != null) { IEObjectDescription description = EObjectDescription.create(name, result); return Collections.<IEObjectDescription>singletonList(new TypeLiteralDescription(description, enclosingType, isVisible(result))); } } return Collections.emptyList(); }
@Override public String toValue(String string, INode node) throws ValueConverterException { QualifiedName operatorMethodName = operatorMapping.getMethodName(QualifiedName.create(string)); if (operatorMethodName != null) { return operatorMethodName.getFirstSegment(); } return (String) getDelegate().toValue(string, node); }
@Override protected QualifiedName resolveNonWildcard(QualifiedName relativeName) { if (relativeName.getSegmentCount()==1) { // legacy import support, e.g. import java.util.Map$Entry allows to use Map$Entry as the simple name if (getImportedNamespacePrefix().getLastSegment().equals(relativeName.getFirstSegment())) { return getImportedNamespacePrefix(); } return internalResolve(relativeName); } else { StringBuilder concatenated = new StringBuilder(); for(int i = 0; i < relativeName.getSegmentCount(); i++) { String segment = relativeName.getSegment(i); if (segment.indexOf('$') == -1) { if (concatenated.length() != 0) { concatenated.append('$'); } concatenated.append(segment); } else { return null; } } return internalResolve(QualifiedName.create(concatenated.toString())); } }
@Override public boolean apply(final IEObjectDescription input) { if ((input instanceof IIdentifiableElementDescription)) { if (((!((IIdentifiableElementDescription)input).isVisible()) || (!((IIdentifiableElementDescription)input).isValidStaticState()))) { return false; } boolean _startsWith = ((IIdentifiableElementDescription)input).getName().getFirstSegment().startsWith("operator_"); if (_startsWith) { QualifiedName _operator = this.operatorMapping.getOperator(((IIdentifiableElementDescription)input).getName()); return (_operator == null); } } return true; } }
@Override protected IEObjectDescription doGetSingleElement(QualifiedName name, String firstSegment, int dollarIndex) { JvmDeclaredType declaredType = innermost; while(declaredType != null) { IEObjectDescription result = doGetSingleElement(declaredType, name, firstSegment, dollarIndex); if (result != null) { return result; } declaredType = EcoreUtil2.getContainerOfType(declaredType.eContainer(), JvmDeclaredType.class); } if (dollarIndex > 0 && name.getSegmentCount() == 1) { QualifiedName splitted = QualifiedName.create(Strings.split(name.getFirstSegment(), '$')); IEObjectDescription result = doGetSingleElement(splitted, splitted.getFirstSegment(), -1); if (result != null) { return new AliasedEObjectDescription(name, result); } } return null; }