/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.emftext.language.emfdoc.constraints;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.emftext.language.emfdoc.DocumentationElement;
import org.emftext.language.emfdoc.EmfdocPackage;
import org.emftext.language.emfdoc.resource.emfdoc.EmfdocEProblemSeverity;
import org.emftext.language.emfdoc.resource.emfdoc.EmfdocEProblemType;
import org.emftext.language.emfdoc.resource.emfdoc.IEmfdocProblem;
import org.emftext.language.emfdoc.resource.emfdoc.IEmfdocQuickFix;
import org.emftext.language.emfdoc.resource.emfdoc.IEmfdocResourcePostProcessor;
import org.emftext.language.emfdoc.resource.emfdoc.mopp.EmfdocProblem;
import org.emftext.language.emfdoc.resource.emfdoc.mopp.EmfdocQuickFix;
import org.emftext.language.emfdoc.resource.emfdoc.mopp.EmfdocResource;
import org.emftext.language.emfdoc.resource.emfdoc.util.EmfdocEObjectUtil;
public class DuplicateDocumentationElementChecker implements IEmfdocResourcePostProcessor {
public void process(EmfdocResource resource) {
Set<EModelElement> documentedElements = new LinkedHashSet<EModelElement>();
EList<EObject> contents = resource.getContents();
for (EObject content : contents) {
Collection<DocumentationElement> documentationElements = EmfdocEObjectUtil.getObjectsByType(content.eAllContents(), EmfdocPackage.eINSTANCE.getDocumentationElement());
for (final DocumentationElement documentationElement : documentationElements) {
EModelElement documentedElement = documentationElement.getDocumentedElement();
if (documentedElements.contains(documentedElement)) {
IEmfdocQuickFix quickFix = new EmfdocQuickFix("Remove documentation", "IMG_ELCL_REMOVE", documentationElement) {
@Override
public void applyChanges() {
EcoreUtil.remove(documentationElement);
}
};
IEmfdocProblem problem = new EmfdocProblem(
"Found duplicate documentation",
EmfdocEProblemType.ANALYSIS_PROBLEM,
EmfdocEProblemSeverity.ERROR,
quickFix
);
resource.addProblem(
problem,
documentationElement
);
} else {
documentedElements.add(documentedElement);
}
}
}
}
public void terminate() {
// do nothing
}
}