Skip to content

Commit 57ffbde

Browse files
committed
// BH 7/3/2018 -- adds effectively final
FINAL keyword no longer necessary
1 parent b4c3754 commit 57ffbde

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed
25 Bytes
Binary file not shown.
25 Bytes
Binary file not shown.

sources/net.sf.j2s.core/src/net/sf/j2s/core/astvisitors/Java2ScriptVisitor.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import org.eclipse.jdt.core.dom.WhileStatement;
123123
import org.eclipse.jdt.core.dom.WildcardType;
124124

125+
// BH 7/3/2018 -- adds effectively final -- FINAL keyword no longer necessary
125126
// BH 6/27/2018 -- fix for a[Integer] not becoming a[Integer.valueOf]
126127
// BH 6/26/2018 -- method logging via j2s.log.methods.called and j2s.log.methods.declared
127128
// BH 6/24/2018 -- synchronized(a = new Object()) {...} ---> ...; only if an assignment or not a simple function call to Object.getTreeLock()
@@ -745,12 +746,23 @@ private void acceptVariableFinal(SimpleName name, int offset) {
745746
int level = blockLevel + offset;
746747
VariableAdapter.FinalVariable f = new VariableAdapter.FinalVariable(level, identifier,
747748
methodDeclareNameStack.size() == 0 ? null : methodDeclareNameStack.peek());
748-
addVariable(f, identifier, binding);
749+
List<VariableAdapter.FinalVariable> finalVars = getVariableList('f');
750+
List<VariableAdapter.FinalVariable> normalVars = getVariableList('n');
751+
f.toVariableName = identifier;
752+
normalVars.add(f);
753+
if (isFinalOrEffectivelyFinal(binding)) {
754+
finalVars.add(f);
755+
}
749756
//buffer.append("/*blockLevel " + blockLevel + " level " + level + "*/");
750757
}
751758
name.accept(this);
752759
}
753760

761+
private static boolean isFinalOrEffectivelyFinal(IBinding binding) {
762+
return Modifier.isFinal(binding.getModifiers())
763+
|| binding instanceof IVariableBinding && ((IVariableBinding)binding).isEffectivelyFinal();
764+
}
765+
754766
private void removeVariableFinals(MethodDeclaration node) {
755767
IMethodBinding mBinding = node.resolveBinding();
756768
if (mBinding != null)
@@ -771,7 +783,7 @@ private void removeVariableFinals(MethodDeclaration node) {
771783
f.toVariableName = identifier;
772784
normalVars.remove(f);
773785
//buffer.append("/*remNorm " + f.variableName + "/to/" + f.toVariableName + "*/");
774-
if (Modifier.isFinal(binding.getModifiers())) {
786+
if (isFinalOrEffectivelyFinal(binding)) {
775787
finalVars.remove(f);
776788
//buffer.append("/*remFinal " + f.variableName + "/to/" + f.toVariableName + "*/");
777789
}
@@ -1670,7 +1682,7 @@ private boolean addFieldDeclaration(FieldDeclaration field, int mode) {
16701682
: ((PrimitiveType) nodeType).getPrimitiveTypeCode());
16711683
ITypeBinding classBinding = resolveAbstractOrAnonymousBinding(field);
16721684
// have to check here for final Object = "foo", as that must not be ignored.
1673-
boolean checkFinalConstant = (isStatic && Modifier.isFinal(field.getModifiers())
1685+
boolean checkFinalConstant = (isStatic && Modifier.isFinal(field.getModifiers())
16741686
&& var != null && !var.getType().getQualifiedName().equals("java.lang.Object"));
16751687
if (needDefault)
16761688
preVisit2(field);
@@ -2903,7 +2915,7 @@ private String simpleNameInVarBinding(SimpleName node, char ch, IVariableBinding
29032915
}
29042916
}
29052917
String fieldVar = null;
2906-
if (isAnonymousClass() && Modifier.isFinal(varBinding.getModifiers())
2918+
if (isAnonymousClass() && isFinalOrEffectivelyFinal(varBinding)
29072919
&& varBinding.getDeclaringMethod() != null) {
29082920
String key = varBinding.getDeclaringMethod().getKey();
29092921
if (methodDeclareNameStack.size() == 0 || !key.equals(methodDeclareNameStack.peek())) {
@@ -3036,6 +3048,9 @@ public boolean visit(VariableDeclarationExpression node) {
30363048
}
30373049

30383050
public boolean visit(VariableDeclarationFragment node) {
3051+
3052+
3053+
30393054
SimpleName name = node.getName();
30403055
IBinding binding = name.resolveBinding();
30413056
if (binding == null)
@@ -3690,18 +3705,6 @@ private void addQualifiedNameFromBinding(IVariableBinding varBinding, boolean is
36903705
isStatic(varBinding), true);
36913706
}
36923707

3693-
private void addVariable(VariableAdapter.FinalVariable f, String identifier, IBinding binding) {
3694-
List<VariableAdapter.FinalVariable> finalVars = getVariableList('f');
3695-
List<VariableAdapter.FinalVariable> normalVars = getVariableList('n');
3696-
f.toVariableName = identifier;
3697-
normalVars.add(f);
3698-
//buffer.append("/*addVar n " + identifier + " */");
3699-
if (Modifier.isFinal(binding.getModifiers())) {
3700-
finalVars.add(f);
3701-
//buffer.append("/*addVar f " + identifier + " */");
3702-
}
3703-
}
3704-
37053708
/**
37063709
* Determine the qualifier for a method or variable.
37073710
*

0 commit comments

Comments
 (0)