codemodels-java 0.2.0-java → 0.2.1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/codemodels-java.gemspec +7 -1
- data/lib/codemodels/java/metamodel.rb +3 -27
- data/lib/codemodels/java/parser.rb +96 -57
- data/test/test_correspondences.rb +6 -6
- metadata +18 -24
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b06ac029279927c74e5175f4f4b668a5fdb8134a
|
4
|
+
data.tar.gz: 0bab5abbae5b8f7a930485abbcd98f780a66fd7a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f2d88bbe3cdf97388ce6fff2cb470a56f8b76ec1027e2a5218888b2bb92e1f826882d16a7766adf7cf34b2b9fcc4bb3e22ff96af442eb15445557df1f594afae
|
7
|
+
data.tar.gz: 4574567f38bdd8d620e7802b16eb5239bd2f13224d031d5c3df008038c3454bd86a4ade0c7a6ba3a4f50ac24d5c6e5a951051fdb4607c897b0c1eca7ca4202a0
|
data/codemodels-java.gemspec
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'codemodels/java/version'
|
5
|
+
|
1
6
|
Gem::Specification.new do |s|
|
2
7
|
s.platform = 'java'
|
3
8
|
s.name = 'codemodels-java'
|
4
|
-
s.version =
|
9
|
+
s.version = CodeModels::Java::VERSION
|
5
10
|
s.date = '2013-09-11'
|
6
11
|
s.summary = "Plugin of codemodels to build models from Ruby code."
|
7
12
|
s.description = "Plugin of codemodels to build models from Ruby code. See http://github.com/ftomassetti/codemodels."
|
@@ -15,6 +20,7 @@ Gem::Specification.new do |s|
|
|
15
20
|
s.require_paths = ["lib"] + Dir['./lib/jars/*.jar']
|
16
21
|
|
17
22
|
s.add_runtime_dependency 'codemodels'
|
23
|
+
s.add_runtime_dependency 'codemodels-javaparserwrapper'
|
18
24
|
s.add_runtime_dependency 'json'
|
19
25
|
|
20
26
|
s.add_development_dependency "bundler", "~> 1.3"
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rgen/metamodel_builder'
|
2
2
|
require 'java'
|
3
3
|
require 'codemodels'
|
4
|
+
require 'codemodels/javaparserwrapper'
|
4
5
|
|
5
6
|
module CodeModels
|
6
7
|
module Java
|
7
8
|
|
8
|
-
class JavaNode <
|
9
|
+
class JavaNode < CodeModelsAstNode
|
9
10
|
end
|
10
11
|
|
11
12
|
JavaString = ::Java::JavaClass.for_name("java.lang.String")
|
@@ -34,7 +35,7 @@ module Java
|
|
34
35
|
c = Class.new(super_class)
|
35
36
|
raise "Already mapped! #{ast_name}" if MappedAstClasses[java_class]
|
36
37
|
MappedAstClasses[java_class] = c
|
37
|
-
Java.const_set simple_java_class_name(ast_class), c
|
38
|
+
Java.const_set CodeModels::Javaparserwrapper::Utils.simple_java_class_name(ast_class), c
|
38
39
|
end
|
39
40
|
|
40
41
|
# then add all the properties and attributes
|
@@ -81,25 +82,6 @@ module Java
|
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
84
|
-
def self.get_corresponding_metaclass(node)
|
85
|
-
node_class = node.class
|
86
|
-
name = simple_java_class_name(node_class)
|
87
|
-
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
88
|
-
#puts "node.class: #{node.class}"
|
89
|
-
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
90
|
-
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
91
|
-
# ObjectCreationExpr has not interface? but it is always a method definition
|
92
|
-
name = 'ClassMethodDeclaration'
|
93
|
-
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
94
|
-
name = 'ClassMethodDeclaration'
|
95
|
-
elsif node.parent.interface?
|
96
|
-
name = 'InterfaceMethodDeclaration'
|
97
|
-
else
|
98
|
-
name = 'ClassMethodDeclaration'
|
99
|
-
end
|
100
|
-
end
|
101
|
-
return Java.const_get(name)
|
102
|
-
end
|
103
85
|
|
104
86
|
PROP_ADAPTERS = Hash.new {|h,k| h[k] = {} }
|
105
87
|
|
@@ -110,12 +92,6 @@ module Java
|
|
110
92
|
return java_method.name.remove_prefix('is').proper_uncapitalize if java_method.name.start_with?('is')
|
111
93
|
end
|
112
94
|
|
113
|
-
def self.simple_java_class_name(java_class)
|
114
|
-
name = java_class.name
|
115
|
-
if (i = (r = name).rindex(':')) then r[0..i] = '' end
|
116
|
-
r
|
117
|
-
end
|
118
|
-
|
119
95
|
def self.get_generic_param(generic_str)
|
120
96
|
return generic_str.remove_prefix('public java.util.List<') if generic_str.start_with?('public java.util.List<')
|
121
97
|
return generic_str.remove_prefix('public final java.util.List<') if generic_str.start_with?('public final java.util.List<')
|
@@ -1,82 +1,121 @@
|
|
1
1
|
require 'codemodels'
|
2
|
+
require 'codemodels/javaparserwrapper'
|
2
3
|
|
3
4
|
module CodeModels
|
4
5
|
module Java
|
5
6
|
|
6
|
-
class
|
7
|
-
|
8
|
-
|
7
|
+
class Parser < CodeModels::Javaparserwrapper::ParserJavaWrapper
|
8
|
+
|
9
|
+
class MyBasicTransformationFactory < CodeModels::Javaparserwrapper::BasicTransformationFactory
|
10
|
+
|
11
|
+
def get_corresponding_class(node)
|
12
|
+
node_class = node.class
|
13
|
+
name = CodeModels::Javaparserwrapper::Utils.simple_java_class_name(node_class)
|
14
|
+
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
15
|
+
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
16
|
+
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
17
|
+
name = 'ClassMethodDeclaration'
|
18
|
+
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
19
|
+
name = 'ClassMethodDeclaration'
|
20
|
+
elsif node.parent.interface?
|
21
|
+
name = 'InterfaceMethodDeclaration'
|
22
|
+
else
|
23
|
+
name = 'ClassMethodDeclaration'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
return Java.const_get(name)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
9
30
|
|
10
|
-
java_import 'japa.parser.JavaParser'
|
11
|
-
java_import 'java.io.FileInputStream'
|
12
|
-
java_import 'java.io.ByteArrayInputStream'
|
31
|
+
java_import 'japa.parser.JavaParser'
|
32
|
+
java_import 'java.io.FileInputStream'
|
33
|
+
java_import 'java.io.ByteArrayInputStream'
|
13
34
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
children.each_with_index do |c,i|
|
19
|
-
return i if c==node
|
20
|
-
end
|
21
|
-
raise "Not found"
|
22
|
-
else
|
23
|
-
raise "Not found" unless children==node
|
24
|
-
0
|
35
|
+
def initialize()
|
36
|
+
super
|
37
|
+
@transformer.factory = MyBasicTransformationFactory.new
|
38
|
+
@transformer.factory.target_module = CodeModels::Java
|
25
39
|
end
|
26
|
-
end
|
27
40
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
41
|
+
def containment_pos(node)
|
42
|
+
container = node.eContainer
|
43
|
+
children = node.eContainer.send(node.eContainingFeature)
|
44
|
+
if children.respond_to?(:each)
|
45
|
+
children.each_with_index do |c,i|
|
46
|
+
return i if c==node
|
47
|
+
end
|
48
|
+
raise "Not found"
|
49
|
+
else
|
50
|
+
raise "Not found" unless children==node
|
51
|
+
0
|
52
|
+
end
|
40
53
|
end
|
41
|
-
end
|
42
54
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
55
|
+
# node tree contains the original
|
56
|
+
def corresponding_node(model_element,node_tree)
|
57
|
+
return node_tree unless model_element.eContainer
|
58
|
+
corresponding_parent_node = corresponding_node(model_element.eContainer,node_tree)
|
59
|
+
containment_pos = containment_pos(model_element)
|
60
|
+
containing_feat = model_element.eContainingFeature
|
61
|
+
|
62
|
+
children = corresponding_parent_node.send(containing_feat)
|
63
|
+
if children.respond_to?(:each)
|
64
|
+
children[containment_pos]
|
65
|
+
else
|
66
|
+
children
|
67
|
+
end
|
68
|
+
end
|
49
69
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
70
|
+
def node_tree_from_code(code)
|
71
|
+
sis = ByteArrayInputStream.new(code.to_java_bytes)
|
72
|
+
node_tree = JavaParser.parse(sis)
|
73
|
+
sis.close
|
74
|
+
node_tree
|
75
|
+
end
|
56
76
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
77
|
+
def corresponding_node_from_code(model_element,code)
|
78
|
+
sis = ByteArrayInputStream.new(code.to_java_bytes)
|
79
|
+
node_tree = JavaParser.parse(sis)
|
80
|
+
sis.close
|
81
|
+
corresponding_node(model_element,node_tree)
|
82
|
+
end
|
60
83
|
|
61
|
-
|
84
|
+
def parse_code(code)
|
85
|
+
node_to_model(node_tree_from_code(code))
|
86
|
+
end
|
62
87
|
|
63
|
-
def
|
64
|
-
|
88
|
+
def get_corresponding_metaclass(node)
|
89
|
+
node_class = node.class
|
90
|
+
name = CodeModels::Javaparserwrapper::Utils.simple_java_class_name(node_class)
|
91
|
+
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
92
|
+
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
93
|
+
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
94
|
+
name = 'ClassMethodDeclaration'
|
95
|
+
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
96
|
+
name = 'ClassMethodDeclaration'
|
97
|
+
elsif node.parent.interface?
|
98
|
+
name = 'InterfaceMethodDeclaration'
|
99
|
+
else
|
100
|
+
name = 'ClassMethodDeclaration'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
return Java.const_get(name)
|
65
104
|
end
|
66
105
|
|
67
|
-
|
106
|
+
private
|
68
107
|
|
69
|
-
|
108
|
+
def adapter_specific_class(model_class,ref)
|
109
|
+
return nil unless CodeModels::Java::PROP_ADAPTERS[model_class]
|
110
|
+
CodeModels::Java::PROP_ADAPTERS[model_class][ref.name]
|
111
|
+
end
|
70
112
|
|
71
|
-
def self.parse_file(path)
|
72
|
-
DefaultParser.parse_file(path)
|
73
113
|
end
|
74
114
|
|
75
|
-
|
115
|
+
DefaultParser = Parser.new
|
76
116
|
|
77
|
-
def self.
|
78
|
-
|
79
|
-
CodeModels::Java::PROP_ADAPTERS[model_class][ref.name]
|
117
|
+
def self.parse_code(code)
|
118
|
+
DefaultParser.parse_code(code)
|
80
119
|
end
|
81
120
|
|
82
121
|
end
|
@@ -10,22 +10,22 @@ class TestCorrespondences < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def test_correspondance_of_field
|
12
12
|
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
13
|
-
nt = J.node_tree_from_code(code)
|
13
|
+
nt = J::DefaultParser.node_tree_from_code(code)
|
14
14
|
mt = J.parse_code(code)
|
15
15
|
model_field = mt.types[0].members[0]
|
16
16
|
node_field = nt.types[0].members[0]
|
17
|
-
assert_equal node_field, J.corresponding_node(model_field,nt)
|
18
|
-
assert_equal "int fieldB;", J.corresponding_node(model_field,nt).to_s
|
17
|
+
assert_equal node_field, J::DefaultParser.corresponding_node(model_field,nt)
|
18
|
+
assert_equal "int fieldB;", J::DefaultParser.corresponding_node(model_field,nt).to_s
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_corresponding_node_from_code
|
22
22
|
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
23
|
-
nt = J.node_tree_from_code(code)
|
23
|
+
nt = J::DefaultParser.node_tree_from_code(code)
|
24
24
|
mt = J.parse_code(code)
|
25
25
|
model_field = mt.types[0].members[0]
|
26
26
|
node_field = nt.types[0].members[0]
|
27
|
-
assert_equal node_field, J.corresponding_node_from_code(model_field,code)
|
28
|
-
assert_equal "int fieldB;", J.corresponding_node_from_code(model_field,code).to_s
|
27
|
+
assert_equal node_field, J::DefaultParser.corresponding_node_from_code(model_field,code)
|
28
|
+
assert_equal "int fieldB;", J::DefaultParser.corresponding_node_from_code(model_field,code).to_s
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codemodels-java
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.2.0
|
4
|
+
version: 0.2.1
|
6
5
|
platform: java
|
7
6
|
authors:
|
8
7
|
- Federico Tomassetti
|
@@ -18,13 +17,25 @@ dependencies:
|
|
18
17
|
- - '>='
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '0'
|
21
|
-
none: false
|
22
20
|
requirement: !ruby/object:Gem::Requirement
|
23
21
|
requirements:
|
24
22
|
- - '>='
|
25
23
|
- !ruby/object:Gem::Version
|
26
24
|
version: '0'
|
27
|
-
|
25
|
+
prerelease: false
|
26
|
+
type: :runtime
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: codemodels-javaparserwrapper
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
28
39
|
prerelease: false
|
29
40
|
type: :runtime
|
30
41
|
- !ruby/object:Gem::Dependency
|
@@ -34,13 +45,11 @@ dependencies:
|
|
34
45
|
- - '>='
|
35
46
|
- !ruby/object:Gem::Version
|
36
47
|
version: '0'
|
37
|
-
none: false
|
38
48
|
requirement: !ruby/object:Gem::Requirement
|
39
49
|
requirements:
|
40
50
|
- - '>='
|
41
51
|
- !ruby/object:Gem::Version
|
42
52
|
version: '0'
|
43
|
-
none: false
|
44
53
|
prerelease: false
|
45
54
|
type: :runtime
|
46
55
|
- !ruby/object:Gem::Dependency
|
@@ -50,13 +59,11 @@ dependencies:
|
|
50
59
|
- - ~>
|
51
60
|
- !ruby/object:Gem::Version
|
52
61
|
version: '1.3'
|
53
|
-
none: false
|
54
62
|
requirement: !ruby/object:Gem::Requirement
|
55
63
|
requirements:
|
56
64
|
- - ~>
|
57
65
|
- !ruby/object:Gem::Version
|
58
66
|
version: '1.3'
|
59
|
-
none: false
|
60
67
|
prerelease: false
|
61
68
|
type: :development
|
62
69
|
- !ruby/object:Gem::Dependency
|
@@ -66,13 +73,11 @@ dependencies:
|
|
66
73
|
- - '>='
|
67
74
|
- !ruby/object:Gem::Version
|
68
75
|
version: '0'
|
69
|
-
none: false
|
70
76
|
requirement: !ruby/object:Gem::Requirement
|
71
77
|
requirements:
|
72
78
|
- - '>='
|
73
79
|
- !ruby/object:Gem::Version
|
74
80
|
version: '0'
|
75
|
-
none: false
|
76
81
|
prerelease: false
|
77
82
|
type: :development
|
78
83
|
- !ruby/object:Gem::Dependency
|
@@ -82,13 +87,11 @@ dependencies:
|
|
82
87
|
- - '>='
|
83
88
|
- !ruby/object:Gem::Version
|
84
89
|
version: '0'
|
85
|
-
none: false
|
86
90
|
requirement: !ruby/object:Gem::Requirement
|
87
91
|
requirements:
|
88
92
|
- - '>='
|
89
93
|
- !ruby/object:Gem::Version
|
90
94
|
version: '0'
|
91
|
-
none: false
|
92
95
|
prerelease: false
|
93
96
|
type: :development
|
94
97
|
- !ruby/object:Gem::Dependency
|
@@ -98,13 +101,11 @@ dependencies:
|
|
98
101
|
- - '>='
|
99
102
|
- !ruby/object:Gem::Version
|
100
103
|
version: '0'
|
101
|
-
none: false
|
102
104
|
requirement: !ruby/object:Gem::Requirement
|
103
105
|
requirements:
|
104
106
|
- - '>='
|
105
107
|
- !ruby/object:Gem::Version
|
106
108
|
version: '0'
|
107
|
-
none: false
|
108
109
|
prerelease: false
|
109
110
|
type: :development
|
110
111
|
description: Plugin of codemodels to build models from Ruby code. See http://github.com/ftomassetti/codemodels.
|
@@ -143,6 +144,7 @@ files:
|
|
143
144
|
homepage: https://github.com/ftomassetti/java-lightmodels
|
144
145
|
licenses:
|
145
146
|
- APACHE2
|
147
|
+
metadata: {}
|
146
148
|
post_install_message:
|
147
149
|
rdoc_options: []
|
148
150
|
require_paths:
|
@@ -152,25 +154,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
154
|
requirements:
|
153
155
|
- - '>='
|
154
156
|
- !ruby/object:Gem::Version
|
155
|
-
segments:
|
156
|
-
- 0
|
157
|
-
hash: 2
|
158
157
|
version: '0'
|
159
|
-
none: false
|
160
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
159
|
requirements:
|
162
160
|
- - '>='
|
163
161
|
- !ruby/object:Gem::Version
|
164
|
-
segments:
|
165
|
-
- 0
|
166
|
-
hash: 2
|
167
162
|
version: '0'
|
168
|
-
none: false
|
169
163
|
requirements: []
|
170
164
|
rubyforge_project:
|
171
|
-
rubygems_version:
|
165
|
+
rubygems_version: 2.2.0
|
172
166
|
signing_key:
|
173
|
-
specification_version:
|
167
|
+
specification_version: 4
|
174
168
|
summary: Plugin of codemodels to build models from Ruby code.
|
175
169
|
test_files:
|
176
170
|
- test/data/ActionButtonsColumnTag.java
|