sadayapalam@2812: /* sadayapalam@2812: * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. sadayapalam@2812: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. sadayapalam@2812: * sadayapalam@2812: * This code is free software; you can redistribute it and/or modify it sadayapalam@2812: * under the terms of the GNU General Public License version 2 only, as sadayapalam@2812: * published by the Free Software Foundation. sadayapalam@2812: * sadayapalam@2812: * This code is distributed in the hope that it will be useful, but WITHOUT sadayapalam@2812: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or sadayapalam@2812: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License sadayapalam@2812: * version 2 for more details (a copy is included in the LICENSE file that sadayapalam@2812: * accompanied this code). sadayapalam@2812: * sadayapalam@2812: * You should have received a copy of the GNU General Public License version sadayapalam@2812: * 2 along with this work; if not, write to the Free Software Foundation, sadayapalam@2812: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. sadayapalam@2812: * sadayapalam@2812: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA sadayapalam@2812: * or visit www.oracle.com if you need additional information or have any sadayapalam@2812: * questions. sadayapalam@2812: */ sadayapalam@2812: sadayapalam@2812: /* sadayapalam@2812: * @test sadayapalam@2812: * @bug 8080842 sadayapalam@2812: * @summary Ensure Scope impl can cope with remove() when a field and method share the name. sadayapalam@2812: */ sadayapalam@2812: sadayapalam@2812: import com.sun.tools.javac.util.*; sadayapalam@2812: import com.sun.tools.javac.code.*; sadayapalam@2812: import com.sun.tools.javac.code.Scope.*; sadayapalam@2812: import com.sun.tools.javac.code.Symbol.*; sadayapalam@2812: import com.sun.tools.javac.file.JavacFileManager; sadayapalam@2812: sadayapalam@2812: public class RemoveSymbolUnitTest { sadayapalam@2812: sadayapalam@2812: Context context; sadayapalam@2812: Names names; sadayapalam@2812: Symtab symtab; sadayapalam@2812: sadayapalam@2812: public static void main(String... args) throws Exception { sadayapalam@2812: new RemoveSymbolUnitTest().run(); sadayapalam@2812: } sadayapalam@2812: sadayapalam@2812: public void run() { sadayapalam@2812: context = new Context(); sadayapalam@2812: JavacFileManager.preRegister(context); // required by ClassReader which is required by Symtab sadayapalam@2812: names = Names.instance(context); sadayapalam@2812: symtab = Symtab.instance(context); sadayapalam@2812: sadayapalam@2812: Name hasNext = names.fromString("hasNext"); sadayapalam@2812: ClassSymbol clazz = new ClassSymbol(0, sadayapalam@2812: names.fromString("X"), sadayapalam@2812: Type.noType, sadayapalam@2812: symtab.unnamedPackage); sadayapalam@2812: sadayapalam@2812: VarSymbol v = new VarSymbol(0, hasNext, Type.noType, clazz); sadayapalam@2812: MethodSymbol m = new MethodSymbol(0, hasNext, Type.noType, clazz); sadayapalam@2812: sadayapalam@2812: // Try enter and remove in different shuffled combinations. sadayapalam@2812: // working with fresh scope each time. sadayapalam@2812: Scope cs = new Scope(clazz); sadayapalam@2812: cs.enter(v); sadayapalam@2812: cs.enter(m); sadayapalam@2812: cs.remove(v); sadayapalam@2812: Symbol s = cs.lookup(hasNext).sym; sadayapalam@2812: if (s != m) sadayapalam@2812: throw new AssertionError("Wrong symbol"); sadayapalam@2812: sadayapalam@2812: cs = new Scope(clazz); sadayapalam@2812: cs.enter(m); sadayapalam@2812: cs.enter(v); sadayapalam@2812: cs.remove(v); sadayapalam@2812: s = cs.lookup(hasNext).sym; sadayapalam@2812: if (s != m) sadayapalam@2812: throw new AssertionError("Wrong symbol"); sadayapalam@2812: sadayapalam@2812: cs = new Scope(clazz); sadayapalam@2812: cs.enter(v); sadayapalam@2812: cs.enter(m); sadayapalam@2812: cs.remove(m); sadayapalam@2812: s = cs.lookup(hasNext).sym; sadayapalam@2812: if (s != v) sadayapalam@2812: throw new AssertionError("Wrong symbol"); sadayapalam@2812: sadayapalam@2812: cs = new Scope(clazz); sadayapalam@2812: cs.enter(m); sadayapalam@2812: cs.enter(v); sadayapalam@2812: cs.remove(m); sadayapalam@2812: s = cs.lookup(hasNext).sym; sadayapalam@2812: if (s != v) sadayapalam@2812: throw new AssertionError("Wrong symbol"); sadayapalam@2812: } sadayapalam@2812: }