Ignore:
Timestamp:
06/28/13 11:56:03 (11 years ago)
Author:
psniegowski
Message:

HIGHLIGHTS:

  • FramsClass? and contained Param are now immutable classes (like String),

which allows to refer to them concurrently without synchronization
(which for example in turn simplifies GUI management)

  • also make Path immutable (which was earlier only assumed)
  • add global cache for FramsClasses? created solely and automatically

on base of Java classes.

representations basing on given FramsClass?

  • above changes greatly improved GUI responsivness during browsing
  • furtherly improve Param class hierarchy
  • allow to inject actions on state changes into MultiParamLoader?
  • add more tests

CHANGELOG:

Add StatusListener? to MultiParamLoader?.

Minor refactorization in MultiParamLoader?.

First step with auto append.

Add SchemaTest?.

Improve Registry.

Clean up in Registry.

Work out Registry.

Use annotations for Param.

Fix ListChange?.

Improve fluent interface of the FramsClassBuilder?.

Done caching of ReflectionAccess?.Backend

Fix hashCode of Pair.

A step on a way to cache ReflectionAccess?.Backend

Make SimpleAbstractAccess?.framsClass a final field.

Add static cache for FramsClasses? based on java.

Only classes created strictly and automatically
based on java classes are using this cache.

Make all Params immutable.

Many improvement to make Param immutable.

Make PrimitiveParam? generic type.

Several changes to make Param immutable.

Make FramsClass? immutable.

Another improvement to Path immutability.

Several improvements to Path.

Improve PathTest?.

Configurarable MutabilityDetector?.

Location:
java/main/src/main/java/com/framsticks/params/types
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • java/main/src/main/java/com/framsticks/params/types/ArrayListParam.java

    r84 r87  
    44import com.framsticks.params.ArrayListAccess;
    55import com.framsticks.params.CastFailure;
     6import com.framsticks.params.ParamBuilder;
    67import com.framsticks.params.ReassignResult;
    78import com.framsticks.util.lang.Casting;
     
    1213import java.util.List;
    1314
     15import javax.annotation.concurrent.Immutable;
     16
    1417/**
    1518 * @author Piotr Sniegowski
    1619 */
     20@Immutable
    1721public class ArrayListParam extends ListParam {
    1822
    19         public ArrayListParam(String containedTypeName) {
    20                 super(containedTypeName);
     23        public ArrayListParam(ParamBuilder builder) {
     24                super(builder);
    2125        }
    2226
  • java/main/src/main/java/com/framsticks/params/types/BinaryParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.PrimitiveParam;
    56import com.framsticks.params.ReassignResult;
    67import com.framsticks.util.lang.Numbers;
    78
     9import javax.annotation.concurrent.Immutable;
     10
    811/**
    912 * @author Piotr Sniegowski
    1013 */
    11 public class BinaryParam extends PrimitiveParam {
     14@Immutable
     15public class BinaryParam extends PrimitiveParam<Integer> {
     16
     17        /**
     18         * @param builder
     19         */
     20        public BinaryParam(ParamBuilder builder) {
     21                super(builder);
     22        }
    1223
    1324        @Override
  • java/main/src/main/java/com/framsticks/params/types/BooleanParam.java

    r84 r87  
    11package com.framsticks.params.types;
    22
     3import javax.annotation.concurrent.Immutable;
     4
    35import com.framsticks.params.CastFailure;
     6import com.framsticks.params.ParamBuilder;
    47import com.framsticks.params.PrimitiveParam;
    58import com.framsticks.params.ReassignResult;
     
    1013 * @author Piotr Sniegowski
    1114 */
    12 public class BooleanParam extends PrimitiveParam {
     15@Immutable
     16public class BooleanParam extends PrimitiveParam<Boolean> {
    1317
    14         public BooleanParam() {
    15                 def = false;
     18        /**
     19         * @param builder
     20         */
     21        public BooleanParam(ParamBuilder builder) {
     22                super(builder.defaultDef(false));
    1623        }
    1724
  • java/main/src/main/java/com/framsticks/params/types/ColorParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.PrimitiveParam;
    56import com.framsticks.params.ReassignResult;
     7
     8import javax.annotation.concurrent.Immutable;
    69
    710/**
    811 * @author Piotr Sniegowski
    912 */
    10 public class ColorParam extends PrimitiveParam {
     13@Immutable
     14public class ColorParam extends PrimitiveParam<Object> {
     15
     16
     17
     18        /**
     19         * @param builder
     20         */
     21        public ColorParam(ParamBuilder builder) {
     22                super(builder);
     23        }
    1124
    1225        @Override
  • java/main/src/main/java/com/framsticks/params/types/DecimalParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.ReassignResult;
     6
     7import javax.annotation.concurrent.Immutable;
    58
    69/**
    710 * @author Piotr Sniegowski
    811 */
     12@Immutable
    913public class DecimalParam extends NumberParam<Integer> {
    1014
    11         public DecimalParam() {
    12                 def = 0;
     15        /**
     16         * @param builder
     17         */
     18        public DecimalParam(ParamBuilder builder) {
     19                super(builder.defaultDef(0));
    1320        }
    1421
  • java/main/src/main/java/com/framsticks/params/types/EnumParam.java

    r84 r87  
    33import java.util.List;
    44
     5import com.framsticks.params.ParamBuilder;
     6
     7import javax.annotation.concurrent.Immutable;
     8
    59/**
    610 * @author Piotr Sniegowski
    711 */
     12@Immutable
    813public class EnumParam extends DecimalParam {
    914
    10         List<String> enums;
     15
     16        protected final List<String> enums;
    1117
    1218        /**
     
    1521         * @param enums
    1622         */
    17         public EnumParam(List<String> enums) {
    18                 assert(enums != null);
    19                 this.enums = enums;
     23        public EnumParam(ParamBuilder builder) {
     24                super(builder);
     25                this.enums = builder.getEnumValues();
     26                assert(this.enums != null);
    2027        }
    2128
  • java/main/src/main/java/com/framsticks/params/types/EventParam.java

    r84 r87  
    22
    33import com.framsticks.params.Param;
     4import com.framsticks.params.ParamBuilder;
     5
     6import javax.annotation.concurrent.Immutable;
    47
    58/**
    69 * @author Piotr Sniegowski
    710 */
     11@Immutable
    812public class EventParam extends Param {
     13
     14
     15
     16        /**
     17         * @param builder
     18         */
     19        public EventParam(ParamBuilder builder) {
     20                super(builder);
     21        }
    922
    1023        @Override
  • java/main/src/main/java/com/framsticks/params/types/FloatParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.ReassignResult;
     6
     7import javax.annotation.concurrent.Immutable;
    58
    69/**
    710 * @author Piotr Sniegowski
    811 */
     12@Immutable
    913public class FloatParam extends NumberParam<Double> {
    1014
    11         public FloatParam() {
    12                 def = 0.0;
     15        /**
     16         * @param builder
     17         */
     18        public FloatParam(ParamBuilder builder) {
     19                super(builder.defaultDef(0.0));
    1320        }
    1421
  • java/main/src/main/java/com/framsticks/params/types/ListParam.java

    r84 r87  
    22
    33import com.framsticks.params.CompositeParam;
     4import com.framsticks.params.ParamBuilder;
     5
     6import javax.annotation.concurrent.Immutable;
    47
    58/**
    69 * @author Piotr Sniegowski
    710 */
     11@Immutable
    812public abstract class ListParam extends CompositeParam {
    913
    10         public ListParam(String containedTypeName) {
    11                 super(containedTypeName);
     14        public ListParam(ParamBuilder builder) {
     15                super(builder);
    1216        }
    1317
  • java/main/src/main/java/com/framsticks/params/types/NumberParam.java

    r84 r87  
    33import com.framsticks.params.CastFailure;
    44import com.framsticks.params.Flags;
     5import com.framsticks.params.ParamBuilder;
    56import com.framsticks.params.PrimitiveParam;
    67import com.framsticks.params.ReassignResult;
     
    89import com.framsticks.util.lang.Numbers;
    910
     11import javax.annotation.concurrent.Immutable;
     12
    1013/**
    1114 * @author Piotr Sniegowski
    1215 */
    13 public abstract class NumberParam<T extends Number & Comparable<T>> extends PrimitiveParam {
     16@Immutable
     17public abstract class NumberParam<T extends Number & Comparable<T>> extends PrimitiveParam<T> {
     18
     19        /**
     20         * @param builder
     21         */
     22        public NumberParam(ParamBuilder builder) {
     23                super(builder);
     24        }
    1425
    1526        @Override
     
    2132                T v = null;
    2233                if (newValue instanceof String) {
    23                         v = Numbers.parse((String)newValue, type);
     34                        v = Numbers.parse((String) newValue, type);
    2435                } else {
    2536                        v = Casting.tryCast(type, newValue);
  • java/main/src/main/java/com/framsticks/params/types/ObjectParam.java

    r84 r87  
    44import com.framsticks.params.CastFailure;
    55import com.framsticks.params.CompositeParam;
     6import com.framsticks.params.ParamBuilder;
    67import com.framsticks.params.ReassignResult;
     8
     9import javax.annotation.concurrent.Immutable;
    710
    811/**
    912 * @author Piotr Sniegowski
    1013 */
     14@Immutable
    1115public class ObjectParam extends CompositeParam {
    1216
    13         public ObjectParam(String containedTypeName) {
    14                 super(containedTypeName);
     17        public ObjectParam(ParamBuilder builder) {
     18                super(builder);
    1519        }
    1620
  • java/main/src/main/java/com/framsticks/params/types/ProcedureParam.java

    r85 r87  
    22
    33import com.framsticks.params.Param;
     4import com.framsticks.params.ParamBuilder;
     5import com.framsticks.util.FramsticksException;
    46import com.framsticks.util.lang.Strings;
    57
     
    911import java.util.regex.Pattern;
    1012
     13import javax.annotation.concurrent.Immutable;
     14
    1115/**
    1216 * @author Piotr Sniegowski
    1317 */
     18@Immutable
    1419public class ProcedureParam extends Param {
    15         private Param resultType;
    16         private List<Param> argumentsType = new ArrayList<Param>();
     20        private final Param resultType;
     21        private final List<Param> argumentsType = new ArrayList<Param>();
    1722
    1823        private static Pattern addressPattern = Pattern.compile("^([^\\(]+)?\\(([^\\)]*)\\)$");
     24
     25        /**
     26         * @param builder
     27         */
     28        public ProcedureParam(ParamBuilder builder) {
     29                super(builder);
     30                String signature = builder.getProcedureSignature();
     31                if (Strings.notEmpty(signature)) {
     32                        Matcher matcher = addressPattern.matcher(signature);
     33                        if (!matcher.matches()) {
     34                                throw new FramsticksException().msg("invalid signature");
     35                        }
     36                        String result = Strings.collapse(matcher.group(1));
     37                        resultType = (result != null) ? parseType(result, null) : null;
     38                        String arguments = matcher.group(2);
     39                        if (!Strings.notEmpty(arguments)) {
     40                                return;
     41                        }
     42                        for (String a : arguments.split(",")) {
     43                                int space = a.indexOf(' ');
     44                                String type;
     45                                String name;
     46                                if (space == -1) {
     47                                        type = a;
     48                                        name = null;
     49                                } else {
     50                                        type = a.substring(0, space);
     51                                        name = a.substring(space + 1);
     52                                }
     53                                argumentsType.add(parseType(type, name));
     54                        }
     55                } else {
     56                        resultType = null;
     57                }
     58        }
    1959
    2060        protected static Param parseType(String type, String name) {
    2161                return Param.build().type(type).name(name).finish();
    2262        }
    23 
    24         public void parseSignature(String signature) throws Exception {
    25                 if (!Strings.notEmpty(signature)) {
    26                         return;
    27                 }
    28                 Matcher matcher = addressPattern.matcher(signature);
    29                 if (!matcher.matches()) {
    30                         throw new Exception("invalid signature");
    31                 }
    32                 String result = Strings.collapse(matcher.group(1));
    33                 if (result != null) {
    34                         resultType = parseType(result, null);
    35                 }
    36                 String arguments = matcher.group(2);
    37                 if (!Strings.notEmpty(arguments)) {
    38                         return;
    39                 }
    40                 for (String a : arguments.split(",")) {
    41                         int space = a.indexOf(' ');
    42                         String type;
    43                         String name;
    44                         if (space == -1) {
    45                                 type = a;
    46                                 name = null;
    47                         } else {
    48                                 type = a.substring(0, space);
    49                                 name = a.substring(space + 1);
    50                         }
    51                         argumentsType.add(parseType(type, name));
    52                 }
    53         }
    54 
    5563
    5664        @Override
  • java/main/src/main/java/com/framsticks/params/types/StringParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.PrimitiveParam;
    56import com.framsticks.params.ReassignResult;
    67import com.framsticks.params.SinkInterface;
    78
     9import javax.annotation.concurrent.Immutable;
     10
    811/**
    912 * @author Piotr Sniegowski
    1013 */
    11 public class StringParam extends PrimitiveParam {
     14@Immutable
     15public class StringParam extends PrimitiveParam<String> {
     16
     17
     18
     19        /**
     20         * @param builder
     21         */
     22        public StringParam(ParamBuilder builder) {
     23                super(builder);
     24        }
     25
    1226        @Override
    1327        public Class<?> getStorageType() {
  • java/main/src/main/java/com/framsticks/params/types/UniqueListParam.java

    r84 r87  
    33import com.framsticks.params.AccessInterface;
    44import com.framsticks.params.CastFailure;
     5import com.framsticks.params.ParamBuilder;
    56import com.framsticks.params.ReassignResult;
    67import com.framsticks.params.UniqueListAccess;
     
    1011import java.util.Map;
    1112
     13import javax.annotation.concurrent.Immutable;
     14
    1215/**
    1316 * @author Piotr Sniegowski
    1417 */
     18@Immutable
    1519public class UniqueListParam extends ListParam {
    1620
    1721        final String uidName;
    1822
    19         public UniqueListParam(String containedTypeName, String uidName) {
    20                 super(containedTypeName);
    21                 this.uidName = uidName;
     23        public UniqueListParam(ParamBuilder builder) {
     24                super(builder);
     25                this.uidName = builder.getUid();
    2226        }
    2327
  • java/main/src/main/java/com/framsticks/params/types/UniversalParam.java

    r84 r87  
    22
    33import com.framsticks.params.CastFailure;
     4import com.framsticks.params.ParamBuilder;
    45import com.framsticks.params.PrimitiveParam;
    56import com.framsticks.params.ReassignResult;
     7
     8import javax.annotation.concurrent.Immutable;
    69
    710/**
    811 * @author Piotr Sniegowski
    912 */
    10 public class UniversalParam extends PrimitiveParam {
     13@Immutable
     14public class UniversalParam extends PrimitiveParam<Object> {
     15
     16
     17        /**
     18         * @param builder
     19         */
     20        public UniversalParam(ParamBuilder builder) {
     21                super(builder);
     22        }
     23
    1124        @Override
    1225        public Class<?> getStorageType() {
Note: See TracChangeset for help on using the changeset viewer.