	private void eObjectToPbmMarker(IResource res, EObject problem, int tabWidth) {
		EPackage pkProblem = null;
		EClass clProblem = null;
		EStructuralFeature sfSeverity = null;
		EStructuralFeature sfLocation = null;
		EStructuralFeature sfDescription = null;
		pkProblem = problem.eClass().getEPackage();
		clProblem = (EClass)pkProblem.getEClassifier("Problem");
		sfSeverity = clProblem.getEStructuralFeature("severity");
		sfLocation = clProblem.getEStructuralFeature("location");
		sfDescription = clProblem.getEStructuralFeature("description");
		String description = (String)problem.eGet(sfDescription);
		String location = (String)problem.eGet(sfLocation);
		int lineNumber = Integer.parseInt(location.split(":")[0]);
		int charStart = 0, charEnd = 0;
		try {
			AtlNbCharFile help = new AtlNbCharFile(((IFile)res).getContents());
			if (location.indexOf('-') == -1) {
				location +=  '-' + location;
			}
			int[] pos = help.getIndexChar(location, tabWidth);
			charStart = pos[0];
			charEnd = pos[1];
		} catch (CoreException e1) {
			logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
		}
		String severity = ((EEnumLiteral)problem.eGet(sfSeverity)).getName();
		int eclipseSeverity = ((Integer)severities.get(severity)).intValue();
		try {
			IMarker pbmMarker = res.createMarker(IMarker.PROBLEM);
			pbmMarker.setAttribute(IMarker.SEVERITY, eclipseSeverity);
			pbmMarker.setAttribute(IMarker.MESSAGE, description);
			pbmMarker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
			pbmMarker.setAttribute(IMarker.CHAR_START, charStart);
			pbmMarker.setAttribute(IMarker.CHAR_END, (charEnd > charStart) ? charEnd : charStart + 1);
		} catch (CoreException e) {
			logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
		}
	}

	private void eObjectToPbmMarker(IResource res, EObject problem, int tabWidth) {
		EPackage pkProblem = null;
		EClass clProblem = null;
		EStructuralFeature sfSeverity = null;
		EStructuralFeature sfLocation = null;
		EStructuralFeature sfDescription = null;
		pkProblem = problem.eClass().getEPackage();
		clProblem = (EClass)pkProblem.getEClassifier("Problem");
		sfSeverity = clProblem.getEStructuralFeature("severity");
		sfLocation = clProblem.getEStructuralFeature("location");
		sfDescription = clProblem.getEStructuralFeature("description");
		String description = (String)problem.eGet(sfDescription);
		String location = (String)problem.eGet(sfLocation);
		int lineNumber = Integer.parseInt(location.split(":")[0]);
		int charStart = 0, charEnd = 0;
		try {
			AtlNbCharFile help = new AtlNbCharFile(((IFile)res).getContents());
			if (location.indexOf('-') == -1) {
				location +=  '-' + location;
			}
			int[] pos = help.getIndexChar(location, tabWidth);
			charStart = pos[0];
			charEnd = pos[1];
		} catch (CoreException e1) {
			logger.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
		} catch(Exception e) {
			description += " [location \"" + location + "\" incorrectly reported because of error]";
		}
		String severity = ((EEnumLiteral)problem.eGet(sfSeverity)).getName();
		int eclipseSeverity = ((Integer)severities.get(severity)).intValue();
		try {
			IMarker pbmMarker = res.createMarker(IMarker.PROBLEM);
			pbmMarker.setAttribute(IMarker.SEVERITY, eclipseSeverity);
			pbmMarker.setAttribute(IMarker.MESSAGE, description);
			pbmMarker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
			pbmMarker.setAttribute(IMarker.CHAR_START, charStart);
			pbmMarker.setAttribute(IMarker.CHAR_END, (charEnd > charStart) ? charEnd : charStart + 1);
		} catch (CoreException e) {
			logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
		}
	}
