コード例 #1
0
 private void defineClassField(FieldDeclarationNode fieldDeclaration, TypeBuilder typeBuilder) {
     var type = CompilerHelper.resolveTypeReference(context, typeBuilder.PackageName, fieldDeclaration.Type);
     foreach (var decl in fieldDeclaration.Declarators) {
         var name = context.getIdentifier(decl.NameOffset, decl.NameLength);
         if (typeBuilder.getField(name) != null) {
             context.addError(CompileErrorId.AlreadyDefinedField, fieldDeclaration,
                 BytecodeHelper.getDisplayName(typeBuilder), name);
         }
         var fieldBuilder = typeBuilder.defineField(name, type);
         decl.addUserData(fieldBuilder);
         setFieldModifiers(fieldDeclaration, fieldBuilder);
     }
 }
コード例 #2
0
 private void defineEnumConstant(EnumConstantDeclarationNode enumConstant, TypeBuilder typeBuilder) {
     var name = context.getIdentifier(enumConstant.NameOffset, enumConstant.NameLength);
     if (typeBuilder.getField(name) != null) {
         context.addError(CompileErrorId.AlreadyDefinedField, enumConstant,
             BytecodeHelper.getDisplayName(typeBuilder), name);
     }
     var fieldBuilder = typeBuilder.defineField(name, typeBuilder);
     enumConstant.addUserData(fieldBuilder);
     fieldBuilder.setEnum(true);
     fieldBuilder.setPublic(true);
     fieldBuilder.setStatic(true);
     fieldBuilder.setFinal(true);
 }
コード例 #3
0
		private static void declareType(TypeInfo type, Library targetTypeSystem, TypeBuilder clone, Scope<String, TypeInfo> genericArgs) {
			if (type.IsSynthetic) {
				return;
			}
			
			genericArgs.enterScope();
			foreach (var ga in clone.GenericArguments) {
				genericArgs.declareBinding(ga.FullName, ga);
			}
	
			clone.setBaseType(getType(targetTypeSystem, type.BaseType, genericArgs));
			
			foreach (var t in type.Interfaces) {
				clone.addInterface(getType(targetTypeSystem, t, genericArgs));
			}
	
			foreach (var av in type.Annotations) {
				var avb = clone.addAnnotation(getType(targetTypeSystem, av.Type, genericArgs), av.IsRuntimeVisible);
				cloneAnnotationValue(av, targetTypeSystem, avb, genericArgs);
			}
			
			foreach (var f in type.Fields.where(p => !p.IsSynthetic && !p.IsPrivate)) {
				var fb = clone.defineField(f.Name, getType(targetTypeSystem, f.Type, genericArgs));
				fb.setEnum(f.IsEnum);
				fb.setFinal(f.IsFinal);
				fb.setProtected(f.IsProtected);
				fb.setPublic(f.IsPublic);
				fb.setStatic(f.IsStatic);
				fb.setTransient(f.IsTransient);
				fb.setVolatile(f.IsVolatile);
				
				fb.setValue(f.Value);
				
				foreach (var av in f.getAnnotations()) {
					var avb = fb.addAnnotation(getType(targetTypeSystem, av.Type, genericArgs), av.IsRuntimeVisible);
					cloneAnnotationValue(av, targetTypeSystem, avb, genericArgs);
				}
			}
	
			foreach (var m in type.Methods.where(p => !p.IsSynthetic && !p.IsPrivate)) {
				var mb = clone.defineMethod(m.Name);
				mb.setAbstract(m.IsAbstract);
				mb.setBridge(m.IsBridge);
				mb.setFinal(m.IsFinal);
				mb.setNative(m.IsNative);
				mb.setProtected(m.IsProtected);
				mb.setPublic(m.IsPublic);
				mb.setStatic(m.IsStatic);
				mb.setStrict(m.IsStrict);
				mb.setSynchronized(m.IsSynchronized);
				mb.setVarargs(m.IsVarargs);
				
				foreach (var av in m.Annotations) {
					var avb = mb.addAnnotation(getType(targetTypeSystem, av.Type, genericArgs), av.IsRuntimeVisible);
					cloneAnnotationValue(av, targetTypeSystem, avb, genericArgs);
				}
				
				genericArgs.enterScope();
				foreach (var ga in m.GenericArguments) {
					var t = mb.addGenericArgument(ga.FullName);
					genericArgs.declareBinding(t.FullName, t);
				}
				
				mb.setReturnType(getType(targetTypeSystem, m.ReturnType, genericArgs));
				foreach (var p in m.Parameters) {
					var pb = mb.addParameter(getType(targetTypeSystem, p.Type, genericArgs));
					pb.setName(p.Name);
				}
				genericArgs.leaveScope();
			}
			
			foreach (var nt in type.NestedTypes) {
				declareType(nt, targetTypeSystem, (TypeBuilder)clone.getNestedType(nt.Name), genericArgs);
			}
			
			genericArgs.leaveScope();
		}