blob: d963e9e3deb471de2f25be79f696d3867bfd746b [file] [log] [blame]
/*
* Copyright 2015 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.jjs.impl;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.dev.jjs.ast.JMethod;
import com.google.gwt.dev.jjs.ast.JProgram;
/**
* Test for {@link ImplementCastsAndTypeChecksTest}.
*/
public class ImplementCastsAndTypeChecksTest extends OptimizerTestBase {
// TODO(rluble): add unit test for the rest of the functionality.
public void testCastCheckIntoNullCheck() throws Exception {
addSnippetClassDecl("static class A { String name; public void set() { name = \"A\";} }");
Result result =
optimize("void", "A a = new A(); a = null; if (a instanceof A) {}");
result.intoString(
"EntryPoint$A a = new EntryPoint$A();",
"a = null;",
"if (a != null) {",
"}");
}
public void testRemoveCastCheck_exactType() throws Exception {
addSnippetClassDecl("static class A { String name; public void set() { name = \"A\";} }");
Result result =
optimize("void", "A a = new A(); if (a instanceof A) {}");
result.intoString(
"EntryPoint$A a = new EntryPoint$A();",
"if (a != null) {",
"}");
}
@Override
protected boolean doOptimizeMethod(TreeLogger logger, JProgram program, JMethod method) {
program.addEntryMethod(findMainMethod(program));
boolean didChange = true;
do {
didChange &= TypeTightener.exec(program).didChange();
didChange &= MethodCallTightener.exec(program).didChange();
} while (didChange);
ImplementCastsAndTypeChecks.exec(program);
return true;
}
}