Skip to content
Snippets Groups Projects
Commit 5fbefcbe authored by Sebastian Krings's avatar Sebastian Krings
Browse files

add error marked on no units / multiple units, for variables and constants

parent beed56d4
Branches
Tags
No related merge requests found
package de.prob.units.problems;
import org.rodinp.core.IRodinProblem;
import de.prob.units.Activator;
public class MultipleUnitsInferredMarker implements IRodinProblem {
private String message;
private int severity;
public static final String ERROR_CODE = Activator.PLUGIN_ID + "."
+ "multipleUnitsInferred";
public MultipleUnitsInferredMarker(int severity, String message) {
this.severity = severity;
this.message = message;
}
@Override
public String getErrorCode() {
return ERROR_CODE;
}
@Override
public String getLocalizedMessage(Object[] arg0) {
return message;
}
@Override
public int getSeverity() {
return severity;
}
}
...@@ -38,6 +38,7 @@ import org.eventb.core.IVariable; ...@@ -38,6 +38,7 @@ import org.eventb.core.IVariable;
import org.rodinp.core.IRodinFile; import org.rodinp.core.IRodinFile;
import org.rodinp.core.RodinCore; import org.rodinp.core.RodinCore;
import org.rodinp.core.RodinDBException; import org.rodinp.core.RodinDBException;
import org.rodinp.core.RodinMarkerUtil;
import de.prob.core.Animator; import de.prob.core.Animator;
import de.prob.core.LimitedLogger; import de.prob.core.LimitedLogger;
...@@ -57,6 +58,7 @@ import de.prob.prolog.term.CompoundPrologTerm; ...@@ -57,6 +58,7 @@ import de.prob.prolog.term.CompoundPrologTerm;
import de.prob.prolog.term.ListPrologTerm; import de.prob.prolog.term.ListPrologTerm;
import de.prob.prolog.term.PrologTerm; import de.prob.prolog.term.PrologTerm;
import de.prob.units.pragmas.InferredUnitPragmaAttribute; import de.prob.units.pragmas.InferredUnitPragmaAttribute;
import de.prob.units.problems.MultipleUnitsInferredMarker;
public class StartUnitAnalysisHandler extends AbstractHandler implements public class StartUnitAnalysisHandler extends AbstractHandler implements
IHandler { IHandler {
...@@ -95,6 +97,8 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements ...@@ -95,6 +97,8 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements
final IEventBRoot rootElement = getRootElement(); final IEventBRoot rootElement = getRootElement();
final IFile resource = extractResource(rootElement); final IFile resource = extractResource(rootElement);
removeUnitErrorMarkers(resource);
ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> errors = new ArrayList<String>();
boolean realError = checkErrorMarkers(resource, errors); boolean realError = checkErrorMarkers(resource, errors);
if (!errors.isEmpty()) { if (!errors.isEmpty()) {
...@@ -152,6 +156,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements ...@@ -152,6 +156,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements
return null; return null;
} }
private void removeUnitErrorMarkers(final IFile resource) {
IProject project = resource.getProject();
try {
IMarker[] markers = project.findMarkers(
"org.eclipse.core.resources.problemmarker", true,
IResource.DEPTH_INFINITE);
for (IMarker iMarker : markers) {
if (iMarker.getAttribute(RodinMarkerUtil.ERROR_CODE, "")
.equals(MultipleUnitsInferredMarker.ERROR_CODE)) {
iMarker.delete();
}
}
} catch (CoreException e1) {
}
}
private boolean checkErrorMarkers(final IFile resource, List<String> errors) { private boolean checkErrorMarkers(final IFile resource, List<String> errors) {
boolean result = false; boolean result = false;
IProject project = resource.getProject(); IProject project = resource.getProject();
...@@ -201,7 +222,6 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements ...@@ -201,7 +222,6 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements
// find and update variables // find and update variables
IVariable[] allVariables = rootElement.getMachineRoot() IVariable[] allVariables = rootElement.getMachineRoot()
.getVariables(); .getVariables();
for (IVariable var : allVariables) { for (IVariable var : allVariables) {
String variableName = var.getIdentifierString(); String variableName = var.getIdentifierString();
if (variables.containsKey(variableName)) { if (variables.containsKey(variableName)) {
...@@ -209,6 +229,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements ...@@ -209,6 +229,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements
InferredUnitPragmaAttribute.ATTRIBUTE, InferredUnitPragmaAttribute.ATTRIBUTE,
variables.get(variableName), variables.get(variableName),
new NullProgressMonitor()); new NullProgressMonitor());
if (variables.get(variableName).equals("error")) {
var.createProblemMarker(
InferredUnitPragmaAttribute.ATTRIBUTE,
new MultipleUnitsInferredMarker(
IMarker.SEVERITY_ERROR,
"Multiple Units inferred for Variable "
+ variableName));
}
if (variables.get(variableName).equals("unknown")) {
var.createProblemMarker(
InferredUnitPragmaAttribute.ATTRIBUTE,
new MultipleUnitsInferredMarker(
IMarker.SEVERITY_WARNING,
"No Units inferred for Variable "
+ variableName));
}
} }
} }
...@@ -224,6 +261,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements ...@@ -224,6 +261,23 @@ public class StartUnitAnalysisHandler extends AbstractHandler implements
InferredUnitPragmaAttribute.ATTRIBUTE, InferredUnitPragmaAttribute.ATTRIBUTE,
variables.get(constantName), variables.get(constantName),
new NullProgressMonitor()); new NullProgressMonitor());
if (variables.get(constantName).equals("error")) {
var.createProblemMarker(
InferredUnitPragmaAttribute.ATTRIBUTE,
new MultipleUnitsInferredMarker(
IMarker.SEVERITY_ERROR,
"Multiple Units inferred for Constant "
+ constantName));
}
if (variables.get(constantName).equals("unknown")) {
var.createProblemMarker(
InferredUnitPragmaAttribute.ATTRIBUTE,
new MultipleUnitsInferredMarker(
IMarker.SEVERITY_WARNING,
"No Units inferred for Constant "
+ constantName));
}
} }
} }
} else { } else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment