Skip to content

Commit 00d9d4d

Browse files
committed
Fixes SecureRandom code generation issue
Signed-off-by: Rakshit Krishnappa Ravi <rakshitkrishnapparavi@gmail.com>
1 parent 7d64821 commit 00d9d4d

2 files changed

Lines changed: 10 additions & 9 deletions

File tree

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/generator/CodeGenCrySLRule.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ public class CodeGenCrySLRule extends CrySLRule {
2727
private static final long serialVersionUID = -7488186084564628280L;
2828
private List<CrySLMethod> requiredMethods;
2929
private List<CodeGenCrySLObject> requiredPars;
30-
private CrySLObject requiredRetObj;
30+
private CodeGenCrySLObject requiredRetObj;
3131

32-
public CodeGenCrySLRule(String _className, List<Entry<String, String>> defObjects, List<CrySLForbiddenMethod> _forbiddenMethods, StateMachineGraph _usagePattern, List<ISLConstraint> _constraints, List<CrySLPredicate> _predicates, List<CodeGenCrySLObject> pars, CrySLObject reqRet) {
32+
public CodeGenCrySLRule(String _className, List<Entry<String, String>> defObjects, List<CrySLForbiddenMethod> _forbiddenMethods, StateMachineGraph _usagePattern, List<ISLConstraint> _constraints, List<CrySLPredicate> _predicates, List<CodeGenCrySLObject> pars, CodeGenCrySLObject reqRet) {
3333
super(_className, defObjects, _forbiddenMethods, _usagePattern, _constraints, _predicates);
3434
requiredPars = pars;
3535
requiredRetObj = reqRet;
3636
}
3737

38-
public CodeGenCrySLRule(CrySLRule rule, List<CodeGenCrySLObject> pars, CrySLObject reqRet) {
38+
public CodeGenCrySLRule(CrySLRule rule, List<CodeGenCrySLObject> pars, CodeGenCrySLObject reqRet) {
3939
this(rule.getClassName(), rule.getObjects(), rule.getForbiddenMethods(), rule.getUsagePattern(), rule.getConstraints(), rule.getPredicates(), pars, reqRet);
4040
}
4141

@@ -58,7 +58,7 @@ public List<CodeGenCrySLObject> getRequiredPars() {
5858
return requiredPars;
5959
}
6060

61-
public CrySLObject getRequiredRetObj() {
61+
public CodeGenCrySLObject getRequiredRetObj() {
6262
return requiredRetObj;
6363
}
6464

plugins/de.cognicrypt.codegenerator/src/main/java/de/cognicrypt/codegenerator/generator/CrySLBasedCodeGenerator.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,10 @@ public boolean generateCodeTemplates(Configuration chosenConfig, String pathToFo
260260
}
261261
if (toBeEnsuredPred == null) {
262262
for (CrySLPredicate reqPred : rule.getPredicates()) {
263-
CrySLObject a = ((CodeGenCrySLRule) rule).getRequiredRetObj();
263+
CodeGenCrySLObject a = rule.getRequiredRetObj();
264264
if (reqPred.getParameters().size() > 0) {
265-
boolean baseMatch = Utils.isSubType(((CrySLObject) reqPred.getParameters().get(0)).getJavaType(), a.getJavaType());
265+
boolean baseMatch = Utils.isSubType(((CrySLObject) reqPred.getParameters().get(0)).getJavaType(), a.getJavaType())
266+
&& reqPred.getParameters().get(0).getName().equals(a.getCrySLVariable());
266267
if (!baseMatch) {
267268
continue;
268269
}
@@ -743,7 +744,7 @@ else if (methodName.equals(lastInvokedMethod) && returnValueType.equals(voidStri
743744
}
744745
// Not the last invoked method and return type is not equal to "void".
745746
else if (!methodName.equals(lastInvokedMethod) && !returnValueType.equals(voidString)) {
746-
methodInvocation = returnValueType + " = " + instanceName + "." + currentInvokedMethod;
747+
methodInvocation = retObjInTemplate.getName() + " = " + instanceName + "." + currentInvokedMethod;
747748
generated = true;
748749
}
749750
}
@@ -1226,7 +1227,7 @@ public GeneratorClass setUpTemplateClass(String pathToTemplateFile) {
12261227
final ASTVisitor astVisitor = new ASTVisitor(true) {
12271228

12281229
GeneratorMethod curMethod = null;
1229-
CrySLObject retObj = null;
1230+
CodeGenCrySLObject retObj = null;
12301231
List<CodeGenCrySLObject> pars = new ArrayList<>();
12311232
Map<SimpleName, CrySLObject> preCGVars = new HashMap<SimpleName, CrySLObject>();
12321233
Map<SimpleName, CrySLObject> postCGVars = new HashMap<SimpleName, CrySLObject>();
@@ -1249,7 +1250,7 @@ public boolean visit(MethodInvocation node) {
12491250
if (efqn.equals(varfqn)) {
12501251
CrySLObject crySLObject = preCGVars.get(var);
12511252
if(pars.isEmpty()) {
1252-
retObj = crySLObject;
1253+
retObj = new CodeGenCrySLObject(crySLObject, (String) ((StringLiteral) arguments.get(1)).resolveConstantExpressionValue());
12531254
}
12541255
pars.add(new CodeGenCrySLObject(crySLObject, (String) ((StringLiteral) arguments.get(1)).resolveConstantExpressionValue()));
12551256
break;

0 commit comments

Comments
 (0)