Removes cast-check removal logic from compiler.
Cast-checking optimization is deprecated with the new replacement
via configurable preconditions:
https://gwt-review.googlesource.com/#/c/10933/
With this patch also the related flag is deprecated and refactored
to set the new corresponding precondition property to keeps existing
apps that sets the flag working.
Change-Id: I15ea663c37d081cb7df58d78c806389571660699
Review-Link: https://gwt-review.googlesource.com/#/c/11330/
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
index 8ce479c..724be9a 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
@@ -166,11 +166,6 @@
}
@Override
- public boolean isCastCheckingDisabled() {
- return false;
- }
-
- @Override
public boolean isClassMetadataDisabled() {
return false;
}
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java
index bb1f31b..b9c8336 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/UnmodifiableCompilerOptions.java
@@ -46,11 +46,6 @@
}
@Override
- public final void setCastCheckingDisabled(boolean disabled) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public final void setClassMetadataDisabled(boolean disabled) {
throw new UnsupportedOperationException();
}
diff --git a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
index 09535cf..3ba54d3 100644
--- a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
+++ b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
@@ -130,11 +130,6 @@
}
@Override
- public boolean isCastCheckingDisabled() {
- return jjsOptions.isCastCheckingDisabled();
- }
-
- @Override
public boolean isClassMetadataDisabled() {
return jjsOptions.isClassMetadataDisabled();
}
@@ -214,11 +209,6 @@
}
@Override
- public void setCastCheckingDisabled(boolean disabled) {
- jjsOptions.setCastCheckingDisabled(disabled);
- }
-
- @Override
public void setClassMetadataDisabled(boolean disabled) {
jjsOptions.setClassMetadataDisabled(disabled);
}
@@ -401,6 +391,7 @@
public boolean shouldOptimizeDataflow() {
return jjsOptions.shouldOptimizeDataflow();
}
+
@Override
public boolean shouldOrdinalizeEnums() {
return jjsOptions.shouldOrdinalizeEnums();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
index a7da111..b36a11e 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
@@ -19,7 +19,6 @@
import com.google.gwt.dev.util.arg.OptionCheckedMode;
import com.google.gwt.dev.util.arg.OptionClosureFormattedOutput;
import com.google.gwt.dev.util.arg.OptionClusterSimilarFunctions;
-import com.google.gwt.dev.util.arg.OptionDisableCastChecking;
import com.google.gwt.dev.util.arg.OptionDisableClassMetadata;
import com.google.gwt.dev.util.arg.OptionEnableAssertions;
import com.google.gwt.dev.util.arg.OptionEnableClosureCompiler;
@@ -49,7 +48,7 @@
*/
public interface JJSOptions extends OptionOptimize,
OptionClusterSimilarFunctions, OptionIncrementalCompile, OptionDisableClassMetadata,
- OptionDisableCastChecking, OptionEnableAssertions, OptionInlineLiteralParameters,
+ OptionEnableAssertions, OptionInlineLiteralParameters,
OptionOptimizeDataflow, OptionRunAsyncEnabled, OptionScriptStyle, OptionSoycEnabled,
OptionSoycDetailed, OptionJsonSoycEnabled, OptionOrdinalizeEnums,
OptionRemoveDuplicateFunctions, OptionStrict,
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
index 0f8aa73..69f202b 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
@@ -33,7 +33,6 @@
private boolean clusterSimilarFunctions = true;
private boolean incrementalCompile = false;
private boolean compilerMetricsEnabled = false;
- private boolean disableCastChecking = false;
private boolean disableClassMetadata = false;
private boolean enableAssertions;
private int fragmentCount = -1;
@@ -63,7 +62,6 @@
public void copyFrom(JJSOptions other) {
setAddRuntimeChecks(other.shouldAddRuntimeChecks());
- setCastCheckingDisabled(other.isCastCheckingDisabled());
setClassMetadataDisabled(other.isClassMetadataDisabled());
setClosureCompilerEnabled(other.isClosureCompilerEnabled());
setClusterSimilarFunctions(other.shouldClusterSimilarFunctions());
@@ -127,11 +125,6 @@
}
@Override
- public boolean isCastCheckingDisabled() {
- return disableCastChecking;
- }
-
- @Override
public boolean isClassMetadataDisabled() {
return disableClassMetadata;
}
@@ -191,11 +184,6 @@
}
@Override
- public void setCastCheckingDisabled(boolean disabled) {
- disableCastChecking = disabled;
- }
-
- @Override
public void setClassMetadataDisabled(boolean disabled) {
disableClassMetadata = disabled;
}
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index b507c64..c61a631 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -481,13 +481,11 @@
ComputeExhaustiveCastabilityInformation.exec(jprogram);
} else {
// If trivial casts are pruned then one can use smaller runtime castmaps.
- ComputeCastabilityInformation.exec(jprogram, options.isCastCheckingDisabled(),
- !shouldOptimize() /* recordTrivialCasts */);
+ ComputeCastabilityInformation.exec(jprogram, !shouldOptimize() /* recordTrivialCasts */);
}
- ImplementCastsAndTypeChecks.exec(jprogram, options.isCastCheckingDisabled(),
- shouldOptimize() /* pruneTrivialCasts */);
- ArrayNormalizer.exec(jprogram, options.isCastCheckingDisabled());
+ ImplementCastsAndTypeChecks.exec(jprogram, shouldOptimize() /* pruneTrivialCasts */);
+ ArrayNormalizer.exec(jprogram);
EqualityNormalizer.exec(jprogram);
TypeMapper<?> typeMapper = getTypeMapper();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java
index 0c10cb1..75d07c9 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java
@@ -49,8 +49,7 @@
@Override
public void endVisit(JBinaryOperation x, Context ctx) {
- if (disableCastChecking || x.getOp() != JBinaryOperator.ASG ||
- !(x.getLhs() instanceof JArrayRef)) {
+ if (x.getOp() != JBinaryOperator.ASG || !(x.getLhs() instanceof JArrayRef)) {
return;
}
JArrayRef arrayRef = (JArrayRef) x.getLhs();
@@ -202,22 +201,19 @@
}
}
- public static void exec(JProgram program, boolean disableCastChecking) {
- new ArrayNormalizer(program, disableCastChecking).execImpl();
+ public static void exec(JProgram program) {
+ new ArrayNormalizer(program).execImpl();
}
- private final boolean disableCastChecking;
private final JMethod initDim;
private final JMethod initDims;
private final JMethod initValues;
private final JProgram program;
private final JMethod setCheckMethod;
- private ArrayNormalizer(JProgram program, boolean disableCastChecking) {
+ private ArrayNormalizer(JProgram program) {
this.program = program;
- this.disableCastChecking = disableCastChecking;
setCheckMethod = program.getIndexedMethod("Array.setCheck");
-
initDim = program.getIndexedMethod("Array.initDim");
initDims = program.getIndexedMethod("Array.initDims");
initValues = program.getIndexedMethod("Array.initValues");
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ComputeCastabilityInformation.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ComputeCastabilityInformation.java
index 7dfada8..2b2b6d5 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ComputeCastabilityInformation.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ComputeCastabilityInformation.java
@@ -151,7 +151,7 @@
@Override
public void endVisit(JCastOperation x, Context ctx) {
- if (disableCastChecking || x.getCastType().isNullType()) {
+ if (x.getCastType().isNullType()) {
return;
}
recordCast(x.getCastType(), x.getExpr());
@@ -288,28 +288,23 @@
}
}
- public static void exec(JProgram program, boolean disableCastChecking,
- boolean recordTrivialCasts) {
- new ComputeCastabilityInformation(program, disableCastChecking, recordTrivialCasts).execImpl();
+ public static void exec(JProgram program, boolean recordTrivialCasts) {
+ new ComputeCastabilityInformation(program, recordTrivialCasts).execImpl();
}
- public static void exec(JProgram program, boolean disableCastChecking) {
- new ComputeCastabilityInformation(program, disableCastChecking, false).execImpl();
+ public static void exec(JProgram program) {
+ new ComputeCastabilityInformation(program, false).execImpl();
}
- private final boolean disableCastChecking;
-
private final boolean recordTrivialCasts;
private final JProgram program;
private final JTypeOracle typeOracle;
- private ComputeCastabilityInformation(JProgram program, boolean disableCastChecking,
- boolean recordTrivialCasts) {
+ private ComputeCastabilityInformation(JProgram program, boolean recordTrivialCasts) {
this.program = program;
this.typeOracle = program.typeOracle;
- this.disableCastChecking = disableCastChecking;
this.recordTrivialCasts = recordTrivialCasts;
}
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecks.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecks.java
index 866b49d..8e9f398 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecks.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecks.java
@@ -57,11 +57,6 @@
JType toType = x.getCastType();
JExpression expr = x.getExpr();
- // Even if disableCastChecking is enabled, we need to rescue JSOs
- if (disableCastChecking && toType instanceof JReferenceType) {
- // Just leave the cast in, GenerateJavaScriptAST will ignore it.
- return;
- }
SourceInfo info = x.getSourceInfo();
if (pruneTrivialCasts && toType.isNullType()) {
/**
@@ -268,16 +263,14 @@
return call;
}
- public static void exec(JProgram program, boolean disableCastChecking,
- boolean pruneTrivialCasts) {
- new ImplementCastsAndTypeChecks(program, disableCastChecking, pruneTrivialCasts).execImpl();
+ public static void exec(JProgram program, boolean pruneTrivialCasts) {
+ new ImplementCastsAndTypeChecks(program, pruneTrivialCasts).execImpl();
}
- public static void exec(JProgram program, boolean disableCastChecking) {
- new ImplementCastsAndTypeChecks(program, disableCastChecking, true).execImpl();
+ public static void exec(JProgram program) {
+ new ImplementCastsAndTypeChecks(program, true).execImpl();
}
- private final boolean disableCastChecking;
private final boolean pruneTrivialCasts;
private final JProgram program;
@@ -287,10 +280,8 @@
private Map<TypeCategory, JMethod> dynamicCastMethodsByTargetTypeCategory =
Maps.newEnumMap(TypeCategory.class);
- private ImplementCastsAndTypeChecks(JProgram program, boolean disableCastChecking,
- boolean pruneTrivialCasts) {
+ private ImplementCastsAndTypeChecks(JProgram program, boolean pruneTrivialCasts) {
this.program = program;
- this.disableCastChecking = disableCastChecking;
this.pruneTrivialCasts = pruneTrivialCasts;
// Populate the necessary instanceOf methods.
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
index 83473cc..1994a95 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableCastChecking.java
@@ -17,22 +17,24 @@
import com.google.gwt.util.tools.ArgHandlerFlag;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Enables run-time cast checking.
*/
public class ArgHandlerDisableCastChecking extends ArgHandlerFlag {
- private final OptionDisableCastChecking option;
+ private OptionSetProperties setProperties;
- public ArgHandlerDisableCastChecking(OptionDisableCastChecking option) {
- this.option = option;
-
+ public ArgHandlerDisableCastChecking(OptionSetProperties setProperties) {
+ this.setProperties = setProperties;
addTagValue("-XdisableCastChecking", false);
}
@Override
public String getPurposeSnippet() {
- return "Insert run-time checking of cast operations.";
+ return "DEPRECATED: use checks.checkLevel instead.";
}
@Override
@@ -42,7 +44,8 @@
@Override
public boolean setFlag(boolean value) {
- option.setCastCheckingDisabled(!value);
+ List<String> propertyValue = Arrays.asList(value ? "ENABLED" : "DISABLED");
+ setProperties.setPropertyValues("checks.type", propertyValue);
return true;
}
@@ -53,6 +56,6 @@
@Override
public boolean getDefaultValue() {
- return !option.isCastCheckingDisabled();
+ return false;
}
}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java
deleted file mode 100644
index f89630b..0000000
--- a/dev/core/src/com/google/gwt/dev/util/arg/OptionDisableCastChecking.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.dev.util.arg;
-
-/**
- * Encapsulates a compiler option to disable runtime cast checking.
- */
-public interface OptionDisableCastChecking {
- boolean isCastCheckingDisabled();
-
- void setCastCheckingDisabled(boolean disabled);
-}
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerNoopDeprecatedFlag.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerNoopDeprecatedFlag.java
index 3c52bd1..cb1cbb8 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerNoopDeprecatedFlag.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerNoopDeprecatedFlag.java
@@ -44,7 +44,7 @@
@Override
public String getPurpose() {
- return "Deprecated. Has no effect and will be removed in a future release";
+ return "DEPRECATED: Has no effect and will be removed in a future release";
}
@Override
diff --git a/dev/core/test/com/google/gwt/dev/PrecompileTaskArgProcessorTest.java b/dev/core/test/com/google/gwt/dev/PrecompileTaskArgProcessorTest.java
index 123239f..cb4630e 100644
--- a/dev/core/test/com/google/gwt/dev/PrecompileTaskArgProcessorTest.java
+++ b/dev/core/test/com/google/gwt/dev/PrecompileTaskArgProcessorTest.java
@@ -38,7 +38,7 @@
public void testFlagBackwardCompatibility() {
// Set a bunch of boolean flags using old-style tags.
precompileTaskArgProcessor.processArgs("-workDir", "/tmp", "-XcompilerMetrics",
- "-XdisableCastChecking", "-XdisableClassMetadata", "-XdisableClusterSimilarFunctions",
+ "-XdisableClassMetadata", "-XdisableClusterSimilarFunctions",
"-XdisableInlineLiteralParameters", "-XdisableOptimizeDataflow", "-XdisableOrdinalizeEnums",
"-XdisableRemoveDuplicateFunctions", "-XdisableRunAsync", "-XdisableSoycHtml",
"-XdisableUpdateCheck", "-ea", "-XenableClosureCompiler", "-soyc", "-XsoycDetailed",
@@ -48,8 +48,6 @@
assertNotEquals(
defaultOptions.isCompilerMetricsEnabled(), handledOptions.isCompilerMetricsEnabled());
assertNotEquals(
- defaultOptions.isCastCheckingDisabled(), handledOptions.isCastCheckingDisabled());
- assertNotEquals(
defaultOptions.isClassMetadataDisabled(), handledOptions.isClassMetadataDisabled());
assertNotEquals(defaultOptions.shouldClusterSimilarFunctions(),
handledOptions.shouldClusterSimilarFunctions());
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/ArrayNormalizerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/ArrayNormalizerTest.java
index d5cf3d9..6ecb89c 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/ArrayNormalizerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/ArrayNormalizerTest.java
@@ -21,7 +21,6 @@
* Test for {@link ArrayNormalizer}.
*/
public class ArrayNormalizerTest extends OptimizerTestBase {
- private boolean disableCastCheck = false;
// TODO(rluble): add unit test for the rest of the functionality.
public void testSetCheckElimination_finalTypeArray() throws Exception {
@@ -35,21 +34,6 @@
"a[1] = new EntryPoint$A();");
}
- public void testSetCheckElimination_disableCastCheck() throws Exception {
- disableCastCheck = true;
- addSnippetClassDecl("static class A {String name; public void set() { name = \"A\";} }");
- addSnippetClassDecl("static class B extends A { }");
-
- Result result =
- optimize("void", "A[] a = new A[1]; a = new B[1]; a[1] = new B();");
- result.intoString(
- "EntryPoint$A[] a = Array.initDim(EntryPoint$A.class, , " +
- "/* JRuntimeTypeReference */\"test.EntryPoint$A\", 1, 0, 1);",
- "a = Array.initDim(EntryPoint$B.class, , " +
- "/* JRuntimeTypeReference */\"test.EntryPoint$B\", 1, 0, 1);",
- "a[1] = new EntryPoint$B();");
- }
-
public void testSetCheckPreservation_nonFinalTypeArray() throws Exception {
addSnippetClassDecl("static class A {String name; public void set() { name = \"A\";} }");
addSnippetClassDecl("static class B extends A { }");
@@ -74,7 +58,7 @@
didChange &= TypeTightener.exec(program).didChange();
didChange &= MethodCallTightener.exec(program).didChange();
} while (didChange);
- ArrayNormalizer.exec(program, disableCastCheck);
+ ArrayNormalizer.exec(program);
return true;
}
}
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/FullCompileTestBase.java b/dev/core/test/com/google/gwt/dev/jjs/impl/FullCompileTestBase.java
index 3f62f68..cbc2067 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/FullCompileTestBase.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/FullCompileTestBase.java
@@ -96,7 +96,7 @@
optimizeJava();
ComputeCastabilityInformation.exec(jProgram, false);
ImplementCastsAndTypeChecks.exec(jProgram, false);
- ArrayNormalizer.exec(jProgram, false);
+ ArrayNormalizer.exec(jProgram);
TypeTightener.exec(jProgram);
MethodCallTightener.exec(jProgram);
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecksTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecksTest.java
index a1708b7..d963e9e 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecksTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/ImplementCastsAndTypeChecksTest.java
@@ -21,7 +21,6 @@
* Test for {@link ImplementCastsAndTypeChecksTest}.
*/
public class ImplementCastsAndTypeChecksTest extends OptimizerTestBase {
- private boolean disableCastCheck = false;
// TODO(rluble): add unit test for the rest of the functionality.
public void testCastCheckIntoNullCheck() throws Exception {
@@ -56,7 +55,7 @@
didChange &= TypeTightener.exec(program).didChange();
didChange &= MethodCallTightener.exec(program).didChange();
} while (didChange);
- ImplementCastsAndTypeChecks.exec(program, disableCastCheck);
+ ImplementCastsAndTypeChecks.exec(program);
return true;
}
}
diff --git a/dev/core/test/com/google/gwt/dev/js/JsStackEmulatorTest.java b/dev/core/test/com/google/gwt/dev/js/JsStackEmulatorTest.java
index 4344807..2bba3e7 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsStackEmulatorTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsStackEmulatorTest.java
@@ -281,7 +281,7 @@
// These passes are needed by GenerateJavaScriptAST.
ComputeCastabilityInformation.exec(jProgram, false);
ImplementCastsAndTypeChecks.exec(jProgram, false);
- ArrayNormalizer.exec(jProgram, false);
+ ArrayNormalizer.exec(jProgram);
TypeMapper<String> typeMapper = new StringTypeMapper();
ResolveRuntimeTypeReferences.exec(jProgram, typeMapper, TypeOrder.FREQUENCY);