/* * Copyright 2013 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.javac; import com.google.gwt.dev.javac.testing.impl.MockJavaResource; import com.google.gwt.thirdparty.guava.common.base.Joiner; import java.util.List; /** * Test class for GwtIncompatible annotations in {@link com.google.gwt.dev.javac.JdtCompiler}. */ public class GwtIncompatibleJdtCompilerTest extends JdtCompilerTestBase { public void testCompileError() throws Exception { List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_METHOD_MISSING_ANNOTATION); assertOnlyLastUnitHasErrors(units, "The method gwtIncompatibleMethod() is undefined for the type GwtIncompatibleTest"); } public void testCompileGwtIncompatible() throws Exception { assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_METHOD, GWTINCOMPATIBLE_FIELD, GWTINCOMPATIBLE_INNERCLASS, GWTINCOMPATIBLE_ANONYMOUS_INNERCLASS); } public void testCompileGwtIncompatibleClass() throws Exception { assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS); } public void testCompileExtendsGwtIncompatibleClass() throws Exception { List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS, EXTENDS_GWTINCOMPATIBLE); assertOnlyLastUnitHasErrors(units, "The type ExtendsGwtIncompatibleClass cannot " + "subclass the final class GwtIncompatibleClass"); } public void testCompileInstantiateGwtIncompatibleClass() throws Exception { List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS, INSTANTIATES_GWTINCOMPATIBLE); assertOnlyLastUnitHasErrors(units, "The constructor GwtIncompatibleClass() is not visible"); } public void testCompileGwtIncompatibleClassWithInnerClass() throws Exception { assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_WITH_INNERCLASS); } public void testCompileGwtIncompatibleClassWithInnerClassTest() throws Exception { List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_WITH_INNERCLASS, GWTINCOMPATIBLE_WITH_INNERCLASS_TEST); assertOnlyLastUnitHasErrors(units, "The constructor GwtIncompatibleWithInnerClass() is not visible", "GwtIncompatibleWithInnerClass.Child cannot be resolved to a type"); } public void testCompileGwtIncompatibleClassWithStaticInnerClass() throws Exception { assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS); } public void testCompileGwtIncompatibleClassWithStaticInnerClassTest() throws Exception { List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS, GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS_TEST); assertOnlyLastUnitHasErrors(units, "GwtIncompatibleWithStaticInnerClass.Child cannot be resolved to a type"); } public void testCompileGwtIncompatibleAnnotation() throws Exception { assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_ANNOTATION_TYPE); } public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION = new MockJavaResource( "com.google.gwt.GwtIncompatible") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public @interface GwtIncompatible {", " String[] value();", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_METHOD_MISSING_ANNOTATION = new MockJavaResource("com.google.gwt.GwtIncompatibleTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleTest {", " int test() { return gwtIncompatibleMethod(); } ", " @GwtIncompatible(\" not compatible \") ", " int gwtIncompatibleMethod() { return -1; } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_METHOD = new MockJavaResource( "com.google.gwt.GwtIncompatibleMethodTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleMethodTest {", " @GwtIncompatible(\" not compatible \") ", " int test() { return methodDoesNotExist(); } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_FIELD = new MockJavaResource( "com.google.gwt.GwtIncompatibleFieldTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleFieldTest {", " @GwtIncompatible(\" not compatible \") ", " int test = methodDoesNotExist(); ", " int test() { return 31; } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_INNERCLASS = new MockJavaResource( "com.google.gwt.GwtIncompatibleInnerTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleInnerTest {", " @GwtIncompatible(\" not compatible \") ", " public class Inner {", " int test() { return methodDoesNotExist(); } ", " }", " int test() { return 31; } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_TOPCLASS = new MockJavaResource( "com.google.gwt.GwtIncompatibleClass") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "@GwtIncompatible(\" not compatible \") ", "public class GwtIncompatibleClass {", "}"); } }; public static final MockJavaResource EXTENDS_GWTINCOMPATIBLE = new MockJavaResource( "com.google.gwt.ExtendsGwtIncompatibleClass") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class ExtendsGwtIncompatibleClass", " extends GwtIncompatibleClass {", "}"); } }; public static final MockJavaResource INSTANTIATES_GWTINCOMPATIBLE = new MockJavaResource( "com.google.gwt.InstantiatesGwtIncompatibleClass") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class InstantiatesGwtIncompatibleClass {", " Object test() { return new GwtIncompatibleClass(); } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_ANONYMOUS_INNERCLASS = new MockJavaResource( "com.google.gwt.GwtIncompatibleAInnerTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleAInnerTest {", " Object createAnonymous() {", " return new Object() {", " @GwtIncompatible(\" not compatible \") ", " int test() { return methodDoesNotExist(); } ", " };", " }", " int test() { return 31; } ", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_WITH_INNERCLASS = new MockJavaResource( "com.google.gwt.GwtIncompatibleWithInnerClass") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "@GwtIncompatible(\" not compatible \") ", "public class GwtIncompatibleWithInnerClass {", " public class Child {", " }", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_WITH_INNERCLASS_TEST = new MockJavaResource( "com.google.gwt.GwtIncompatibleWithInnerClassTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleWithInnerClassTest {", " void test() {", " (new GwtIncompatibleWithInnerClass()).new Child();", " }", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS = new MockJavaResource("com.google.gwt.GwtIncompatibleWithStaticInnerClass") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "@GwtIncompatible(\" not compatible \") ", "public class GwtIncompatibleWithStaticInnerClass {", " public static class Child {", " }", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS_TEST = new MockJavaResource("com.google.gwt.GwtIncompatibleWithStaticInnerClassTest") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "public class GwtIncompatibleWithStaticInnerClassTest {", " void test() {", " new GwtIncompatibleWithStaticInnerClass.Child();", " }", "}"); } }; public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION_TYPE = new MockJavaResource( "com.google.gwt.GwtIncompatibleAnnotation") { @Override public CharSequence getContent() { return Joiner.on("\n").join("package com.google.gwt;", "@GwtIncompatible(\" not compatible \") ", "public @interface GwtIncompatibleAnnotation {", "}"); } }; }