public void enter(JavaSymbol symbol) { if(!symbol.isMethodSymbol() && symbols.containsKey(symbol.name)) { for (JavaSymbol symInScope : symbols.get(symbol.name)) { Preconditions.checkState(symInScope.kind != symbol.kind, "Registering symbol: '%s' twice in the same scope", symbol.name); } } symbols.put(symbol.name, symbol); scopeSymbols.add(symbol); }
public void enter(JavaSymbol symbol) { if(!symbol.isMethodSymbol() && symbols.containsKey(symbol.name)) { for (JavaSymbol symInScope : symbols.get(symbol.name)) { Preconditions.checkState(symInScope.kind != symbol.kind, "Registering symbol: '%s' twice in the same scope", symbol.name); } } symbols.put(symbol.name, symbol); scopeSymbols.add(symbol); }
private void inferArgumentTypes(List<JavaType> argTypes, Resolve.Resolution resolution) { Type formal = Symbols.unknownType; for (int i = 0; i < argTypes.size(); i++) { JavaType arg = argTypes.get(i); if (resolution.symbol().isMethodSymbol()) { List<JavaType> resolvedFormals = ((MethodJavaType) resolution.type()).argTypes; int size = resolvedFormals.size(); formal = resolvedFormals.get((i < size) ? i : (size - 1)); } if (arg.isTagged(JavaType.DEFERRED)) { setInferedType(formal, (DeferredType) arg); } } }
private void inferArgumentTypes(List<JavaType> argTypes, Resolve.Resolution resolution) { Type formal = Symbols.unknownType; for (int i = 0; i < argTypes.size(); i++) { JavaType arg = argTypes.get(i); if (resolution.symbol().isMethodSymbol()) { List<JavaType> resolvedFormals = ((MethodJavaType) resolution.type()).argTypes; int size = resolvedFormals.size(); formal = resolvedFormals.get((i < size) ? i : (size - 1)); } if (arg.isTagged(JavaType.DEFERRED)) { setInferedType(formal, (DeferredType) arg); } } }
public TypeJavaSymbol(int flags, String name, JavaSymbol owner) { super(TYP, flags, name, owner); this.type = new ClassJavaType(this); this.typeVariableTypes = Lists.newArrayList(); if (owner.isMethodSymbol()) { // declaration of a class or an anonymous class in a method internalName = ((TypeJavaSymbol) owner.owner).registerClassInternalName(name); } else if (owner.isTypeSymbol() && name.isEmpty()) { // anonymous class in a field internalName = ((TypeJavaSymbol) owner).registerClassInternalName(""); } else { internalName = name; } }
public TypeJavaSymbol(int flags, String name, JavaSymbol owner) { super(TYP, flags, name, owner); this.type = new JavaType.ClassJavaType(this); this.typeVariableTypes = Lists.newArrayList(); if (owner.isMethodSymbol()) { // declaration of a class or an anonymous class in a method internalName = ((TypeJavaSymbol) owner.owner).registerClassInternalName(name); } else if (owner.isTypeSymbol() && name.isEmpty()) { // anonymous class in a field internalName = ((TypeJavaSymbol) owner).registerClassInternalName(""); } else { internalName = name; } }
public TypeJavaSymbol(int flags, String name, JavaSymbol owner) { super(TYP, flags, name, owner); this.type = new ClassJavaType(this); this.typeVariableTypes = Lists.newArrayList(); if (owner.isMethodSymbol()) { // declaration of a class or an anonymous class in a method internalName = ((TypeJavaSymbol) owner.owner).registerClassInternalName(name); } else if (owner.isTypeSymbol() && name.isEmpty()) { // anonymous class in a field internalName = ((TypeJavaSymbol) owner).registerClassInternalName(""); } else { internalName = name; } }
public TypeParameterDeclaration(JavaSymbol symbol) { super(ASM_API_VERSION); this.symbol = symbol; if(symbol.isTypeSymbol()) { ((JavaSymbol.TypeJavaSymbol) symbol).typeParameters = new Scope(symbol); }else if (symbol.isMethodSymbol()) { ((JavaSymbol.MethodJavaSymbol) symbol).typeParameters = new Scope(symbol); } }
public TypeParameterDeclaration(JavaSymbol symbol) { super(Opcodes.ASM5); this.symbol = symbol; if(symbol.isTypeSymbol()) { ((JavaSymbol.TypeJavaSymbol) symbol).typeParameters = new Scope(symbol); }else if (symbol.isMethodSymbol()) { ((JavaSymbol.MethodJavaSymbol) symbol).typeParameters = new Scope(symbol); } }
public TypeParameterDeclaration(JavaSymbol symbol) { super(ASM_API_VERSION); this.symbol = symbol; if(symbol.isTypeSymbol()) { ((JavaSymbol.TypeJavaSymbol) symbol).typeParameters = new Scope(symbol); }else if (symbol.isMethodSymbol()) { ((JavaSymbol.MethodJavaSymbol) symbol).typeParameters = new Scope(symbol); } }
public String getFullyQualifiedName() { if(fullyQualifiedName == null) { String newQualification = ""; if (owner.isPackageSymbol()) { if (!owner.name.isEmpty()) { newQualification = owner.name + "."; } } else if (owner.isTypeSymbol()) { newQualification = owner.type.fullyQualifiedName() + "$"; } else if (owner.isMethodSymbol()) { newQualification = owner.owner.type().fullyQualifiedName() + "$"; } else { throw new IllegalStateException("" + owner); } fullyQualifiedName = newQualification + getInternalName(); } return fullyQualifiedName; }
public String getFullyQualifiedName() { if (bytecodeName != null) { return bytecodeName; } if(fullyQualifiedName == null) { String newQualification = ""; if (owner.isPackageSymbol()) { if (!owner.name.isEmpty()) { newQualification = owner.name + "."; } } else if (owner.isTypeSymbol()) { newQualification = owner.type.fullyQualifiedName() + "$"; } else if (owner.isMethodSymbol()) { newQualification = owner.owner.type().fullyQualifiedName() + "$"; } else { throw new IllegalStateException("" + owner); } fullyQualifiedName = newQualification + getInternalName(); } return fullyQualifiedName; }
public String getFullyQualifiedName() { if (bytecodeName != null) { return bytecodeName; } if(fullyQualifiedName == null) { String newQualification = ""; if (owner.isPackageSymbol()) { if (!owner.name.isEmpty()) { newQualification = owner.name + "."; } } else if (owner.isTypeSymbol()) { newQualification = owner.type.fullyQualifiedName() + "$"; } else if (owner.isMethodSymbol()) { newQualification = owner.owner.type().fullyQualifiedName() + "$"; } else { throw new IllegalStateException("" + owner); } fullyQualifiedName = newQualification + getInternalName(); } return fullyQualifiedName; }
@Override public void visitFormalTypeParameter(String name) { JavaSymbol.TypeVariableJavaSymbol typeVariableSymbol = new JavaSymbol.TypeVariableJavaSymbol(name, symbol); ((TypeVariableJavaType) typeVariableSymbol.type).bounds = Lists.newArrayList(); if(symbol.isTypeSymbol()) { JavaSymbol.TypeJavaSymbol typeJavaSymbol = (JavaSymbol.TypeJavaSymbol) symbol; typeJavaSymbol.typeParameters.enter(typeVariableSymbol); typeJavaSymbol.addTypeParameter((TypeVariableJavaType) typeVariableSymbol.type); } else if (symbol.isMethodSymbol()) { JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) symbol; methodSymbol.typeParameters.enter(typeVariableSymbol); methodSymbol.addTypeParameter((TypeVariableJavaType) typeVariableSymbol.type); } } }
@Override public void visitFormalTypeParameter(String name) { JavaSymbol.TypeVariableJavaSymbol typeVariableSymbol = new JavaSymbol.TypeVariableJavaSymbol(name, symbol); ((TypeVariableJavaType) typeVariableSymbol.type).bounds = Lists.newArrayList(); if(symbol.isTypeSymbol()) { JavaSymbol.TypeJavaSymbol typeJavaSymbol = (JavaSymbol.TypeJavaSymbol) symbol; typeJavaSymbol.typeParameters.enter(typeVariableSymbol); typeJavaSymbol.addTypeParameter((TypeVariableJavaType) typeVariableSymbol.type); } else if (symbol.isMethodSymbol()) { JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) symbol; methodSymbol.typeParameters.enter(typeVariableSymbol); methodSymbol.addTypeParameter((TypeVariableJavaType) typeVariableSymbol.type); } } }
@Override public void visitFormalTypeParameter(String name) { JavaSymbol.TypeVariableJavaSymbol typeVariableSymbol = new JavaSymbol.TypeVariableJavaSymbol(name, symbol); ((JavaType.TypeVariableJavaType) typeVariableSymbol.type).bounds = Lists.newArrayList(); if(symbol.isTypeSymbol()) { JavaSymbol.TypeJavaSymbol typeJavaSymbol = (JavaSymbol.TypeJavaSymbol) symbol; typeJavaSymbol.typeParameters.enter(typeVariableSymbol); typeJavaSymbol.addTypeParameter((JavaType.TypeVariableJavaType) typeVariableSymbol.type); } else if (symbol.isMethodSymbol()) { JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) symbol; methodSymbol.typeParameters.enter(typeVariableSymbol); methodSymbol.addTypeParameter((JavaType.TypeVariableJavaType) typeVariableSymbol.type); } } }
resolution = resolve.findMethod(methodEnv, identifier.name(), parameterTypes, typeParamTypes); if(resolution != null && returnType != resolution.type() && resolution.symbol().isMethodSymbol()) { MethodJavaType methodType = (MethodJavaType) resolution.type(); if(!methodType.resultType.isTagged(JavaType.DEFERRED)) {
resolution = resolve.findMethod(methodEnv, identifier.name(), parameterTypes, typeParamTypes); if(resolution != null && returnType != resolution.type() && resolution.symbol().isMethodSymbol()) { MethodJavaType methodType = (MethodJavaType) resolution.type(); if(!methodType.resultType.isTagged(JavaType.DEFERRED)) {
private void resolveMethodReference(JavaSymbol.MethodJavaSymbol samMethod, MethodReferenceTreeImpl methodRefTree) { JavaType methodRefType = (JavaType) methodRefTree.symbolType(); JavaType samReturnType = (JavaType) samMethod.returnType().type(); List<JavaType> samMethodArgs = resolve.findSamMethodArgs(methodRefType); if (JavaKeyword.NEW.getValue().equals(methodRefTree.method().name())) { Type constructorType = ((AbstractTypedTree) methodRefTree.expression()).symbolType(); samMethodArgs = addImplicitOuterClassParameter(samMethodArgs, (JavaSymbol.TypeJavaSymbol) constructorType.symbol()); } Resolution resolution = resolve.findMethodReference(semanticModel.getEnv(methodRefTree), samMethodArgs, methodRefTree); JavaSymbol methodSymbol = resolution.symbol(); if (methodSymbol.isMethodSymbol()) { IdentifierTree methodIdentifier = methodRefTree.method(); addMethodRefReference(methodIdentifier, methodSymbol); setMethodRefType(methodRefTree, methodRefType, resolution.type()); JavaType capturedReturnType = resolve.resolveTypeSubstitution(samReturnType, methodRefType); JavaType refinedReturnType = ((MethodJavaType) methodIdentifier.symbolType()).resultType(); if ("<init>".equals(methodSymbol.name)) { refinedReturnType = refinedTypeForConstructor(capturedReturnType, refinedReturnType); } if (refinedReturnType instanceof DeferredType) { ((DeferredType) refinedReturnType).setTree((AbstractTypedTree) methodRefTree.method()); } refineType(methodRefTree, methodRefType, capturedReturnType, refinedReturnType); } else { handleNewArray(methodRefTree, methodRefType, samReturnType); } }
private void resolveMethodReference(JavaSymbol.MethodJavaSymbol samMethod, MethodReferenceTreeImpl methodRefTree) { JavaType methodRefType = (JavaType) methodRefTree.symbolType(); JavaType samReturnType = (JavaType) samMethod.returnType().type(); List<JavaType> samMethodArgs = resolve.findSamMethodArgs(methodRefType); if (JavaKeyword.NEW.getValue().equals(methodRefTree.method().name())) { Type constructorType = ((AbstractTypedTree) methodRefTree.expression()).symbolType(); samMethodArgs = addImplicitOuterClassParameter(samMethodArgs, (JavaSymbol.TypeJavaSymbol) constructorType.symbol()); } Resolution resolution = resolve.findMethodReference(semanticModel.getEnv(methodRefTree), samMethodArgs, methodRefTree); JavaSymbol methodSymbol = resolution.symbol(); if (methodSymbol.isMethodSymbol()) { IdentifierTree methodIdentifier = methodRefTree.method(); addMethodRefReference(methodIdentifier, methodSymbol); setMethodRefType(methodRefTree, methodRefType, resolution.type()); JavaType capturedReturnType = resolve.resolveTypeSubstitution(samReturnType, methodRefType); JavaType refinedReturnType = ((MethodJavaType) methodIdentifier.symbolType()).resultType(); if ("<init>".equals(methodSymbol.name)) { refinedReturnType = refinedTypeForConstructor(capturedReturnType, refinedReturnType); } if (refinedReturnType instanceof DeferredType) { ((DeferredType) refinedReturnType).setTree((AbstractTypedTree) methodRefTree.method()); } refineType(methodRefTree, methodRefType, capturedReturnType, refinedReturnType); } else { handleNewArray(methodRefTree, methodRefType, samReturnType); } }