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) { if (isDefinitionScope) {
print("var "); print("var ");
} else { } else {
if (!isLazyInitialized(varDecl.sym) && (varDecl.sym.getModifiers().contains(Modifier.FINAL) if (!isLazyInitialized(varDecl.sym) && ((!globals && constAnalyzer != null
|| (!globals && constAnalyzer != null && !constAnalyzer.getModifiedVariables().contains(varDecl.sym))
&& !constAnalyzer.getModifiedVariables().contains(varDecl.sym)))) { || (globals && varDecl.sym.getModifiers().contains(Modifier.FINAL)
&& varDecl.init != null))) {
print("const "); print("const ");
} else { } else {
print(VAR_DECL_KEYWORD + " "); print(VAR_DECL_KEYWORD + " ");

View File

@ -160,13 +160,15 @@ public class SyntaxTests extends AbstractTest {
logHandler.assertNoProblems(); logHandler.assertNoProblems();
}, f1, f2); }, f1, f2);
String generatedCode = FileUtils.readFileToString(f1.getTsFile()); String generatedCode = FileUtils.readFileToString(f1.getTsFile());
Assert.assertTrue(generatedCode.indexOf("const explicitFinalString") > -1); Assert.assertTrue(generatedCode.contains("const explicitFinalString"));
Assert.assertTrue(generatedCode.indexOf("const implicitFinalString") > -1); Assert.assertTrue(generatedCode.contains("let explicitFinalStringWithDeferredAssignment"));
Assert.assertTrue(generatedCode.indexOf("let notFinalString") > -1); Assert.assertFalse(generatedCode.contains("const explicitFinalStringWithDeferredAssignment"));
Assert.assertTrue(generatedCode.contains("const implicitFinalString"));
Assert.assertTrue(generatedCode.contains("let notFinalString"));
generatedCode = FileUtils.readFileToString(f2.getTsFile()); generatedCode = FileUtils.readFileToString(f2.getTsFile());
Assert.assertTrue(generatedCode.indexOf("const explicitFinalGlobal") > -1); Assert.assertTrue(generatedCode.contains("const explicitFinalGlobal"));
Assert.assertTrue(generatedCode.indexOf("let implicitFinalGlobal") > -1); Assert.assertTrue(generatedCode.contains("let implicitFinalGlobal"));
Assert.assertTrue(generatedCode.indexOf("let notFinalGlobal") > -1); Assert.assertTrue(generatedCode.contains("let notFinalGlobal"));
} }
@Test @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() { void implicitFinal() {
String implicitFinalString = "abc"; String implicitFinalString = "abc";
handler(new ANonFunctionalInterface() { handler(new ANonFunctionalInterface() {