Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip subprogram call check for components referencing thread type only #2326

Merged
merged 3 commits into from May 29, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion analyses/org.osate.codegen.checker/META-INF/MANIFEST.MF
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: org.osate.codegen.checker
Bundle-SymbolicName: org.osate.codegen.checker;singleton:=true
Bundle-Version: 1.0.2.qualifier
Bundle-Version: 1.0.3.qualifier
Bundle-Activator: org.osate.codegen.checker.Activator
Bundle-Vendor: CMU-SEI
Require-Bundle: org.eclipse.ui;bundle-version="[3.115.0,4.0.0)",
Expand Down
2 changes: 1 addition & 1 deletion analyses/org.osate.codegen.checker/pom.xml
Expand Up @@ -12,7 +12,7 @@

<groupId>org.osate</groupId>
<artifactId>org.osate.codegen.checker</artifactId>
<version>1.0.2-SNAPSHOT</version>
<version>1.0.3-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>

</project>
@@ -1,18 +1,18 @@
/**
* Copyright (c) 2004-2020 Carnegie Mellon University and others. (see Contributors file).
* Copyright (c) 2004-2020 Carnegie Mellon University and others. (see Contributors file).
* All Rights Reserved.
*
*
* NO WARRANTY. ALL MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
* KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE
* OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT
* MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
*
*
* This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
* SPDX-License-Identifier: EPL-2.0
*
*
* Created, in part, with funding and support from the United States Government. (see Acknowledgments file).
*
*
* This program includes and/or can make use of certain third party source code, object code, documentation and other
* files ("Third Party Software"). The Third Party Software that is used by this program is dependent upon your system
* configuration. By using this program, You agree to comply with any and all relevant Third Party Software terms and
Expand All @@ -28,6 +28,7 @@
import java.util.stream.Collectors;

import org.osate.aadl2.ComponentCategory;
import org.osate.aadl2.ComponentClassifier;
import org.osate.aadl2.EnumerationLiteral;
import org.osate.aadl2.NamedElement;
import org.osate.aadl2.SubprogramCall;
Expand All @@ -40,10 +41,13 @@

public class ThreadCheck extends AbstractCheck {

@Override
public void perform(SystemInstance si) {

final List<ComponentInstance> allThreads = si.getAllComponentInstances().stream()
.filter(comp -> (comp.getCategory() == ComponentCategory.THREAD)).collect(Collectors.toList());
final List<ComponentInstance> allThreads = si.getAllComponentInstances()
.stream()
.filter(comp -> (comp.getCategory() == ComponentCategory.THREAD))
.collect(Collectors.toList());

/**
* Each thread needs to specify the dispatch protocol "periodic" or
Expand All @@ -53,43 +57,48 @@ public void perform(SystemInstance si) {
EnumerationLiteral protocol = GetProperties.getDispatchProtocol(comp);
return protocol == null || !(protocol.toString().equalsIgnoreCase(AadlProject.PERIODIC_LITERAL)
|| protocol.toString().equalsIgnoreCase(AadlProject.SPORADIC_LITERAL));
}).forEach(thr -> addError(new ErrorReport(thr,
"Thread needs a Thread_Properties::Dispatch_Protocol property of 'Periodic' or 'Sporadic'")));
})
.forEach(thr -> addError(new ErrorReport(thr,
"Thread needs a Thread_Properties::Dispatch_Protocol property of 'Periodic' or 'Sporadic'")));

/**
* Each thread needs to specify period
*/
final List<ComponentInstance> threadMissingPeriod = allThreads.stream()
.filter(comp -> (GetProperties.getPeriodinMS(comp) == 0.0)).collect(Collectors.toList());
.filter(comp -> (GetProperties.getPeriodinMS(comp) == 0.0))
.collect(Collectors.toList());
for (ComponentInstance thr : threadMissingPeriod) {
addError(new ErrorReport(thr, "Thread must define the property Timing_Properties::Period"));
}

final List<ComponentInstance> threadMissingDeadline = allThreads.stream()
.filter(comp -> (GetProperties.getDeadlineinMilliSec(comp) == 0.0)).collect(Collectors.toList());
.filter(comp -> (GetProperties.getDeadlineinMilliSec(comp) == 0.0))
.collect(Collectors.toList());
for (ComponentInstance thr : threadMissingDeadline) {
addError(new ErrorReport(thr, "Thread must define the property Timing_Properties::Deadline"));
}

for (ComponentInstance ci : allThreads) {

ThreadImplementation ti = (ThreadImplementation) ci.getComponentClassifier();
for (SubprogramCall sc : ti.getSubprogramCalls()) {
NamedElement cs = (NamedElement) sc.getCalledSubprogram();

if (GetProperties.getSourceName(cs) == null) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Name"));
}

if (GetProperties.getSourceText(cs).size() == 0) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Text"));
}

if (GetProperties.getSourceLanguage(cs).size() == 0) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Language"));
ComponentClassifier cc = ci.getComponentClassifier();
if (cc instanceof ThreadImplementation) {
ThreadImplementation ti = (ThreadImplementation) cc;
for (SubprogramCall sc : ti.getSubprogramCalls()) {
NamedElement cs = (NamedElement) sc.getCalledSubprogram();

if (GetProperties.getSourceName(cs) == null) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Name"));
}

if (GetProperties.getSourceText(cs).size() == 0) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Text"));
}

if (GetProperties.getSourceLanguage(cs).size() == 0) {
addError(new ErrorReport(cs,
"Subprogram must define the property Programming_Properties::Source_Language"));
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion core/org.osate.build.coverage.report/pom.xml
Expand Up @@ -120,7 +120,7 @@
<dependency>
<groupId>org.osate</groupId>
<artifactId>org.osate.codegen.checker</artifactId>
<version>1.0.2-SNAPSHOT</version>
<version>1.0.3-SNAPSHOT</version>
<optional>true</optional>
<scope>compile</scope>
</dependency>
Expand Down