protected IssueLocation getLocationData(EObject obj, EStructuralFeature structuralFeature, int index) {
		INode parserNode = NodeModelUtils.getNode(obj);
		if (parserNode != null) {
			if (structuralFeature != null) {
				List<INode> nodes = NodeModelUtils.findNodesForFeature(obj, structuralFeature);
				if (index < 0) // insignificant index
					index = 0;
				if (nodes.size()>index)
					parserNode = nodes.get(index);
			}
			return getLocationForNode(parserNode);
		} else if (obj.eContainer() != null) {
			EObject container = obj.eContainer();
			EStructuralFeature containingFeature = obj.eContainingFeature();
			return getLocationData(container, containingFeature,
					containingFeature.isMany() ? ((EList<?>) container.eGet(containingFeature)).indexOf(obj)
							: ValidationMessageAcceptor.INSIGNIFICANT_INDEX);
		}
		IssueLocation result = new IssueLocation();
		result.lineNumber = 1;
		result.column = 1;
		result.offset = 0;
		result.length = 0;
		return result;
	}
protected IssueLocation getLocationData ( EObject obj , EStructuralFeature structuralFeature , int index ) { INode parserNode = NodeModelUtils . getNode ( obj ) ; if ( parserNode != null ) { if ( structuralFeature != null ) { List < INode > nodes = NodeModelUtils . findNodesForFeature ( obj , structuralFeature ) ; if ( index < 0 ) index = 0 ; if ( nodes . size ( ) > index ) parserNode = nodes . get ( index ) ; } return getLocationForNode ( parserNode ) ; } else if ( obj . eContainer ( ) != null ) { EObject container = obj . eContainer ( ) ; EStructuralFeature containingFeature = obj . eContainingFeature ( ) ; return getLocationData ( container , containingFeature , containingFeature . isMany ( ) ? ( ( EList < ? > ) container . eGet ( containingFeature ) ) . indexOf ( obj ) : ValidationMessageAcceptor . INSIGNIFICANT_INDEX ) ; } IssueLocation result = new IssueLocation ( ) ; result . lineNumber = 1 ; result . column = 1 ; result . offset = 0 ; result . length = 0 ; return result ; }
@return the location data for the given diagnostic.