use of abs.frontend.typechecker.locationtypes.LocationType in project abstools by abstools.
the class ProjectAddLocationHandler method execute.
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getActiveMenuSelection(event);
Object firstElement = selection.getFirstElement();
if (firstElement instanceof IProject) {
IProject project = (IProject) firstElement;
AbsNature nature = UtilityFunctions.getAbsNature(project);
if (nature == null)
return null;
IPersistentPreferenceStore projectStore = nature.getProjectPreferenceStore();
boolean locationTypecheckingEnabled = projectStore.getBoolean(Constants.LOCATION_TYPECHECK);
if (!locationTypecheckingEnabled) {
MessageDialog.openInformation(Display.getDefault().getActiveShell(), "Locationtypechecking", "Location type checking is disabled. Please enable for this function to work!");
return null;
}
UtilityFunctions.saveEditors(project, false);
Map<LocationTypeVariable, LocationType> locationTypeInferrerResult = nature.getLocationTypeInferrerResult();
if (locationTypeInferrerResult != null) {
InferMain inferMain = new InferMain();
String commandId = event.getCommand().getId();
if ("org.abs-models.abs.plugin.projectaddalllocations".equals(commandId)) {
inferMain.setConfig(InferMain.Config.values());
} else if ("org.abs-models.abs.plugin.projectaddclasslocations".equals(commandId)) {
inferMain.setConfig(InferMain.Config.CLASSES);
} else if ("org.abs-models.abs.plugin.projectaddfieldlocations".equals(commandId)) {
inferMain.setConfig(InferMain.Config.FIELDS);
} else if ("org.abs-models.abs.plugin.projectaddfunctionlocations".equals(commandId)) {
inferMain.setConfig(InferMain.Config.FUNCTIONS);
} else if ("org.abs-models.abs.plugin.projectaddinterfacelocations".equals(commandId)) {
inferMain.setConfig(InferMain.Config.INTERFACES);
}
try {
inferMain.writeInferenceResultsBack(locationTypeInferrerResult);
try {
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
}
} catch (IOException e) {
MessageDialog.openError(Display.getDefault().getActiveShell(), "Error while inserting locations", "An error occurred while inserting locations!\n" + e.getLocalizedMessage());
}
}
}
return null;
}
use of abs.frontend.typechecker.locationtypes.LocationType in project abstools by abstools.
the class AbsNature method createLocationTypeInferenceMarker.
private void createLocationTypeInferenceMarker() throws CoreException {
synchronized (modelLock) {
LocationTypeInferrerExtension locationTypeInferrerExtension = modelbuilder.getLocationTypeInferrerExtension();
if (locationTypeInferrerExtension != null) {
Map<LocationTypeVariable, LocationType> inferResult = locationTypeInferrerExtension.getResults();
if (inferResult != null) {
if (getProjectPreferenceStore().getBoolean(LOCATION_TYPE_OVERLAY)) {
for (Entry<LocationTypeVariable, LocationType> e : inferResult.entrySet()) {
LocationType annoType = e.getKey().getAnnotatedType();
if (annoType == null || annoType.equals(LocationType.INFER)) {
int severity = IMarker.SEVERITY_ERROR;
if (e.getValue().isNear()) {
severity = IMarker.SEVERITY_INFO;
} else if (e.getValue().isSomewhere()) {
severity = IMarker.SEVERITY_WARNING;
}
createMarker(e.getKey().getNode(), "Inferred Location Type: " + e.getValue(), severity, LOCATION_TYPE_INFERENCE_MARKER_TYPE);
}
}
}
} else {
IMarker marker = getProject().createMarker(TYPECHECK_MARKER_TYPE);
marker.setAttribute(IMarker.MESSAGE, "Location Type Inference Failed");
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
}
}
}
}
use of abs.frontend.typechecker.locationtypes.LocationType in project abstools by abstools.
the class AbsModelManagerImpl method extendedTypechecking.
private void extendedTypechecking() {
if (absNature.getProject() != null) {
IPersistentPreferenceStore projectPreferences = absNature.getProjectPreferenceStore();
IncrementalModelBuilder.flushAll(model);
model.getTypeExt().clearTypeSystemExtensions();
boolean dolocationtypecheck = projectPreferences.getBoolean(LOCATION_TYPECHECK);
if (dolocationtypecheck) {
String defaultlocationtypeprecision = projectPreferences.getString(LOCATION_TYPE_PRECISION);
LocationType defaultLocType = LocationType.createFromName(projectPreferences.getString(DEFAULT_LOCATION_TYPE));
LocationTypeInferrerExtension ltie = new LocationTypeInferrerExtension(model);
ltie.setDefaultType(defaultLocType);
ltie.setLocationTypingPrecision(LocationTypingPrecision.valueOf(defaultlocationtypeprecision));
model.registerTypeSystemExtension(ltie);
}
}
SemanticConditionList typeErrors = model.typeCheck();
updateMarkers(typeErrors);
}
Aggregations