1 /* 2 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.incubator.code.internal; 27 28 import com.sun.tools.javac.code.Symbol; 29 import com.sun.tools.javac.code.Symbol.MethodSymbol; 30 import com.sun.tools.javac.code.Symbol.ModuleSymbol; 31 import com.sun.tools.javac.code.Symtab; 32 import com.sun.tools.javac.code.Type; 33 import com.sun.tools.javac.code.Type.ArrayType; 34 import com.sun.tools.javac.code.Type.MethodType; 35 import com.sun.tools.javac.util.Context; 36 import com.sun.tools.javac.util.List; 37 import com.sun.tools.javac.util.Names; 38 39 import static com.sun.tools.javac.code.Flags.PUBLIC; 40 import static com.sun.tools.javac.code.Flags.STATIC; 41 import static com.sun.tools.javac.code.Flags.VARARGS; 42 43 public class CodeReflectionSymbols { 44 public final Type quotedType; 45 public final Type quotableType; 46 public final Type codeReflectionType; 47 public final MethodSymbol opInterpreterInvoke; 48 public final MethodSymbol opParserFromString; 49 public final MethodSymbol methodHandlesLookup; 50 public final Type opType; 51 public final Type funcOpType; 52 public final Type opFactoryType; 53 public final Type typeElementFactoryType; 54 public final Type extendedOpType; 55 public final Type coreTypeFactoryType; 56 public final Symbol.VarSymbol extendedOpFactorySym; 57 public final Symbol.VarSymbol coreTypeFactorySym; 58 59 CodeReflectionSymbols(Context context) { 60 Symtab syms = Symtab.instance(context); 61 Names names = Names.instance(context); 62 ModuleSymbol jdk_incubator_code = syms.enterModule(names.jdk_incubator_code); 63 codeReflectionType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.CodeReflection"); 64 quotedType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.Quoted"); 65 quotableType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.Quotable"); 66 Type opInterpreterType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.interpreter.Interpreter"); 67 opType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.Op"); 68 funcOpType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.op.CoreOp$FuncOp"); 69 opInterpreterInvoke = new MethodSymbol(PUBLIC | STATIC | VARARGS, 70 names.fromString("invoke"), 71 new MethodType(List.of(syms.methodHandleLookupType, opType, new ArrayType(syms.objectType, syms.arrayClass)), syms.objectType, 72 List.nil(), syms.methodClass), 73 opInterpreterType.tsym); 74 Type opParserType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.parser.OpParser"); 75 opParserFromString = new MethodSymbol(PUBLIC | STATIC, 76 names.fromString("fromStringOfFuncOp"), 77 new MethodType(List.of(syms.stringType), opType, 78 List.nil(), syms.methodClass), 79 opParserType.tsym); 80 methodHandlesLookup = new MethodSymbol(PUBLIC | STATIC, 81 names.fromString("lookup"), 82 new MethodType(List.nil(), syms.methodHandleLookupType, 83 List.nil(), syms.methodClass), 84 syms.methodHandlesType.tsym); 85 syms.synthesizeEmptyInterfaceIfMissing(quotedType); 86 syms.synthesizeEmptyInterfaceIfMissing(quotableType); 87 opFactoryType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.op.OpFactory"); 88 typeElementFactoryType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.type.TypeElementFactory"); 89 extendedOpType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.op.ExtendedOp"); 90 coreTypeFactoryType = syms.enterClass(jdk_incubator_code, "jdk.incubator.code.type.CoreTypeFactory"); 91 extendedOpFactorySym = new Symbol.VarSymbol(PUBLIC | STATIC, names.fromString("FACTORY"), opFactoryType, 92 extendedOpType.tsym); 93 coreTypeFactorySym = new Symbol.VarSymbol(PUBLIC | STATIC, names.fromString("CORE_TYPE_FACTORY"), typeElementFactoryType, 94 coreTypeFactoryType.tsym); 95 } 96 }