handle the case of explicit finals with deferred assignment

This commit is contained in:
Renaud Pawlak 2020-06-18 08:40:38 +02:00
parent beec62b30e
commit 05d6210ece
3 changed files with 27 additions and 9 deletions

View File

@ -3425,9 +3425,10 @@ public class Java2TypeScriptTranslator extends AbstractTreePrinter {
if (isDefinitionScope) {
print("var ");
} else {
if (!isLazyInitialized(varDecl.sym) && (varDecl.sym.getModifiers().contains(Modifier.FINAL)
|| (!globals && constAnalyzer != null
&& !constAnalyzer.getModifiedVariables().contains(varDecl.sym)))) {
if (!isLazyInitialized(varDecl.sym) && ((!globals && constAnalyzer != null
&& !constAnalyzer.getModifiedVariables().contains(varDecl.sym))
|| (globals && varDecl.sym.getModifiers().contains(Modifier.FINAL)
&& varDecl.init != null))) {
print("const ");
} else {
print(VAR_DECL_KEYWORD + " ");

View File

@ -160,13 +160,15 @@ public class SyntaxTests extends AbstractTest {
logHandler.assertNoProblems();
}, f1, f2);
String generatedCode = FileUtils.readFileToString(f1.getTsFile());
Assert.assertTrue(generatedCode.indexOf("const explicitFinalString") > -1);
Assert.assertTrue(generatedCode.indexOf("const implicitFinalString") > -1);
Assert.assertTrue(generatedCode.indexOf("let notFinalString") > -1);
Assert.assertTrue(generatedCode.contains("const explicitFinalString"));
Assert.assertTrue(generatedCode.contains("let explicitFinalStringWithDeferredAssignment"));
Assert.assertFalse(generatedCode.contains("const explicitFinalStringWithDeferredAssignment"));
Assert.assertTrue(generatedCode.contains("const implicitFinalString"));
Assert.assertTrue(generatedCode.contains("let notFinalString"));
generatedCode = FileUtils.readFileToString(f2.getTsFile());
Assert.assertTrue(generatedCode.indexOf("const explicitFinalGlobal") > -1);
Assert.assertTrue(generatedCode.indexOf("let implicitFinalGlobal") > -1);
Assert.assertTrue(generatedCode.indexOf("let notFinalGlobal") > -1);
Assert.assertTrue(generatedCode.contains("const explicitFinalGlobal"));
Assert.assertTrue(generatedCode.contains("let implicitFinalGlobal"));
Assert.assertTrue(generatedCode.contains("let notFinalGlobal"));
}
@Test

View File

@ -111,6 +111,21 @@ public class FinalVariables {
});
}
public void explicitFinalWithDeferredAssignment(boolean condition) {
final String explicitFinalStringWithDeferredAssignment;
if(condition) {
explicitFinalStringWithDeferredAssignment = "1";
} else {
explicitFinalStringWithDeferredAssignment = "2";
}
handler(new ANonFunctionalInterface() {
@Override
public void m() {
System.out.println(explicitFinalStringWithDeferredAssignment);
}
});
}
void implicitFinal() {
String implicitFinalString = "abc";
handler(new ANonFunctionalInterface() {